More strict message checking.
FossilOrigin-Name: 66228f5dc19b06d83bb49d77bafd74155b88cb8e6633c34b400bd0633f7111b3
This commit is contained in:
		| @ -30,31 +30,61 @@ | ||||
| #include <netinet/in.h> | ||||
|  | ||||
|  | ||||
| struct eparm { | ||||
| 	int *mand; | ||||
| 	struct ac_info *acinfo; | ||||
| }; | ||||
|  | ||||
|  | ||||
| static int acinfo_readelem_discovery_resp(void * a,int type,uint8_t* msgelem,int len) | ||||
|  | ||||
| static int acinfo_readelem_discovery_resp(void * eparm,int type,uint8_t* msgelem,int len) | ||||
| { | ||||
|  | ||||
| 	struct ac_info * acinfo = (struct ac_info *)a; | ||||
| 	cw_log_debug1("Process discovery resp msgelem, type=%d, len=%d\n",type,len); | ||||
|  | ||||
| 	if (acinfo_readelem_ac_descriptor(acinfo,type,msgelem,len))  | ||||
| 		return 1; | ||||
|  | ||||
| 	if (acinfo_readelem_ac_name(acinfo,type,msgelem,len))  | ||||
| 		return 1; | ||||
| 	cw_dbg_msgelem(CWMSG_DISCOVERY_RESPONSE, type, msgelem, len); | ||||
| 	 | ||||
| 	if (acinfo_readelem_ctrl_ip_addr(acinfo,type,msgelem,len))  | ||||
| 	struct eparm *e = (struct eparm *) eparm; | ||||
|  | ||||
|  | ||||
| 	if (acinfo_readelem_ac_descriptor(e->acinfo,type,msgelem,len)) | ||||
| 		goto foundX; | ||||
|  | ||||
| 	if (acinfo_readelem_ac_name(e->acinfo,type,msgelem,len))  | ||||
| 		goto foundX; | ||||
| 	 | ||||
| 	if (acinfo_readelem_ctrl_ip_addr(e->acinfo,type,msgelem,len)){ | ||||
| 		cw_mand_elem_found(e->mand, XCWMSGELEM_CAPWAP_CONTROL_IP_ADDRESS); | ||||
| 		return 1; | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
|  | ||||
|       foundX: | ||||
| 	cw_mand_elem_found(e->mand, type); | ||||
| 	return 1; | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| void cwread_discovery_response(struct ac_info * acinfo, uint8_t * msg, int len) | ||||
| { | ||||
| 	cw_foreach_msgelem(msg,len,acinfo_readelem_discovery_resp,acinfo); | ||||
| 	int mand[] = { | ||||
| 		CWMSGELEM_AC_DESCRIPTOR, | ||||
| 		CWMSGELEM_AC_NAME, | ||||
| 		XCWMSGELEM_CAPWAP_CONTROL_IP_ADDRESS, | ||||
| 		XCWMSGELEM_CAPWAP_RADIO_INFO, | ||||
|  | ||||
| 		-1 | ||||
| 	}; | ||||
|  | ||||
| 	 | ||||
| 	struct eparm eparm; | ||||
| 	eparm.acinfo = acinfo; | ||||
| 	eparm.mand = mand; | ||||
|  | ||||
|  | ||||
| 	cw_foreach_msgelem(msg,len,acinfo_readelem_discovery_resp,&eparm); | ||||
|  | ||||
| 	cw_dbg_missing_mand_elems_(0, CWMSG_DISCOVERY_RESPONSE, eparm.mand); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user