diff --git a/src/ac/conf.c b/src/ac/conf.c index 78cefe3a..8bf6614d 100644 --- a/src/ac/conf.c +++ b/src/ac/conf.c @@ -33,7 +33,7 @@ uint8_t conf_macaddress[12]; uint8_t conf_macaddress_len=0; -char * conf_acname = NULL; +const const char * conf_acname = NULL; int conf_acname_len = 0; char * conf_acid = NULL; @@ -73,8 +73,12 @@ char * conf_dtls_psk=NULL; int conf_security=0; long conf_vendor_id=CONF_DEFAULT_VENDOR_ID; -char * conf_hardware_version; -char * conf_software_version; +char * conf_hardware_version=NULL; +int conf_hardware_version_len=0; + +char * conf_software_version=NULL; +int conf_software_version_len=0; + int conf_use_loopback = 0; @@ -102,8 +106,9 @@ int conf_dtls_verify_peer=1; static int init_acname() { if (conf_acname == NULL){ - conf_acname=malloc(strlen(CONF_DEFAULT_ACNAME)+strlen(conf_acid)+1); - sprintf(conf_acname,"%s%s",CONF_DEFAULT_ACNAME,conf_acid); + char *s=malloc(strlen(CONF_DEFAULT_ACNAME)+strlen(conf_acid)+1); + sprintf(s,"%s%s",CONF_DEFAULT_ACNAME,conf_acid); + conf_acname=s; } conf_acname_len=strlen(conf_acname); return 1; @@ -162,6 +167,71 @@ static int init_vendor_id() return 1; } + +static int convert_version_string(char * si[], int *l) +{ + char * s = *si; + + if (*l<=1) + return 1; + + if (s[0]!='.'){ + return 1; + } + + if (*l<=2) + return 1; + + if (s[1]=='.'){ + char * ns = malloc(*l-1); + strcpy (ns,s+1); + free(*si); + *si=ns; + *l-=1; + return 1; + } + + if (s[1]=='x'){ + char * ns=0; + int len=0; + int ch,cl; + char *ss = s+2; + int rc ; + do { + rc = sscanf(ss,"%01X",&ch); + if (rc!=1) + break; + ss++; + rc = sscanf(ss,"%01X",&cl); + if (!rc) + cl=0; + ss++; + int c=(ch<<4) | cl; + + len++; + ns = realloc(ns,len); + ns[len-1]=c; + + + }while (rc==1); + free(*si); + *si=ns; + return 1; + + } + + if (strcmp(s,".reflect")==0){ + free(*si); + *si=0; + *l=0; + return 1; + } + + return 1; +} + + + static int init_version() { if (!conf_hardware_version) @@ -175,9 +245,16 @@ static int init_version() sprintf(str,"%s / %s %s",u.machine,u.sysname,u.release); conf_hardware_version=strdup(str); } + } + conf_hardware_version_len=strlen(conf_hardware_version); + convert_version_string(&conf_hardware_version,&conf_hardware_version_len); + if (!conf_software_version) conf_software_version=CONF_DEFAULT_SOFTWARE_VERSION; + conf_software_version_len=strlen(conf_software_version); + + convert_version_string(&conf_software_version,&conf_software_version_len); return 1; } @@ -436,6 +513,75 @@ static int conf_read_strings( cfg_t * cfg, char * name, char ***dst,int *len) } +struct conf_dbg_level_names{ + const char *name; + int level; +}; + + + + +static int conf_read_dbg_level(cfg_t *cfg) +{ + const char * name = "dbg"; + int n,i; + n = cfg_size(cfg, name); + + + for (i=0; i