|
|
|
@ -35,7 +35,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* macro to convert our client ip to a string */
|
|
|
|
|
#define CLIENT_IP (sock_addrtostr((struct sockaddr*)&wtpman->conn->addr, (char[64]){0},64))
|
|
|
|
|
//#define CLIENT_IP (sock_addrtostr((struct sockaddr*)&wtpman->conn->addr, (char[64]){0},64))
|
|
|
|
|
|
|
|
|
|
#define CLIENT_IP (sock_addr2str(&wtpman->conn->addr))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
int conn_handle_echo_request(void * d)
|
|
|
|
@ -216,7 +219,7 @@ int wtpman_handle_request(void *p)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void send_image_file(struct conn * conn,const char * filename)
|
|
|
|
|
void usend_image_file(struct conn * conn,const char * filename)
|
|
|
|
|
{
|
|
|
|
|
FILE * infile;
|
|
|
|
|
infile = fopen(filename,"rb");
|
|
|
|
@ -234,7 +237,7 @@ void send_image_file(struct conn * conn,const char * filename)
|
|
|
|
|
|
|
|
|
|
struct cwrmsg * cwrmsg;
|
|
|
|
|
uint8_t buffer[1024];
|
|
|
|
|
struct image_data data;
|
|
|
|
|
struct cwimage_data data;
|
|
|
|
|
data.data = buffer;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -441,7 +444,7 @@ static void wtpman_run_run(void *arg)
|
|
|
|
|
cwmsg_addelem(&conn->req_msg,CWMSGELEM_WTP_NAME,(uint8_t*)"Tube7u83",strlen("Tube7u83")+1);
|
|
|
|
|
cwmsg_addelem(&conn->req_msg,CWMSGELEM_LOCATION_DATA,(uint8_t*)"Berlin",strlen("Berlin")+1);
|
|
|
|
|
|
|
|
|
|
cwmsg_addelem_vendor_specific_payload(&conn->req_msg,CW_VENDOR_ID_CISCO,CWVENDOR_CISCO_RAD_NAME,(uint8_t*)"NudelSuppe",strlen("NudelSuppe"));
|
|
|
|
|
// cwmsg_addelem_vendor_specific_payload(&conn->req_msg,CW_VENDOR_ID_CISCO,CWVENDOR_CISCO_RAD_NAME,(uint8_t*)"Schlumpf",strlen("Schlumpf"));
|
|
|
|
|
|
|
|
|
|
cwrmsg = conn_send_request(conn);
|
|
|
|
|
|
|
|
|
@ -580,6 +583,42 @@ printf("Slept befor join resp\n");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int wtpman_send_image_file(struct wtpman * wtpman,struct cwrmsg * cwrmsg)
|
|
|
|
|
{
|
|
|
|
|
struct cwimage_data data;
|
|
|
|
|
memset(&data,0,sizeof(struct cwimage_data));
|
|
|
|
|
uint8_t id [1025];
|
|
|
|
|
data.identifier=id;
|
|
|
|
|
char filename[2048];
|
|
|
|
|
id[0]=0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cw_read_image_data_request(&data,cwrmsg->msgelems,cwrmsg->msgelems_len);
|
|
|
|
|
if (!strlen(id)){
|
|
|
|
|
cw_dbg(DBG_CW_MSG_ERR, "No image identifier in image data request");
|
|
|
|
|
cw_send_image_data_response(wtpman->conn,cwrmsg->seqnum,CW_RESULT_FAILURE);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sprintf(filename,"%s/%s",conf_image_dir,id);
|
|
|
|
|
|
|
|
|
|
FILE *infile;
|
|
|
|
|
infile = fopen(filename, "rb");
|
|
|
|
|
if (infile) {
|
|
|
|
|
cw_send_image_data_response(wtpman->conn,cwrmsg->seqnum,CW_RESULT_SUCCESS);
|
|
|
|
|
cw_log(LOG_INFO, "Sending image file %s to %s", filename, sock_addr2str(&wtpman->conn->addr));
|
|
|
|
|
cw_send_image_file(wtpman->conn, infile);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cw_log(LOG_ERR, "Can't open image file %s:%s", filename, strerror(errno));
|
|
|
|
|
cw_send_image_data_response(wtpman->conn,cwrmsg->seqnum,CW_RESULT_FAILURE);
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void wtpman_run(void *arg)
|
|
|
|
|
{
|
|
|
|
|
struct wtpman * wtpman = (struct wtpman *)arg;
|
|
|
|
@ -613,17 +652,36 @@ static void wtpman_run(void *arg)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* here the WTP has joined, now image update or change state event */
|
|
|
|
|
/* here the WTP has joined, now we assume an image data request
|
|
|
|
|
or an configuration status request. Nothing else. i
|
|
|
|
|
State is Image update
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
int cfg_status_msgs[] = { CWMSG_IMAGE_DATA_REQUEST, CWMSG_CONFIGURATION_STATUS_REQUEST, -1 };
|
|
|
|
|
cwrmsg = conn_wait_for_request(wtpman->conn, cfg_status_msgs, timer);
|
|
|
|
|
|
|
|
|
|
if (!cwrmsg){
|
|
|
|
|
cw_dbg(DBG_CW_MSG_ERR,"No conf status or img data request from %s after %d seconds, WTP died.",
|
|
|
|
|
sock_addr2str(&wtpman->conn->addr),wtpman->conn->wait_join);
|
|
|
|
|
wtpman_remove(wtpman);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Image data request, the WTP wants an update */
|
|
|
|
|
if (cwrmsg->type==CWMSG_IMAGE_DATA_REQUEST){
|
|
|
|
|
int rc = wtpman_send_image_file(wtpman,cwrmsg);
|
|
|
|
|
if (rc ){
|
|
|
|
|
wtpman_remove(wtpman);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} while (cwrmsg->type != CWMSG_CONFIGURATION_STATUS_REQUEST);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int cfg_status_msgs[] = { CWMSG_IMAGE_DATA_REQUEST, CWMSG_CONFIGURATION_STATUS_REQUEST, -1 };
|
|
|
|
|
cwrmsg = conn_wait_for_request(wtpman->conn, cfg_status_msgs, timer);
|
|
|
|
|
|
|
|
|
|
if (!cwrmsg){
|
|
|
|
|
cw_dbg(DBG_CW_MSG_ERR,"No config uration status request from %s after %d seconds, WTP died.",
|
|
|
|
|
sock_addr2str(&wtpman->conn->addr),wtpman->conn->wait_join);
|
|
|
|
|
wtpman_remove(wtpman);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
printf("Have Masseg %d\n",cwrmsg->type);
|
|
|
|
|
cwread_configuration_status_request(&wtpman->wtpinfo,cwrmsg->msgelems, cwrmsg->msgelems_len);
|
|
|
|
|
int result_code=0;
|
|
|
|
@ -655,12 +713,12 @@ printf("Done\n");
|
|
|
|
|
break;
|
|
|
|
|
case CWMSG_IMAGE_DATA_REQUEST:
|
|
|
|
|
printf("Image update\n!");
|
|
|
|
|
cwread_image_data_request(0,cwrmsg->msgelems,cwrmsg->msgelems_len);
|
|
|
|
|
//cwread_image_data_request(0,cwrmsg->msgelems,cwrmsg->msgelems_len);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cwsend_image_data_response(wtpman->conn,cwrmsg->seqnum,CW_RESULT_SUCCESS);
|
|
|
|
|
//cwsend_image_data_response(wtpman->conn,cwrmsg->seqnum,CW_RESULT_SUCCESS);
|
|
|
|
|
|
|
|
|
|
send_image_file(wtpman->conn,"/tftpboot/c1130-k9w7-tar.default");
|
|
|
|
|
//send_image_file(wtpman->conn,"/tftpboot/c1130-k9w7-tar.default");
|
|
|
|
|
|
|
|
|
|
// send_image_file(wtpman->conn,"/home/tube/Downloads/c1130-k9w7-tar.123-8.JEA3.tar");
|
|
|
|
|
// send_image_file(wtpman->conn,"/home/tube/Downloads/c1130-k9w8-tar.124-25e.JAP.tar");
|
|
|
|
|