From 48aa62b5be187e39a590b30d6016d74db6b56a64 Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sat, 31 Mar 2018 06:37:18 +0000
Subject: [PATCH] discovery saves result in struct
clean-up works now
FossilOrigin-Name: b748ddb215a807c4634de1492c35aadfd4df7054b43bf73627b3ee67b224e0aa
---
libcw.project | 2 ++
src/cw/Makefile | 2 ++
src/cw/cw_ktv_get_dword.c | 11 +++++++++++
src/cw/cw_ktv_get_sysptr.c | 11 +++++++++++
src/cw/cw_ktv_mavldel.c | 11 ++++++-----
src/cw/ktv.h | 2 ++
src/cw/mlist.h | 6 ++++++
src/cw/mlist_append_ptr.c | 6 ++++++
src/wtp/discovery.c | 14 +++++++++++++-
src/wtp/wtp_main.c | 13 +++++++++++++
10 files changed, 72 insertions(+), 6 deletions(-)
create mode 100644 src/cw/cw_ktv_get_dword.c
create mode 100644 src/cw/cw_ktv_get_sysptr.c
diff --git a/libcw.project b/libcw.project
index 0ac0a825..4c52a4b0 100644
--- a/libcw.project
+++ b/libcw.project
@@ -267,6 +267,8 @@
+
+
diff --git a/src/cw/Makefile b/src/cw/Makefile
index 390674d6..475d5621 100644
--- a/src/cw/Makefile
+++ b/src/cw/Makefile
@@ -70,6 +70,8 @@ CWSRC=\
cw_ktv_get_byte.c\
cw_ktv_get.c\
cw_ktv_get_word.c\
+ cw_ktv_get_dword.c\
+ cw_ktv_get_sysptr.c\
cw_ktv_idx_get.c\
cw_ktv_mavlcmp.c\
cw_ktv_mavlcmp_type_by_name.c\
diff --git a/src/cw/cw_ktv_get_dword.c b/src/cw/cw_ktv_get_dword.c
new file mode 100644
index 00000000..0a3bf930
--- /dev/null
+++ b/src/cw/cw_ktv_get_dword.c
@@ -0,0 +1,11 @@
+#include "ktv.h"
+
+uint32_t cw_ktv_get_dword(mavl_t ktv,const char *key, uint32_t def)
+{
+ cw_KTV_t * k;
+ k = cw_ktv_get(ktv,key,CW_TYPE_DWORD);
+ if (k != NULL){
+ return k->val.dword;
+ }
+ return def;
+}
diff --git a/src/cw/cw_ktv_get_sysptr.c b/src/cw/cw_ktv_get_sysptr.c
new file mode 100644
index 00000000..06e3c108
--- /dev/null
+++ b/src/cw/cw_ktv_get_sysptr.c
@@ -0,0 +1,11 @@
+#include "ktv.h"
+
+void * cw_ktv_get_sysptr(mavl_t ktv,const char *key, void * def)
+{
+ cw_KTV_t * k;
+ k = cw_ktv_get(ktv,key,CW_TYPE_SYSPTR);
+ if (k != NULL){
+ return k->val.ptr;
+ }
+ return def;
+}
diff --git a/src/cw/cw_ktv_mavldel.c b/src/cw/cw_ktv_mavldel.c
index 627111df..0be9692c 100644
--- a/src/cw/cw_ktv_mavldel.c
+++ b/src/cw/cw_ktv_mavldel.c
@@ -6,10 +6,11 @@
void cw_ktv_mavldel(void *data)
{
- struct cw_KTV *kvt = data;
+ struct cw_KTV *ktv = data;
+ /*printf("KTV Del Key,Type: %s %s\n", ktv->key,ktv->type->name);*/
+ if (ktv->type->del){
+ ktv->type->del(data);
+ }
- if (kvt->type->del)
- kvt->type->del(data);
-
- free(kvt->key);
+ free(ktv->key);
}
diff --git a/src/cw/ktv.h b/src/cw/ktv.h
index 2567c2e9..927eae53 100644
--- a/src/cw/ktv.h
+++ b/src/cw/ktv.h
@@ -134,6 +134,8 @@ int cw_ktv_read_file(FILE * file, mavl_t ktv, mavl_t types);
cw_KTV_t * cw_ktv_get(mavl_t ktv, const char *key, const cw_Type_t * type);
uint8_t cw_ktv_get_byte(mavl_t ktv,const char *key, uint8_t def);
uint16_t cw_ktv_get_word(mavl_t ktv,const char *key, uint16_t def);
+uint32_t cw_ktv_get_dword(mavl_t ktv,const char *key, uint32_t def);
+void * cw_ktv_get_sysptr(mavl_t ktv,const char *key, void * def);
int cw_ktv_idx_get(mavl_t ktv, const char *key, int idx, const cw_Type_t * type);
diff --git a/src/cw/mlist.h b/src/cw/mlist.h
index 45aa0962..668fdadb 100644
--- a/src/cw/mlist.h
+++ b/src/cw/mlist.h
@@ -94,8 +94,14 @@ extern struct mlistelem *mlist_find(mlist_t l, struct mlistelem *start, void *da
#define mlistelem_get_ptr(elem) (*((void**)(mlistelem_dataptr(elem))))
#define mlistelem_get_str(elem) mlistelem_get_ptr(elem)
#define mlist_create_conststr() mlist_create(NULL,NULL,sizeof(const char*))
+
+
mlistelem_t * mlist_append_ptr (mlist_t list, void * ptr);
+/*#define mlist_append_ptr(list,ptr) mlist_append(list,&(ptr))*/
+
+
+
/**
* @} MLIST
*/
diff --git a/src/cw/mlist_append_ptr.c b/src/cw/mlist_append_ptr.c
index d96c6b6e..edf2804c 100644
--- a/src/cw/mlist_append_ptr.c
+++ b/src/cw/mlist_append_ptr.c
@@ -1,5 +1,11 @@
#include "mlist.h"
+/**
+ * @brief Append a pointer value to mlist
+ * @param list List to append to
+ * @param ptr Pointer to append
+ * @return the created element or NULL if an error has occured
+ */
mlistelem_t * mlist_append_ptr (mlist_t list, void * ptr)
{
return mlist_append (list, &ptr);
diff --git a/src/wtp/discovery.c b/src/wtp/discovery.c
index 2005c06e..1053cb43 100644
--- a/src/wtp/discovery.c
+++ b/src/wtp/discovery.c
@@ -74,6 +74,8 @@ int cw_select_ac(mavl_t local_cfg, struct cw_DiscoveryResult * dis)
cw_ktv_add(dis->prio_ip, key, CW_TYPE_SYSPTR, (uint8_t *) (&ipval),
sizeof(ipval));
+ cw_ktv_add(dis->prio_ac, key, CW_TYPE_SYSPTR, (uint8_t *)(&remote_cfg),
+ sizeof(remote_cfg));
i++;
en++;
} while (1);
@@ -97,10 +99,20 @@ void cw_discovery_free_results(struct cw_DiscoveryResult * dis)
}
+static void result_del(void * data)
+{
+
+ mavl_t todelete = *((void**)data);
+ mavl_destroy(todelete);
+
+
+ /*mavl_t*/
+}
int cw_discovery_init_results(struct cw_DiscoveryResult *dis)
{
- dis->results = mlist_create(NULL, NULL, sizeof(void *));
+
+ dis->results = mlist_create(NULL, result_del, sizeof(void *));
if (dis->results==NULL)
goto errX;
dis->prio_ac=cw_ktv_create();
diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c
index 483b7b7d..7292026e 100644
--- a/src/wtp/wtp_main.c
+++ b/src/wtp/wtp_main.c
@@ -164,6 +164,9 @@ int main (int argc, char **argv)
cw_run_discovery(conn, "255.255.255.255",NULL, &dis);
cw_dbg_ktv_dump(dis.prio_ip, DBG_INFO, "=== IP list ===", "IP", "=== END IP List ===");
+
+
+
{
mavliter_t i;
mavliter_init(&i, dis.prio_ip);
@@ -172,14 +175,24 @@ int main (int argc, char **argv)
char ipstr[100];
char *rk;
cw_KTV_t *val;
+ mavl_t cfg;
+
val = mavliter_get(&i);
rk = val->key;
val = val->val.ptr;
val->type->to_str(val, ipstr, 100);
printf("PTRVAL(%s): %s - %s\n", rk, val->key, ipstr);
+
+
+ cfg = cw_ktv_get_sysptr(dis.prio_ac,rk,NULL);
+
+ cw_dbg_ktv_dump(cfg,DBG_INFO,"----- dump of remote","dmp","endof of remote -------");
+
}
}
+ cw_discovery_free_results(&dis);
+
return (EXIT_SUCCESS);
}