| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -45,7 +45,7 @@
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				static void reset_echointerval_timer(struct wtpman *wtpman)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					char sock_buf[SOCK_ADDR_BUFSIZE];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*	char sock_buf[SOCK_ADDR_BUFSIZE];*/
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*	uint16_t ct = mbag_get_word(wtpman->conn->local, CW_ITEM_CAPWAP_TIMERS,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								    CW_MAX_DISCOVERY_INTERVAL << 8 |
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								    CAPWAP_ECHO_INTERVAL);
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -66,7 +66,6 @@ static int msg_start_handler(struct conn *conn, struct cw_action_in *a, uint8_t
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct wtpman *wtpman = conn->data;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					reset_echointerval_timer(wtpman);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					return 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -85,38 +84,23 @@ static void wtpman_remove(struct wtpman *wtpman)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				static void wtpman_run_discovery(void *arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct wtpman *wtpman = (struct wtpman *) arg;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					time_t timer = cw_timer_start(10);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					wtpman->conn->capwap_state = CAPWAP_STATE_DISCOVERY;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*//	wtpman->conn->actions = &capwap_actions;*/
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*	wtpman->conn->outgoing = mbag_create();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					wtpman->conn->incomming = mbag_create();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				*/	
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					wtpman->conn->remote_cfg = cw_ktv_create(); /*//mavl_cmp_kv,NULL,1312);*/
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					wtpman->conn->remote_cfg = cw_ktv_create(); 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					while (!cw_timer_timeout(timer)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					       && wtpman->conn->capwap_state == CAPWAP_STATE_DISCOVERY) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						cw_read_messages(wtpman->conn);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						int rc;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						rc = cw_read_messages(wtpman->conn);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (cw_result_is_ok(rc)){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							wtpman->conn->capwap_state=CAPWAP_STATE_JOIN;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				//	struct mbag_item *wn = mbag_get(wtpman->conn->incomming, CW_ITEM_WTP_NAME);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				//	if (wn) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				//              printf("WTP Name: %s\n", wn->data);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				//              exit(0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				//	}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				*/
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					wtpman_remove(wtpman);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -138,6 +122,7 @@ int xprocess_message(struct conn *conn, uint8_t * rawmsg, int rawlen,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				static int wtpman_establish_dtls(void *arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int dtls_ok;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					char sock_buf[SOCK_ADDR_BUFSIZE];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct wtpman *wtpman = (struct wtpman *) arg;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -145,7 +130,7 @@ static int wtpman_establish_dtls(void *arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					wtpman->conn->dtls_cipher = conf_sslcipher;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/* setup DTSL certificates */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int dtls_ok = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					dtls_ok = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (conf_sslkeyfilename && conf_sslcertfilename) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -186,6 +171,7 @@ static int wtpman_establish_dtls(void *arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				static int wtpman_join(void *arg, time_t timer)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int rc;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					char sock_buf[SOCK_ADDR_BUFSIZE];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct wtpman *wtpman = (struct wtpman *) arg;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct conn *conn = wtpman->conn;
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -210,7 +196,7 @@ static int wtpman_join(void *arg, time_t timer)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					cw_dbg(DBG_INFO, "Join State - %s", sock_addr2str(&conn->addr,sock_buf));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int rc;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					while (!cw_timer_timeout(timer) && wtpman->conn->capwap_state == CAPWAP_STATE_JOIN) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						rc = cw_read_messages(wtpman->conn);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (rc < 0) {
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -301,7 +287,7 @@ void wtpman_run_data(void *wtpman_arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct wtpman *wtpman = (struct wtpman *) wtpman_arg;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct conn *conn = wtpman->conn;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -312,10 +298,10 @@ void wtpman_run_data(void *wtpman_arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					cw_log(LOG_ERR, "I am the data thread**********************************************************************\n");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					while (1) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						sleep(5);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*//		conn->write_data(conn, data, 100);*/
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/ //		conn->write_data(conn, data, 100); /
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						cw_log(LOG_ERR, "O was the data thread***********************************************************\n");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				*/
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -324,33 +310,59 @@ void wtpman_run_data(void *wtpman_arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				static void wtpman_run(void *arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int rc ;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					time_t timer;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					char sock_buf[SOCK_ADDR_BUFSIZE];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct conn *conn;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct wtpman *wtpman = (struct wtpman *) arg;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					wtpman->conn->seqnum = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct conn *conn = wtpman->conn;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					conn = wtpman->conn;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/* We were invoked with an unencrypted packet, 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 * so assume, it is a discovery request */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (!wtpman->dtlsmode){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						wtpman_run_discovery(arg);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (conn->capwap_state==CAPWAP_STATE_DISCOVERY){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							wtpman_remove(wtpman);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/* reject connections to our multi- or broadcast sockets */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*	if (socklist[wtpman->socklistindex].type != SOCKLIST_UNICAST_SOCKET) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						cw_dbg(DBG_DTLS, "Dropping connection from %s to non-unicast socket.",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (socklist[wtpman->socklistindex].type != SOCKLIST_UNICAST_SOCKET) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						cw_dbg(DBG_DTLS,"Reject multi");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*		cw_dbg(DBG_DTLS, "Dropping connection from %s to non-unicast socket.",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						       CLIENT_IP);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				*/		wtpman_remove(wtpman);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				cw_dbg(DBG_INFO,"Wait for next packedt");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/* wait for next packet */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					rc = conn_q_wait_packet(conn,30);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (rc != 0){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				cw_dbg(DBG_INFO,"Wait for next packedt no next remove");		
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						wtpman_remove(wtpman);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				*/
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					time_t timer = cw_timer_start(wtpman->conn->wait_dtls);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					timer = cw_timer_start(wtpman->conn->wait_dtls);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				cw_dbg(DBG_INFO,"Establish DTSL Timer done");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/* establish dtls session */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*	if (!wtpman_establish_dtls(wtpman)) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (!wtpman_establish_dtls(wtpman)) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						wtpman_remove(wtpman);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				*/
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				cw_dbg(DBG_INFO,"Establish DTSL Timer xxx");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					/* dtls is established, goto join state */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (!wtpman_join(wtpman, timer)) {
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -378,7 +390,7 @@ static void wtpman_run(void *arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					   or an configuration status request. Nothing else. 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int rc = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					rc = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					while (!cw_timer_timeout(timer)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					       && wtpman->conn->capwap_state == CW_STATE_CONFIGURE) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						rc = cw_read_messages(wtpman->conn);
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -542,6 +554,7 @@ void wtpman_destroy(struct wtpman *wtpman)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int sockfd, replyfd;;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					char sock_buf[SOCK_ADDR_BUFSIZE];
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct wtpman *wtpman;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					wtpman = malloc(sizeof(struct wtpman));
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -550,7 +563,7 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					memset(wtpman, 0, sizeof(struct wtpman));
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int replyfd;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (socklist[socklistindex].type != SOCKLIST_UNICAST_SOCKET) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						int port = sock_getport(&socklist[socklistindex].addr);
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -566,7 +579,7 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						replyfd = socklist[socklistindex].sockfd;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					int sockfd = replyfd;	/*//socklist[socklistindex].reply_sockfd;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					sockfd = replyfd;	/*//socklist[socklistindex].reply_sockfd;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				*/
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					struct sockaddr dbgaddr;
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				@ -625,41 +638,14 @@ void wtpman_addpacket(struct wtpman *wtpman, uint8_t * packet, int len)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					conn_q_add_packet(wtpman->conn, packet, len);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void wtpman_start(struct wtpman *wtpman, int dtlsmode)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					cw_dbg(DBG_INFO, "Starting wtpman, DTLS mode = %d",dtlsmode);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					wtpman->dtlsmode=dtlsmode;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					pthread_create(&wtpman->thread, NULL, (void *) wtpman_run,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						       (void *) wtpman);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				/*	
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					if (dtlsmode) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						cw_dbg(DBG_INFO, "Starting wtpman in DTLS mode");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						pthread_create(&wtpman->thread, NULL, (void *) wtpman_run_dtls,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							       (void *) wtpman);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					} else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						cw_dbg(DBG_INFO, "Starting wtpman in non-dtls mode");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if (nodtls) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							wtpman->conn->process_message = xprocess_message;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							pthread_create(&wtpman->thread, NULL, (void *) wtpman_run,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
								       (void *) wtpman);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						pthread_create(&wtpman->thread, NULL, (void *) wtpman_run_discovery,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							       (void *) wtpman);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 */
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				 }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					
					| 
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |