Work in progress ...
FossilOrigin-Name: a76e8760f309d36aad22507f961ac5a03f46df9ee585c2f8601ee0a5a088738e
This commit is contained in:
@ -20,13 +20,15 @@ int conn_recv_packet(struct conn* conn,uint8_t *buf,int len)
|
||||
if (errno == EWOULDBLOCK)
|
||||
{
|
||||
printf("would block\n");
|
||||
|
||||
// continue;
|
||||
}
|
||||
if ( errno==EAGAIN )
|
||||
{
|
||||
printf("again\n");
|
||||
}
|
||||
perror("recv");
|
||||
|
||||
printf("Return n %d\n",n);
|
||||
return n;
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <string.h>
|
||||
#include "capwap.h"
|
||||
|
||||
|
||||
void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo)
|
||||
{
|
||||
uint8_t buffer[12+2048];
|
||||
@ -26,11 +27,14 @@ void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo)
|
||||
|
||||
*((uint32_t*)(acd))=htonl((acinfo->stations<<16) | (acinfo->limit));
|
||||
*((uint32_t*)(acd+4))=htonl((acinfo->active_wtps<<16) | acinfo->max_wtps);
|
||||
|
||||
//printf("(((((((((((((((((((((((((((((((((((((((((((((((((((((((( %d\n",acinfo->dtls_policy);
|
||||
*((uint32_t*)(acd+8))=htonl((acinfo->security<<24) | (acinfo->rmac<<16) | acinfo->dtls_policy );
|
||||
|
||||
|
||||
int len = 12;
|
||||
int sublen;
|
||||
//goto u;
|
||||
|
||||
sublen = 4;
|
||||
|
||||
@ -40,14 +44,14 @@ void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo)
|
||||
len+=4;
|
||||
*(acd+len)=5; len++;
|
||||
*(acd+len)=0; len++;
|
||||
*(acd+len)=72; len++;
|
||||
*(acd+len)=71; len++;
|
||||
*(acd+len)=19; len++;
|
||||
*(acd+len)=2; len++;
|
||||
*(acd+len)=5; len++;
|
||||
*(acd+len)=6; len++;
|
||||
*(acd+len)=7; len++;
|
||||
*(acd+len)=8; len++;
|
||||
|
||||
|
||||
/*
|
||||
*((uint32_t*)(acd+len))=htonl(CW_VENDOR_ID_CISCO);
|
||||
len+=4;
|
||||
*((uint32_t*)(acd+len))=htonl((1<<16)|sublen);
|
||||
@ -61,17 +65,18 @@ void cwmsg_addelem_ac_descriptor(struct cwmsg *msg,struct ac_info * acinfo)
|
||||
*(acd+len)=7; len++;
|
||||
*(acd+len)=8; len++;
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
goto b;
|
||||
//u:
|
||||
|
||||
/* software version subelement */
|
||||
|
||||
*((uint32_t*)(acd+len))=htonl(CW_VENDOR_ID_CISCO);
|
||||
len+=4;
|
||||
sublen=strlen((const char*)acinfo->software_version);
|
||||
*((uint32_t*)(acd+len))=htonl((1<<16)|sublen);
|
||||
*((uint32_t*)(acd+len))=htonl((5<<16)|sublen);
|
||||
len+=4;
|
||||
memcpy(acd+len,acinfo->software_version,sublen);
|
||||
len+=sublen;
|
||||
|
@ -21,7 +21,9 @@
|
||||
|
||||
void cwmsg_addelem_image_identifier(struct cwmsg *cwmsg,uint32_t vendor_id,uint8_t *img, int len)
|
||||
{
|
||||
uint32_t net_vendor_id = htonl(vendor_id);
|
||||
cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_IDENTIFIER,2,&net_vendor_id,sizeof(net_vendor_id),img,len);
|
||||
// uint32_t net_vendor_id = htonl(vendor_id);
|
||||
|
||||
cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_IDENTIFIER,1,img,len);
|
||||
// cwmsg_vaddelem(cwmsg,CWMSGELEM_IMAGE_IDENTIFIER,2,&net_vendor_id,sizeof(net_vendor_id),img,len);
|
||||
}
|
||||
|
||||
|
@ -22,10 +22,14 @@
|
||||
#include "conn.h"
|
||||
#include "cwmsg.h"
|
||||
|
||||
#include <stdio.h> //Tube
|
||||
|
||||
void cwmsg_addelem_mtu_discovery_padding(struct cwmsg * msg, struct conn* conn)
|
||||
{
|
||||
int len = conn->mtu - (msg->msgelems-msg->buffer+msg->pos)-4;
|
||||
|
||||
printf("MTU discovery len %d %d and pos %d:\n",conn->mtu,len,msg->pos);
|
||||
|
||||
if (len < 0 )
|
||||
return;
|
||||
|
||||
@ -33,5 +37,7 @@ void cwmsg_addelem_mtu_discovery_padding(struct cwmsg * msg, struct conn* conn)
|
||||
*((uint32_t*)(msg->msgelems+msg->pos))=htonl(val);
|
||||
memset(msg->msgelems+4+msg->pos,0xff,len);
|
||||
msg->pos+=4+len;
|
||||
|
||||
printf("Nenpos = %d\n",msg->pos);
|
||||
}
|
||||
|
||||
|
@ -3,35 +3,37 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "capwap.h"
|
||||
#include "bstr.h"
|
||||
|
||||
|
||||
void cwmsg_addelem_wtp_board_data(struct cwmsg * cwmsg, struct wtpinfo * wtpinfo)
|
||||
void cwmsg_addelem_wtp_board_data(struct cwmsg *cwmsg, struct wtpinfo *wtpinfo)
|
||||
{
|
||||
uint8_t msg[1030];
|
||||
*((uint32_t*)msg)=htonl(wtpinfo->vendor_id);
|
||||
*((uint32_t *) msg) = htonl(wtpinfo->vendor_id);
|
||||
|
||||
int l;
|
||||
int len=4;
|
||||
int len = 4;
|
||||
|
||||
if (wtpinfo->model_no){
|
||||
l=strlen((char*)wtpinfo->model_no);
|
||||
*((uint32_t*)(msg+len))=htonl(CWBOARDDATA_MODELNO<<16|l);
|
||||
memcpy(msg+len+4,wtpinfo->model_no,l);
|
||||
len+=l+4;
|
||||
if (wtpinfo->model_no) {
|
||||
l = bstr_len(wtpinfo->model_no);
|
||||
*((uint32_t *) (msg + len)) = htonl(CWBOARDDATA_MODELNO << 16 | l);
|
||||
memcpy(msg + len + 4, bstr_data(wtpinfo->model_no), l);
|
||||
len += l + 4;
|
||||
}
|
||||
|
||||
if (wtpinfo->serial_no){
|
||||
l=strlen((char*)wtpinfo->serial_no);
|
||||
*((uint32_t*)(msg+len))=htonl(CWBOARDDATA_SERIALNO<<16|l);
|
||||
memcpy(msg+len+4,wtpinfo->serial_no,l);
|
||||
len+=l+4;
|
||||
if (wtpinfo->serial_no) {
|
||||
l = strlen((char *) wtpinfo->serial_no);
|
||||
*((uint32_t *) (msg + len)) = htonl(CWBOARDDATA_SERIALNO << 16 | l);
|
||||
memcpy(msg + len + 4, wtpinfo->serial_no, l);
|
||||
len += l + 4;
|
||||
}
|
||||
|
||||
if (wtpinfo->macaddress){
|
||||
*((uint32_t*)(msg+len))=htonl(CWBOARDDATA_MACADDRESS<<16|wtpinfo->macaddress_len);
|
||||
memcpy(msg+len+4,wtpinfo->macaddress,wtpinfo->macaddress_len);
|
||||
len+=wtpinfo->macaddress_len+4;
|
||||
if (wtpinfo->macaddress) {
|
||||
*((uint32_t *) (msg + len)) =
|
||||
htonl(CWBOARDDATA_MACADDRESS << 16 | wtpinfo->macaddress_len);
|
||||
memcpy(msg + len + 4, wtpinfo->macaddress, wtpinfo->macaddress_len);
|
||||
len += wtpinfo->macaddress_len + 4;
|
||||
}
|
||||
|
||||
cwmsg_addelem(cwmsg,CWMSGELEM_WTP_BOARD_DATA,msg,len);
|
||||
cwmsg_addelem(cwmsg, CWMSGELEM_WTP_BOARD_DATA, msg, len);
|
||||
}
|
||||
|
@ -50,21 +50,22 @@ void cwmsg_addelem_wtp_descriptor(struct cwmsg * cwmsg, struct wtpinfo * wtpinfo
|
||||
hww[0]=0x1c;
|
||||
hww[1]=0;
|
||||
|
||||
/* hardware subelem*/
|
||||
// len+=wtpdesc_addsubelem(d+len,CWMSGSUBELEM_WTP_DESCRIPTOR_HARDWARE_VERSION,
|
||||
// wtpinfo->hardware_vendor_id,wtpinfo->hardware_version,2);
|
||||
len+=wtpdesc_addsubelem(d+len,CWMSGSUBELEM_WTP_DESCRIPTOR_HARDWARE_VERSION,
|
||||
wtpinfo->hardware_vendor_id,hww,2);
|
||||
|
||||
|
||||
/* software subelem*/
|
||||
len+=wtpdesc_addsubelem(d+len,CWMSGSUBELEM_WTP_DESCRIPTOR_SOFTWARE_VERSION,
|
||||
wtpinfo->software_vendor_id,wtpinfo->software_version,-1);
|
||||
|
||||
/* hardware subelem*/
|
||||
// len+=wtpdesc_addsubelem(d+len,CWMSGSUBELEM_WTP_DESCRIPTOR_HARDWARE_VERSION,
|
||||
// wtpinfo->hardware_vendor_id,wtpinfo->hardware_version,2);
|
||||
|
||||
/* len+=wtpdesc_addsubelem(d+len,CWMSGSUBELEM_WTP_DESCRIPTOR_HARDWARE_VERSION,
|
||||
wtpinfo->hardware_vendor_id,hww,2);
|
||||
*/
|
||||
|
||||
/* bootloader subelem*/
|
||||
len+=wtpdesc_addsubelem(d+len,CWMSGSUBELEM_WTP_DESCRIPTOR_BOOTLOADER_VERSION,
|
||||
/* len+=wtpdesc_addsubelem(d+len,CWMSGSUBELEM_WTP_DESCRIPTOR_BOOTLOADER_VERSION,
|
||||
wtpinfo->bootloader_vendor_id,wtpinfo->bootloader_version,-1);
|
||||
|
||||
|
||||
*/
|
||||
cwmsg_addelem(cwmsg,CWMSGELEM_WTP_DESCRIPTOR,d,len);
|
||||
}
|
||||
|
@ -43,6 +43,8 @@ int cw_readelem_image_identifier(uint8_t **dst, int type,uint8_t *msgelem, int l
|
||||
|
||||
static int imgdata_request(void * a,int type,uint8_t* msgelem,int len)
|
||||
{
|
||||
printf("HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH oioioioioi here\n");
|
||||
cw_dbg_msgelem(CWMSG_DISCOVERY_REQUEST, type, msgelem, len);
|
||||
|
||||
// struct ac_info * acinfo = (struct ac_info *)a;
|
||||
cw_dbg(DBG_ALL,"Reading image data req msgelem, type=%d - %s ,len=%d\n",type,cw_msgelemtostr(type),len);
|
||||
@ -66,7 +68,11 @@ static int imgdata_request(void * a,int type,uint8_t* msgelem,int len)
|
||||
|
||||
void cwread_image_data_request(struct ac_info * acinfo, uint8_t * msg, int len)
|
||||
{
|
||||
/* cw_log_debug1("Reading join response");*/
|
||||
printf("RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRrrr im data eqi\n");
|
||||
printf("RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRrrr im data eqi\n");
|
||||
printf("RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRrrr im data eqi\n");
|
||||
printf("RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRrrr im data eqi\n");
|
||||
printf("RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRrrr im data eqi\n");
|
||||
cw_foreach_msgelem(msg,len,imgdata_request,NULL);
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,7 @@ int cwsend_discovery_request(struct conn * conn,struct radioinfo * radioinfo,str
|
||||
cwmsg_init(&cwmsg,buffer,CWMSG_DISCOVERY_REQUEST,conn_get_next_seqnum(conn),NULL /*radioinfo*/);
|
||||
|
||||
cwmsg_addelem(&cwmsg,CWMSGELEM_DISCOVERY_TYPE,&wtpinfo->discovery_type,sizeof(uint8_t));
|
||||
// cwmsg_addelem_wtp_board_data(&cwmsg,wtpinfo);
|
||||
cwmsg_addelem_wtp_board_data(&cwmsg,wtpinfo);
|
||||
// cwmsg_addelem_wtp_descriptor(&cwmsg,wtpinfo);
|
||||
cwmsg_addelem(&cwmsg,CWMSGELEM_WTP_FRAME_TUNNEL_MODE,&wtpinfo->frame_tunnel_mode,sizeof(uint8_t));
|
||||
cwmsg_addelem(&cwmsg,CWMSGELEM_WTP_MAC_TYPE,&wtpinfo->mac_type,sizeof(uint8_t));
|
||||
|
@ -21,7 +21,7 @@ void cwsend_join_response(struct conn * conn,int seqnum, int rc, struct radioinf
|
||||
|
||||
|
||||
/* */
|
||||
cwmsg_addelem_image_identifier(cwmsg,CW_VENDOR_ID_CISCO,(uint8_t*)"tobias",strlen("tobias"));
|
||||
cwmsg_addelem_image_identifier(cwmsg,CW_VENDOR_ID_CISCO,(uint8_t*)"/tobias",strlen("/tobias"));
|
||||
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@ void cwsend_join_response(struct conn * conn,int seqnum, int rc, struct radioinf
|
||||
buffer[5]=5; /* s/w version */
|
||||
buffer[6]=0; /* s/w Release */
|
||||
buffer[7]=19; /* s/w Maint */
|
||||
buffer[8]=3; /* s/w Build */
|
||||
buffer[8]=2; /* s/w Build */
|
||||
|
||||
*((uint16_t*)(buffer+9))=htons(13); /* Active MS */
|
||||
*((uint16_t*)(buffer+9+2))=htons(23); /* Supported MS */
|
||||
|
@ -192,6 +192,7 @@ int dtls_openssl_set_certs(struct conn * conn, struct dtls_openssl_data *d)
|
||||
cw_dbg(DBG_DTLS,"DTLS - Using cert file %s",conn->dtls_cert_file);
|
||||
|
||||
/* rc = SSL_CTX_use_certificate_file(d->ctx,conn->dtls_cert_file,SSL_FILETYPE_PEM);*/
|
||||
|
||||
rc = SSL_CTX_use_certificate_chain_file(d->ctx,conn->dtls_cert_file);
|
||||
if (!rc){
|
||||
|
||||
@ -214,7 +215,7 @@ int generate_session_id(const SSL *ssl, unsigned char * id, unsigned int *id_len
|
||||
|
||||
|
||||
// printf ("MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMaking session id\n");
|
||||
const char * sessid = "123456789";
|
||||
const char * sessid = "9123456789";
|
||||
memcpy(id,sessid,strlen(sessid));
|
||||
*id_len=strlen(sessid);
|
||||
return 1;
|
||||
@ -224,6 +225,21 @@ int generate_session_id(const SSL *ssl, unsigned char * id, unsigned int *id_len
|
||||
|
||||
static int dtls_verify_peer_callback (int ok, X509_STORE_CTX *ctx)
|
||||
{
|
||||
printf ("Verify callback called with ok = %d\n",ok);
|
||||
|
||||
SSL *ssl;
|
||||
ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx());
|
||||
|
||||
char buf[1024];
|
||||
X509 *err_cert;
|
||||
|
||||
err_cert = X509_STORE_CTX_get_current_cert(ctx);
|
||||
X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256);
|
||||
|
||||
printf("Err cert: %s\n",buf);
|
||||
|
||||
return 1;
|
||||
exit(0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
int dtls_openssl_bio_write(BIO *b, const char *data, int len)
|
||||
{
|
||||
// printf("bio_write %p %d",data,len);
|
||||
printf("bio_write %p %d",data,len);
|
||||
|
||||
struct conn * conn = b->ptr;
|
||||
uint8_t buffer[2048];
|
||||
@ -14,7 +14,7 @@ int dtls_openssl_bio_write(BIO *b, const char *data, int len)
|
||||
memcpy(buffer+4,data,len);
|
||||
int rc = conn->send_packet(conn,buffer,len+4);
|
||||
|
||||
// printf("Bio wr rc = %d\n",rc);
|
||||
printf("Bio wr rc = %d\n",rc);
|
||||
|
||||
|
||||
if (rc<0)
|
||||
@ -134,7 +134,8 @@ long dtls_openssl_bio_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
|
||||
case BIO_CTRL_DGRAM_QUERY_MTU:
|
||||
{
|
||||
ret = 1500;
|
||||
ret = 1300;
|
||||
break;
|
||||
|
||||
/* sockopt_len = sizeof(sockopt_val);
|
||||
if ((ret = getsockopt(pData->sock, IPPROTO_IP, IP_MTU, (void *)&sockopt_val, &sockopt_len)) < 0 || sockopt_val < 0)
|
||||
|
@ -51,7 +51,7 @@ int dtls_openssl_connect(struct conn * conn)
|
||||
SSL_set_psk_client_callback( d->ssl, psk_client_cb);
|
||||
|
||||
|
||||
dtls_openssl_set_certs(conn,d);
|
||||
// dtls_openssl_set_certs(conn,d);
|
||||
|
||||
if (conn->dtls_cert_file && conn->dtls_key_file){
|
||||
}
|
||||
@ -60,9 +60,9 @@ int dtls_openssl_connect(struct conn * conn)
|
||||
int rc;
|
||||
// do{
|
||||
rc = SSL_connect(d->ssl);
|
||||
/*
|
||||
|
||||
|
||||
/* if (rc <= 0){
|
||||
if (rc <= 0){
|
||||
int e;
|
||||
e = SSL_get_error(d->ssl,rc);
|
||||
printf("Get Err %i\n",e);
|
||||
|
Reference in New Issue
Block a user