From e638fd4aa2259c303179410323cbf045db50c343 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Mon, 18 Aug 2014 05:30:21 +0000 Subject: [PATCH] ... FossilOrigin-Name: 2a80ff74e83e1f6e99aba589ec8cec08d640199362326c61959aff81e93c5e0c --- src/capwap/conn_get_message.c | 1 + src/capwap/conn_get_response.c | 47 ++++++++++-------------- src/capwap/conn_q_recv_packet.c | 1 + src/capwap/conn_recv_packet.c | 10 +++-- src/capwap/cwmsg_addelem_ac_descriptor.c | 27 +++++++++++--- src/capwap/cwsend_image_data_request.c | 11 ++++++ src/wtp/join.c | 8 +++- src/wtp/wtp_main.c | 14 +++---- 8 files changed, 75 insertions(+), 44 deletions(-) diff --git a/src/capwap/conn_get_message.c b/src/capwap/conn_get_message.c index 47fbf853..c8a297ff 100644 --- a/src/capwap/conn_get_message.c +++ b/src/capwap/conn_get_message.c @@ -13,6 +13,7 @@ static int pmessage(void *w, struct cwrmsg * cwrmsg) { uint8_t * buffer; buffer = malloc( sizeof (struct cwrmsg) + cwrmsg->msgelems_len); + memcpy(buffer,cwrmsg,sizeof(struct cwrmsg)); memcpy(buffer+sizeof(struct cwrmsg),cwrmsg->msgelems,cwrmsg->msgelems_len); ((struct cwrmsg*)(buffer))->msgelems=buffer+sizeof(struct cwrmsg); diff --git a/src/capwap/conn_get_response.c b/src/capwap/conn_get_response.c index 24d62727..87ea09b0 100644 --- a/src/capwap/conn_get_response.c +++ b/src/capwap/conn_get_response.c @@ -9,8 +9,6 @@ struct cwrmsg * conn_get_response(struct conn * conn) { - printf("Starting timer 120\n"); - time_t timer = cw_timer_start(160); struct cwmsg * cwmsg = &conn->req_msg; @@ -23,36 +21,31 @@ struct cwrmsg * conn_get_response(struct conn * conn) struct cwrmsg * cwrmsg; - time_t rpt_timer = cw_timer_start(5); - do { - cwrmsg = conn_get_message(conn); + int i; + for (i=0; imax_retransmit; i++) { + time_t r_timer = cw_timer_start(conn->retransmit_interval); - if (cwrmsg){ - cw_dbg(DBG_CW_MSG,"Received message from %s, type=%d - %s" - ,sock_addr2str(&conn->addr),cwrmsg->type,cw_msgtostr(cwrmsg->type)); - if (cwrmsg->type == type){ - printf("Jea!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11\n"); - return cwrmsg; - } - - } + while(!cw_timer_timeout(r_timer)){ + cwrmsg = conn_get_message(conn); + if (cwrmsg){ + cw_dbg(DBG_CW_MSG,"Received message from %s, type=%d - %s" + ,sock_addr2str(&conn->addr),cwrmsg->type,cw_msgtostr(cwrmsg->type)); + if (cwrmsg->type == type){ + printf("Jea!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11\n"); + return cwrmsg; + } + + } - if (cw_timer_timeout(rpt_timer)){ - rpt_timer = cw_timer_start(5); - printf("Retransmitting request\n"); - conn_send_cwmsg(conn,&conn->req_msg); + if (conn->dtls_error) + return 0; } + cw_dbg(DBG_CW_MSG_ERR,"Retransmitting message, type=%d,seq=%d",cwmsg->type,cwmsg->seqnum); + conn_send_cwmsg(conn,&conn->req_msg); - - - if (conn->dtls_error) - return 0; - - }while(!cw_timer_timeout(timer)); - - printf("Timeout!!!!!\n"); - + } + cw_dbg(DBG_CW_MSG_ERR,"Max retransmit's reached, message type=%d,seq=%d",cwmsg->type,cwmsg->seqnum); return 0; } diff --git a/src/capwap/conn_q_recv_packet.c b/src/capwap/conn_q_recv_packet.c index e1b517a9..bf215a24 100644 --- a/src/capwap/conn_q_recv_packet.c +++ b/src/capwap/conn_q_recv_packet.c @@ -26,6 +26,7 @@ int conn_q_recv_packet(struct conn * conn, uint8_t * buffer,int len) { if ( !conn->cur_packet) { +/* while ((conn->cur_packet = conn_q_get_packet(conn)) == 0){*/ if ((conn->cur_packet = conn_q_get_packet(conn)) == 0){ errno = EAGAIN; return -1; diff --git a/src/capwap/conn_recv_packet.c b/src/capwap/conn_recv_packet.c index ce6f701c..2d518ac5 100644 --- a/src/capwap/conn_recv_packet.c +++ b/src/capwap/conn_recv_packet.c @@ -7,15 +7,17 @@ #include "conn.h" +#include + int conn_recv_packet(struct conn* conn,uint8_t *buf,int len) { -// printf("Conn recv packet called\n"); + printf("THHHHHHHHHHHHHHHHHHHHHHHHHe Conn recv packet called\n"); int n; int flags=0; while( (n = recv(conn->sock,(char*)buf,len,flags)) < 0 ){ if (errno!=EINTR) { -/* if (errno == EWOULDBLOCK) + if (errno == EWOULDBLOCK) { printf("would block\n"); } @@ -24,8 +26,8 @@ int conn_recv_packet(struct conn* conn,uint8_t *buf,int len) printf("again\n"); } perror("recv"); -*/ - return n; + + return n; } } return n; diff --git a/src/capwap/cwmsg_addelem_ac_descriptor.c b/src/capwap/cwmsg_addelem_ac_descriptor.c index 952bdb01..c8a99ac5 100644 --- a/src/capwap/cwmsg_addelem_ac_descriptor.c +++ b/src/capwap/cwmsg_addelem_ac_descriptor.c @@ -32,25 +32,42 @@ void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo) int sublen; + sublen = 4; + + *((uint32_t*)(acd+len))=htonl(CW_VENDOR_ID_CISCO); + len+=4; + *((uint32_t*)(acd+len))=htonl((1<<16)|sublen); + len+=4; + *(acd+len)=7; len++; + *(acd+len)=3; len++; + *(acd+len)=1; len++; + *(acd+len)=72; len++; +/* *(acd+len)=5; len++; + *(acd+len)=6; len++; + *(acd+len)=7; len++; + *(acd+len)=8; len++; +*/ + /* software version subelement */ - *((uint32_t*)(acd+len))=0; + +/* *((uint32_t*)(acd+len))=htonl(CW_VENDOR_ID_CISCO); len+=4; sublen=strlen((const char*)acinfo->software_version); - *((uint32_t*)(acd+len))=htonl((5<<16)|sublen); + *((uint32_t*)(acd+len))=htonl((1<<16)|sublen); len+=4; memcpy(acd+len,acinfo->software_version,sublen); len+=sublen; +*/ /* hardware version subelement */ - *((uint32_t*)(acd+len))=0; +/* *((uint32_t*)(acd+len))=htonl(CW_VENDOR_ID_CISCO); len+=4; sublen=strlen((const char*)acinfo->hardware_version); *((uint32_t*)(acd+len))=htonl((4<<16)|sublen); len+=4; memcpy(acd+len,acinfo->hardware_version,sublen); len+=sublen; - - +*/ cwmsg_addelem(msg,CWMSGELEM_AC_DESCRIPTOR,acd,len); } diff --git a/src/capwap/cwsend_image_data_request.c b/src/capwap/cwsend_image_data_request.c index 71b6c8c5..bde38101 100644 --- a/src/capwap/cwsend_image_data_request.c +++ b/src/capwap/cwsend_image_data_request.c @@ -32,10 +32,21 @@ int cwsend_image_data_request(struct conn * conn, struct image_data * data, stru if (data){ // cwmsg_addelem(&cwmsg,CWMSGELEM_IMAGE_DATA,(uint8_t*)&data->type,sizeof(data->type)); + + uint8_t type=3; + uint16_t checksum=0; cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_DATA, 2, + &type, 1, + &checksum,2, + data->data, data->len + ); + + +/* cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_DATA, 2, &data->type, sizeof(data->type), data->data, data->len ); +*/ } return conn_send_cwmsg(conn,cwmsg); diff --git a/src/wtp/join.c b/src/wtp/join.c index f4742390..8b203176 100644 --- a/src/wtp/join.c +++ b/src/wtp/join.c @@ -89,6 +89,9 @@ int join(struct sockaddr *sa) #ifdef WITH_DTLS + cw_dbg (DBG_DTLS,"Establishing DTLS session with %s",sock_addr2str(sa)); + +/* #ifdef WITH_CW_LOG_DEBUG { char str[100]; @@ -96,7 +99,7 @@ int join(struct sockaddr *sa) cw_log_debug0("Establishing DTLS connection to %s",str); } #endif - +*/ if (conf_dtls_psk){ conn->dtls_psk=conf_dtls_psk; conn->dtls_psk_len=strlen(conn->dtls_psk); @@ -125,6 +128,9 @@ int join(struct sockaddr *sa) } #endif + cw_dbg (DBG_DTLS,"DTLS session established with %s, cipher=%s",sock_addr2str(sa),dtls_get_cipher(conn)); +exit(0); + #ifdef WITH_CW_LOG_DEBUG { diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index 25d57e3f..82b1128b 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -19,6 +19,7 @@ + struct wtpinfo wtpinfo; //int conf_rids[2]; @@ -100,17 +101,16 @@ int wtp_main(const char *ad) wtpconf_init(); - cw_log_debug_level=6; //conf_debug_level; +// cw_log_debug_level=6; //conf_debug_level; conf_dtls_psk="Tube"; - conf_dtls_psk=0; +// conf_dtls_psk=0; +// conf_sslkeyfilename="../../ssl/wtp.key"; +// conf_sslcertfilename="../../ssl/wtp.crt"; +// conf_sslkeypass="7u83"; - conf_sslkeyfilename="../../ssl/wtp.key"; - conf_sslcertfilename="../../ssl/wtp.crt"; - conf_sslkeypass="7u83"; - - + cw_dbg_opt_type = DBG_DTLS; #ifdef WITH_DTLS dtls_init();