Work on wtp descriptor CAPWAP
This commit is contained in:
		
							
								
								
									
										19
									
								
								src/cw/cfg.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								src/cw/cfg.c
									
									
									
									
									
								
							@ -154,7 +154,6 @@ const char *cw_cfg_get_l(cw_Cfg_t ** cfg, const char * key, const char *def)
 | 
			
		||||
	int i;
 | 
			
		||||
	struct cw_Cfg_entry e, *r;
 | 
			
		||||
	for(i=0; cfg[i]!=NULL; i++){
 | 
			
		||||
//		cw_dbg(DBG_X,"GET_L IN: %p",cfg[i]);
 | 
			
		||||
		e.key = key;
 | 
			
		||||
		r = mavl_get(cfg[i]->cfg, &e);
 | 
			
		||||
		if (r!=NULL)
 | 
			
		||||
@ -177,11 +176,29 @@ bstr16_t cw_cfg_get_bstr16(cw_Cfg_t * cfg, const char * key, const char *def)
 | 
			
		||||
 | 
			
		||||
	s = cw_cfg_get(cfg,key,def);
 | 
			
		||||
	if(s==NULL)
 | 
			
		||||
		s=def;
 | 
			
		||||
	if (s==NULL)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	return bstr16_create_from_str(s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bstr16_t cw_cfg_get_bstr16_l(cw_Cfg_t **cfgs, const char * key, const char *def)
 | 
			
		||||
{
 | 
			
		||||
	bstr16_t s;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	for(i=0; cfgs[i]!=NULL; i++){
 | 
			
		||||
		s = cw_cfg_get_bstr16(cfgs[i],key,NULL);
 | 
			
		||||
		if (s!=NULL)
 | 
			
		||||
			return s;
 | 
			
		||||
	}
 | 
			
		||||
	if (def == NULL)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	return bstr16_create_from_str(def);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int cw_cfg_set_bstr16(cw_Cfg_t * cfg, const char * key, bstr16_t str)
 | 
			
		||||
{
 | 
			
		||||
	CW_TYPE_BSTR16->read(cfg,key,bstr16_data(str),bstr16_len(str),NULL);
 | 
			
		||||
 | 
			
		||||
@ -93,6 +93,7 @@ int cw_cfg_get_first_index_l(cw_Cfg_t ** cfgs, const char *key, int n);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int cw_cfg_set_val(cw_Cfg_t * cfg, const char *key, const struct cw_Type *t, const void * valguard, const uint8_t * data, int len);
 | 
			
		||||
bstr16_t cw_cfg_get_bstr16_l(cw_Cfg_t **cfgs, const char * key, const char *def);
 | 
			
		||||
 | 
			
		||||
#define cw_cfg_get_word2(cfg1,cfg2,key,def) \
 | 
			
		||||
	cw_cfg_get_word(cfg1,key,cw_cfg_get_word(cfg2,key,def))
 | 
			
		||||
 | 
			
		||||
@ -8,24 +8,19 @@
 | 
			
		||||
int cw_write_descriptor_subelem (uint8_t *dst, cw_Cfg_t ** cfg_list,
 | 
			
		||||
                                 int subelem_id, const char * parent_key )
 | 
			
		||||
{
 | 
			
		||||
	char key[256];
 | 
			
		||||
	char key[CW_CFG_MAX_KEY_LEN];
 | 
			
		||||
	uint32_t vendor;
 | 
			
		||||
	//bstr16_t version;
 | 
			
		||||
	bstr16_t version;
 | 
			
		||||
	const char *vendor_s;
 | 
			
		||||
 | 
			
		||||
	uint8_t *d;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/*        d += cw_put_dword(d, bstrv_get_vendor_id(v));
 | 
			
		||||
	d += cw_put_dword(d, (subelem_id << 16) | bstrv_len(v));
 | 
			
		||||
	d += cw_put_data(d, bstrv_data(v), bstrv_len(v));
 | 
			
		||||
	*/
 | 
			
		||||
	sprintf (key, "%s/%s", parent_key, CW_SKEY_VENDOR);
 | 
			
		||||
	vendor_s = cw_cfg_get_l (cfg_list, key, NULL);
 | 
			
		||||
	
 | 
			
		||||
	if (vendor_s == NULL) {
 | 
			
		||||
		cw_log (LOG_ERR, "Can't put subelem %s, no value of type Dword found.", key);
 | 
			
		||||
		return 0;
 | 
			
		||||
		cw_log (LOG_ERR, "Can't put subelem %s, no value of type found.", key);
 | 
			
		||||
		vendor_s = "0";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	vendor = atoi(vendor_s);	
 | 
			
		||||
@ -33,12 +28,13 @@ int cw_write_descriptor_subelem (uint8_t *dst, cw_Cfg_t ** cfg_list,
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	sprintf (key, "%s/%s", parent_key, CW_SKEY_VERSION);
 | 
			
		||||
	cw_Val_t * val = cw_cfg_get_val_l(cfg_list, key, CW_TYPE_BSTR16);
 | 
			
		||||
//	cw_Val_t * val = cw_cfg_get_val_l(cfg_list, key, CW_TYPE_BSTR16);
 | 
			
		||||
	version = cw_cfg_get_bstr16_l(cfg_list,key,NULL);
 | 
			
		||||
 | 
			
		||||
	//version = cw_cfg_get_bstr16 (cfg, key, NULL);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (val == NULL) {
 | 
			
		||||
	if (version == NULL) {
 | 
			
		||||
		cw_log (LOG_ERR, "Can't put subelem %s, no value of type Bstr16 found.", key);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
@ -49,14 +45,10 @@ int cw_write_descriptor_subelem (uint8_t *dst, cw_Cfg_t ** cfg_list,
 | 
			
		||||
	d += cw_put_dword(d, vendor); //->type->put (vendor, d);
 | 
			
		||||
	
 | 
			
		||||
	/* put version */
 | 
			
		||||
	
 | 
			
		||||
	d += cw_put_dword (d, (subelem_id << 16) | val->type->len(val));
 | 
			
		||||
//	d += cw_put_bstr16(d, version);
 | 
			
		||||
	d += val->type->put(val,d);
 | 
			
		||||
	d += cw_put_dword (d, (subelem_id << 16) | bstr16_len(version));
 | 
			
		||||
	d += cw_put_bstr16(d, version);
 | 
			
		||||
 | 
			
		||||
	cw_val_destroy(val);
 | 
			
		||||
 | 
			
		||||
//	free(version);
 | 
			
		||||
	free(version);
 | 
			
		||||
	
 | 
			
		||||
	return d-dst;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user