diff --git a/src/capwap/conn_prepare_image_data_request.c b/src/capwap/conn_prepare_image_data_request.c index 8b07a4f5..c9c02c28 100644 --- a/src/capwap/conn_prepare_image_data_request.c +++ b/src/capwap/conn_prepare_image_data_request.c @@ -37,17 +37,21 @@ int conn_prepare_image_data_request(struct conn *conn, struct cwimage_data *data if (conn->capwap_mode == CWMODE_CISCO) { uint8_t type = 3; uint16_t checksum = htons(lw_checksum(data->data, data->len)); - cwmsg_vaddelem(cwmsg, CWMSGELEM_IMAGE_DATA, 3, - &type, 1, &checksum, 2, data->data, data->len); + cwmsg_vaddelem(cwmsg, CWMSGELEM_IMAGE_DATA, + &type, 1, + &checksum, 2, + data->data, data->len, + NULL); return 0; } /* standard capwap operation */ - cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_DATA, 2, + cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_DATA, &data->type, sizeof(data->type), - data->data, data->len + data->data, data->len, + NULL ); diff --git a/src/capwap/cwmsg.h b/src/capwap/cwmsg.h index cf7a6d8c..234c6acc 100644 --- a/src/capwap/cwmsg.h +++ b/src/capwap/cwmsg.h @@ -27,7 +27,7 @@ extern void cwmsg_init(struct cwmsg * cwmsg, uint8_t *buffer, int type, int seqn //int cwmsg_send(struct cwmsg * cwmsg, int seqnum, int rid, struct conn * conn); // extern void cwmsg_addelem(struct cwmsg *msg,int type, const uint8_t *elem, int len); -extern void cwmsg_vaddelem(struct cwmsg *msg,int type,int n, ...); +extern void cwmsg_vaddelem(struct cwmsg *msg,int type, ...); extern void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo,struct wtpinfo * wtpinfo); extern void cwmsg_addelem_ac_timestamp(struct cwmsg *msg); diff --git a/src/capwap/cwmsg_addelem_image_identifier.c b/src/capwap/cwmsg_addelem_image_identifier.c index f68d7987..1549b455 100644 --- a/src/capwap/cwmsg_addelem_image_identifier.c +++ b/src/capwap/cwmsg_addelem_image_identifier.c @@ -23,7 +23,7 @@ void cwmsg_addelem_image_identifier(struct cwmsg *cwmsg,uint32_t vendor_id,uint8 { // uint32_t net_vendor_id = htonl(vendor_id); - cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_IDENTIFIER,1,img,len); + cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_IDENTIFIER,img,len,NULL); // cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_IDENTIFIER,2,&net_vendor_id,sizeof(net_vendor_id),img,len); } diff --git a/src/capwap/cwmsg_vaddelem.c b/src/capwap/cwmsg_vaddelem.c index 4fd3d5b7..fe0dbc65 100644 --- a/src/capwap/cwmsg_vaddelem.c +++ b/src/capwap/cwmsg_vaddelem.c @@ -22,19 +22,20 @@ #include "cwmsg.h" -void cwmsg_vaddelem(struct cwmsg *msg,int type,int n, ...) +void cwmsg_vaddelem(struct cwmsg *msg,int type, ...) { va_list vl; - va_start(vl,n); - int i,len=0; - for (i=0; imsgelems+4+msg->pos+len,data,l); len+=l; } + uint32_t val = type<<16|len; *((uint32_t*)(msg->msgelems+msg->pos))=htonl(val); msg->pos+=4+len; diff --git a/src/capwap/cwsend_image_data_request.c b/src/capwap/cwsend_image_data_request.c index bde38101..681601ac 100644 --- a/src/capwap/cwsend_image_data_request.c +++ b/src/capwap/cwsend_image_data_request.c @@ -35,10 +35,11 @@ int cwsend_image_data_request(struct conn * conn, struct image_data * data, stru uint8_t type=3; uint16_t checksum=0; - cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_DATA, 2, + cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_DATA, &type, 1, &checksum,2, - data->data, data->len + data->data, data->len, + NULL );