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); }