20#include "ws_symbol_export.h"
74typedef void (*uat_post_update_cb_t)(void);
88typedef void* (*uat_copy_cb_t)(
void *dest,
const void *source,
size_t len);
146typedef bool (*uat_fld_chk_cb_t)(
void *record,
const char *ptr,
unsigned len,
const void *chk_data,
const void *fld_data,
char **error);
155typedef void (*uat_fld_set_cb_t)(
void *record,
const char *ptr,
unsigned len,
const void *set_data,
const void *fld_data);
164typedef void (*uat_fld_tostr_cb_t)(
void *record,
char **out_ptr,
unsigned *out_len,
const void *tostr_data,
const void *fld_data);
174typedef enum _uat_text_mode_t {
220 PT_TXTMOD_DIRECTORYNAME,
222 PT_TXTMOD_DISPLAY_FILTER,
224 PT_TXTMOD_PROTO_FIELD,
238 uat_text_mode_t mode;
241 uat_fld_chk_cb_t chk;
242 uat_fld_set_cb_t set;
243 uat_fld_tostr_cb_t tostr;
252 const void* fld_data;
259#define UAT_END_FIELDS {NULL,NULL,PT_TXTMOD_NONE,{0,0,0},{0,0,0},0,0,FLDFILL}
270#define UAT_AFFECTS_DISSECTION 0x00000001
271#define UAT_AFFECTS_FIELDS 0x00000002
295 const char* filename,
298 unsigned* num_items_ptr,
304 uat_post_update_cb_t post_update_cb,
329bool uat_load(
uat_t* uat_in,
const char *filename,
const char* app_env_var_prefix,
char** err);
352uat_t* uat_get_table_by_name(
const char* name);
374bool uat_fld_chk_str(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
376bool uat_fld_chk_oid(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
378bool uat_fld_chk_proto(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
380bool uat_fld_chk_field(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
382bool uat_fld_chk_num_dec(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
384bool uat_fld_chk_num_dec64(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
386bool uat_fld_chk_num_hex(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
388bool uat_fld_chk_num_hex64(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
390bool uat_fld_chk_num_signed_dec(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
392bool uat_fld_chk_num_signed_dec64(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
394bool uat_fld_chk_num_dbl(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
396bool uat_fld_chk_bool(
void*,
const char*,
unsigned,
const void*,
const void*,
char** err);
398bool uat_fld_chk_enum(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
400bool uat_fld_chk_range(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
402bool uat_fld_chk_color(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
404typedef void (*uat_cb_t)(
void* uat,
void* user_data);
406void uat_foreach_table(uat_cb_t cb,
void* user_data);
407void uat_unload_all(
void);
414uint8_t* uat_unesc(
const char* si,
unsigned in_len,
unsigned* len_p);
424char* uat_undquote(
const char* si,
unsigned in_len,
unsigned* len_p);
429char* uat_esc(
const uint8_t* buf,
unsigned len);
435char* uat_unbinstring(
const char* si,
unsigned in_len,
unsigned* len_p);
440bool uat_fld_chk_str_isprint(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
443bool uat_fld_chk_str_isalpha(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
446bool uat_fld_chk_str_isalnum(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
449bool uat_fld_chk_str_isdigit(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
452bool uat_fld_chk_str_isxdigit(
void*,
const char*,
unsigned,
const void*,
const void*,
char**);
462#define UNUSED_PARAMETER(n)
464#define UNUSED_PARAMETER(n) n _U_
471#define UAT_CSTRING_CB_DEF(basename,field_name,rec_t) \
472static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
473 char* new_buf = g_strndup(buf,len); \
474 g_free((((rec_t*)rec)->field_name)); \
475 (((rec_t*)rec)->field_name) = new_buf; } \
476static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
477 if (((rec_t*)rec)->field_name ) { \
478 *out_ptr = g_strdup((((rec_t*)rec)->field_name)); \
479 *out_len = (unsigned)strlen((((rec_t*)rec)->field_name)); \
481 *out_ptr = g_strdup(""); *out_len = 0; \
484#define UAT_FLD_CSTRING(basename,field_name,title,desc) \
485 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_str,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
487#define UAT_FLD_CSTRING_ISPRINT(basename,field_name,title,desc) \
488 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_str_isprint,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
490#define UAT_FLD_CSTRING_OTHER(basename,field_name,title,chk,desc) \
491 {#field_name, title, PT_TXTMOD_STRING,{ chk ,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
497#define UAT_FILENAME_CB_DEF(basename,field_name,rec_t) UAT_CSTRING_CB_DEF(basename,field_name,rec_t)
500#define UAT_FLD_FILENAME(basename,field_name,title,desc) \
501 {#field_name, title, PT_TXTMOD_FILENAME,{uat_fld_chk_str,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
509#define UAT_FLD_FILENAME_OTHER(basename,field_name,title,chk,desc) \
510 {#field_name, title, PT_TXTMOD_FILENAME,{chk,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
512#define UAT_DIRECTORYNAME_CB_DEF(basename,field_name,rec_t) UAT_CSTRING_CB_DEF(basename,field_name,rec_t)
514#define UAT_FLD_DIRECTORYNAME(basename,field_name,title,desc) \
515 {#field_name, title, PT_TXTMOD_DIRECTORYNAME,{uat_fld_chk_str,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
521#define UAT_DISPLAY_FILTER_CB_DEF(basename,field_name,rec_t) UAT_CSTRING_CB_DEF(basename,field_name,rec_t)
523#define UAT_FLD_DISPLAY_FILTER(basename,field_name,title,desc) \
524 {#field_name, title, PT_TXTMOD_DISPLAY_FILTER, {uat_fld_chk_str,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
530#define UAT_PROTO_FIELD_CB_DEF(basename,field_name,rec_t) UAT_CSTRING_CB_DEF(basename,field_name,rec_t)
532#define UAT_FLD_PROTO_FIELD(basename,field_name,title,desc) \
533 {#field_name, title, PT_TXTMOD_PROTO_FIELD, {uat_fld_chk_field,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
538#define UAT_FLD_OID(basename,field_name,title,desc) \
539 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_oid,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
549#define UAT_LSTRING_CB_DEF(basename,field_name,rec_t,ptr_element,len_element) \
550static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
551 uint8_t* new_val = uat_unesc(buf,len,&(((rec_t*)rec)->len_element)); \
552 g_free((((rec_t*)rec)->ptr_element)); \
553 (((rec_t*)rec)->ptr_element) = new_val; } \
554static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
555 if (((rec_t*)rec)->ptr_element ) { \
556 *out_ptr = uat_esc(((rec_t*)rec)->ptr_element, (((rec_t*)rec)->len_element)); \
557 *out_len = (unsigned)strlen(*out_ptr); \
559 *out_ptr = g_strdup(""); \
563#define UAT_FLD_LSTRING(basename,field_name,title, desc) \
564{#field_name, title, PT_TXTMOD_STRING,{0,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
572#define UAT_BUFFER_CB_DEF(basename,field_name,rec_t,ptr_element,len_element) \
573static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
574 unsigned char* new_buf = len ? (unsigned char *)g_memdup2(buf,len) : NULL; \
575 g_free((((rec_t*)rec)->ptr_element)); \
576 (((rec_t*)rec)->ptr_element) = new_buf; \
577 (((rec_t*)rec)->len_element) = len; } \
578static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
579 *out_ptr = ((rec_t*)rec)->ptr_element ? (char*)g_memdup2(((rec_t*)rec)->ptr_element,((rec_t*)rec)->len_element) : g_strdup(""); \
580 *out_len = ((rec_t*)rec)->len_element; }
582#define UAT_FLD_BUFFER(basename,field_name,title,desc) \
583 {#field_name, title, PT_TXTMOD_HEXBYTES,{0,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
590#define UAT_DEC_CB_DEF(basename,field_name,rec_t) \
591static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
592 char* tmp_str = g_strndup(buf,len); \
593 ws_strtou32(tmp_str, NULL, &((rec_t*)rec)->field_name); \
595static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
596 *out_ptr = ws_strdup_printf("%u",((rec_t*)rec)->field_name); \
597 *out_len = (unsigned)strlen(*out_ptr); }
599#define UAT_FLD_DEC(basename,field_name,title,desc) \
600 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_dec,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
605#define UAT_DEC64_CB_DEF(basename,field_name,rec_t) \
606static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
607 char* tmp_str = g_strndup(buf,len); \
608 ws_strtou64(tmp_str, NULL, &((rec_t*)rec)->field_name); \
610static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
611 *out_ptr = ws_strdup_printf("%" PRIu64,((rec_t*)rec)->field_name); \
612 *out_len = (unsigned)strlen(*out_ptr); }
614#define UAT_FLD_DEC64(basename,field_name,title,desc) \
615 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_dec64,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
620#define UAT_SIGNED_DEC_CB_DEF(basename,field_name,rec_t) \
621static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
622 char* tmp_str = g_strndup(buf,len); \
623 ws_strtoi32(tmp_str, NULL, &((rec_t*)rec)->field_name); \
625static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
626 *out_ptr = ws_strdup_printf("%d",((rec_t*)rec)->field_name); \
627 *out_len = (unsigned)strlen(*out_ptr); }
629#define UAT_FLD_SIGNED_DEC(basename,field_name,title,desc) \
630 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_signed_dec,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
635#define UAT_SIGNED_DEC64_CB_DEF(basename,field_name,rec_t) \
636static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
637 char* tmp_str = g_strndup(buf,len); \
638 ws_strtoi64(tmp_str, NULL, &((rec_t*)rec)->field_name); \
640static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
641 *out_ptr = ws_strdup_printf("%" PRId64,((rec_t*)rec)->field_name); \
642 *out_len = (unsigned)strlen(*out_ptr); }
644#define UAT_FLD_SIGNED_DEC64(basename,field_name,title,desc) \
645 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_signed_dec64,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
647#define UAT_FLD_NONE(basename,field_name,title,desc) \
648 {#field_name, title, PT_TXTMOD_NONE,{uat_fld_chk_num_dec,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
655#define UAT_HEX_CB_DEF(basename,field_name,rec_t) \
656static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
657 char* tmp_str = g_strndup(buf,len); \
658 ws_hexstrtou32(tmp_str, NULL, &((rec_t*)rec)->field_name); \
660static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
661 *out_ptr = ws_strdup_printf("%x",((rec_t*)rec)->field_name); \
662 *out_len = (unsigned)strlen(*out_ptr); }
664#define UAT_FLD_HEX(basename,field_name,title,desc) \
665{#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_hex,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
671#define UAT_HEX64_CB_DEF(basename,field_name,rec_t) \
672static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
673 char* tmp_str = g_strndup(buf,len); \
674 ws_hexstrtou64(tmp_str, NULL, &((rec_t*)rec)->field_name); \
676static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
677 *out_ptr = ws_strdup_printf("%" PRIx64,((rec_t*)rec)->field_name); \
678 *out_len = (unsigned)strlen(*out_ptr); }
680#define UAT_FLD_HEX64(basename,field_name,title,desc) \
681{#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_hex64,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
692#define UAT_DBL_CB_DEF(basename,field_name,rec_t) \
693static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
694 char* tmp_str = g_strndup(buf,len); \
695 ((rec_t*)rec)->field_name = g_ascii_strtod(tmp_str, NULL); \
697static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
699 *out_ptr = ws_strdup(dtoa_g_fmt(buf, ((rec_t*)rec)->field_name)); \
700 *out_len = (unsigned)strlen(*out_ptr); }
702#define UAT_FLD_DBL(basename,field_name,title,desc) \
703 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_num_dbl,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
712#define UAT_BOOL_CB_DEF(basename,field_name,rec_t) \
713static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
714 char* tmp_str = g_strndup(buf,len); \
715 if (tmp_str && g_ascii_strcasecmp(tmp_str, "true") == 0) \
716 ((rec_t*)rec)->field_name = 1; \
718 ((rec_t*)rec)->field_name = 0; \
720static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
721 *out_ptr = ws_strdup_printf("%s",((rec_t*)rec)->field_name ? "TRUE" : "FALSE"); \
722 *out_len = (unsigned)strlen(*out_ptr); }
724#define UAT_FLD_BOOL(basename,field_name,title,desc) \
725{#field_name, title, PT_TXTMOD_BOOL,{uat_fld_chk_bool,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
734#define UAT_VS_DEF(basename,field_name,rec_t,default_t,default_val,default_str) \
735static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* vs, const void* UNUSED_PARAMETER(u2)) {\
737 char* str = g_strndup(buf,len); \
739 ((rec_t*)rec)->field_name = default_val; \
740 for(i=0; ( cstr = ((const value_string*)vs)[i].strptr ) ;i++) { \
741 if (g_str_equal(cstr,str)) { \
742 ((rec_t*)rec)->field_name = (default_t)((const value_string*)vs)[i].value; \
748static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* vs, const void* UNUSED_PARAMETER(u2)) {\
750 for(i=0;((const value_string*)vs)[i].strptr;i++) { \
751 if ( ((const value_string*)vs)[i].value == ((rec_t*)rec)->field_name ) { \
752 *out_ptr = g_strdup(((const value_string*)vs)[i].strptr); \
753 *out_len = (unsigned)strlen(*out_ptr); \
757 *out_ptr = g_strdup(default_str); \
758 *out_len = (unsigned)strlen(default_str); }
760#define UAT_VS_CSTRING_DEF(basename,field_name,rec_t,default_val,default_str) \
761static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* vs, const void* UNUSED_PARAMETER(u2)) {\
763 char* str = g_strndup(buf,len); \
765 ((rec_t*)rec)->field_name = default_val; \
766 for(i=0; ( cstr = ((const value_string*)vs)[i].strptr ) ;i++) { \
767 if (g_str_equal(cstr,str)) { \
768 ((rec_t*)rec)->field_name = g_strdup(((const value_string*)vs)[i].strptr); \
774static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(vs), const void* UNUSED_PARAMETER(u2)) {\
775 if (((rec_t*)rec)->field_name ) { \
776 *out_ptr = g_strdup((((rec_t*)rec)->field_name)); \
777 *out_len = (unsigned)strlen((((rec_t*)rec)->field_name)); \
779 *out_ptr = g_strdup(""); *out_len = 0; } }
781#define UAT_FLD_VS(basename,field_name,title,enum,desc) \
782 {#field_name, title, PT_TXTMOD_ENUM,{uat_fld_chk_enum,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{&(enum),&(enum),&(enum)},&(enum),desc,FLDFILL}
789#define UAT_COLOR_CB_DEF(basename,field_name,rec_t) \
790static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
792 ((rec_t*)rec)->field_name = 0; \
795 char* tmp_str = g_strndup(buf+1,len-1); \
796 ((rec_t*)rec)->field_name = (unsigned)strtol(tmp_str,NULL,16); \
798static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
799 *out_ptr = ws_strdup_printf("#%06X",((rec_t*)rec)->field_name); \
800 *out_len = (unsigned)strlen(*out_ptr); }
802#define UAT_FLD_COLOR(basename,field_name,title,desc) \
803{#field_name, title, PT_TXTMOD_COLOR,{uat_fld_chk_color,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
810#define UAT_DISSECTOR_DEF(basename, field_name, dissector_field, name_field, rec_t) \
811static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
813 ((rec_t*)rec)->name_field = g_strndup(buf, len); \
814 g_strstrip(((rec_t*)rec)->name_field); \
815 ((rec_t*)rec)->dissector_field = find_dissector(((rec_t*)rec)->name_field); \
817 ((rec_t*)rec)->dissector_field = find_dissector("data"); \
818 ((rec_t*)rec)->name_field = NULL; \
820static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
821 if ( ((rec_t*)rec)->name_field ) { \
822 *out_ptr = g_strdup((((rec_t*)rec)->name_field)); \
823 *out_len = (unsigned)strlen(*out_ptr); \
825 *out_ptr = g_strdup(""); *out_len = 0; \
829#define UAT_FLD_DISSECTOR(basename,field_name,title,desc) \
830 {#field_name, title, PT_TXTMOD_DISSECTOR,{uat_fld_chk_proto,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
832#define UAT_FLD_DISSECTOR_OTHER(basename,field_name,title,chk,desc) \
833 {#field_name, title, PT_TXTMOD_DISSECTOR,{chk,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},{0,0,0},0,desc,FLDFILL}
839#define UAT_RANGE_CB_DEF(basename,field_name,rec_t) \
840static void basename ## _ ## field_name ## _set_cb(void* rec, const char* buf, unsigned len, const void* UNUSED_PARAMETER(u1), const void* u2) {\
841 char* rng = g_strndup(buf,len);\
842 range_convert_str(NULL, &(((rec_t*)rec)->field_name), rng,GPOINTER_TO_UINT(u2)); \
845static void basename ## _ ## field_name ## _tostr_cb(void* rec, char** out_ptr, unsigned* out_len, const void* UNUSED_PARAMETER(u1), const void* UNUSED_PARAMETER(u2)) {\
846 if ( ((rec_t*)rec)->field_name ) { \
847 *out_ptr = range_convert_range(NULL, ((rec_t*)rec)->field_name); \
848 *out_len = (unsigned)strlen(*out_ptr); \
850 *out_ptr = g_strdup(""); *out_len = 0; \
854#define UAT_FLD_RANGE(basename,field_name,title,max,desc) \
855 {#field_name, title, PT_TXTMOD_STRING,{uat_fld_chk_range,basename ## _ ## field_name ## _set_cb,basename ## _ ## field_name ## _tostr_cb},\
856 {0,0,0},GUINT_TO_POINTER(max),desc,FLDFILL}
void *(* uat_copy_cb_t)(void *dest, const void *source, size_t len)
Definition uat.h:88
WS_DLL_PUBLIC void uat_set_default_values(uat_t *uat_in, const char *default_values[])
Definition uat.c:283
WS_DLL_PUBLIC uat_t * uat_new(const char *name, size_t size, const char *filename, bool from_profile, void *data_ptr, unsigned *num_items_ptr, unsigned flags, const char *help, uat_copy_cb_t copy_cb, uat_update_cb_t update_cb, uat_free_cb_t free_cb, uat_post_update_cb_t post_update_cb, uat_reset_cb_t reset_cb, uat_field_t *flds_array)
Definition uat.c:43
void(* uat_free_cb_t)(void *record)
Definition uat.h:98
void uat_cleanup(void)
Definition uat.c:589
WS_DLL_PUBLIC bool uat_load_str(uat_t *uat_in, const char *entry, char **err)
bool(* uat_update_cb_t)(void *record, char **error)
Definition uat.h:126
void(* uat_reset_cb_t)(void)
Definition uat.h:106
uat_t * uat_find(char *name)
Definition uat.c:520
WS_DLL_PUBLIC void uat_destroy(uat_t *uat)
Definition uat.c:601
WS_DLL_PUBLIC bool uat_load(uat_t *uat_in, const char *filename, const char *app_env_var_prefix, char **err)