Example #1
0
int ac_global_init()
{
//	mod_set_actions_registered_cb(setup_actions);



    ac_config = mbag_create();
    mbag_set_str(ac_config, CW_ITEM_AC_NAME, conf_acname);
    mbag_set_ptr(ac_config, CW_ITEM_AC_STATUS, &ac_status);

    ac_status.stations = 0;
    ac_status.limit = 1000;
    ac_status.active_wtps = 10;
    ac_status.max_wtps = 200;
    ac_status.security = CW_FLAG_AC_SECURITY_X | CW_FLAG_AC_SECURITY_S;
    ac_status.rmac_field = CW_FLAG_RMAC_SUPPORTED;
    ac_status.dtls_policy = CW_FLAG_DTLS_POLICY_C; // | CW_FLAG_DTLS_POLICY_D;


    mbag_set_bstrv(ac_config, CW_ITEM_AC_HARDWARE_VERSION, 0,
                   bstr_data(conf_hardware_version), bstr_len(conf_hardware_version));
    mbag_set_bstrv(ac_config, CW_ITEM_AC_SOFTWARE_VERSION, 0,
                   bstr_data(conf_software_version), bstr_len(conf_software_version));


    mbag_set_str(ac_config,CW_ITEM_AC_IMAGE_DIR,conf_image_dir);

//	mbag_set_avltree(ac_config, CW_ITEM_AC_IP_LIST, aciplist);


    mbag_set_fun(ac_config, CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST, get_iplist,release_iplist,(void*)771);

    return 1;
}
int cw_in_check_img_data_req_wtp(struct conn *conn, struct cw_action_in *a, uint8_t * data,
			 int len,struct sockaddr *from)
{

	mbag_set_dword(conn->outgoing,CW_ITEM_RESULT_CODE,0);	
		conn->capwap_state=CW_STATE_IMAGE_DATA;
//usleep(100000);
	return 0;

	return CW_RESULT_IMAGE_DATA_ERROR;
	return 0;


	/* Check for mandatory elements */
	cw_action_in_t * mlist[60];
	int n = cw_check_missing_mand(mlist,conn,a);
	if (n) {
		cw_dbg_missing_mand(DBG_ELEM,conn,mlist,n,a);
		conn->capwap_state=CW_STATE_JOIN;
		return CW_RESULT_MISSING_MAND_ELEM;
	}

	
	struct mbag_item *i = mbag_get(conn->incomming,CW_ITEM_IMAGE_IDENTIFIER);
	if (i) {
		uint32_t vendor_id = vendorstr_get_vendor_id(i->data);

		const char * image_dir;
		image_dir = mbag_get_str(conn->local,CW_ITEM_AC_IMAGE_DIR,"./img");

		char * image_filename = malloc(6+vendorstr_len(i->data)+1+strlen(image_dir));
		if (!image_filename) 
			return CW_RESULT_IMAGE_DATA_ERROR;

		sprintf(image_filename,"%s%04X/%s",image_dir,vendor_id,vendorstr_data(i->data));


		FILE *infile = fopen(image_filename,"rb");
		if (!infile){
			cw_log(LOG_WARNING,"Can't open image file: %s - %s - requestet by WTP",
				image_filename,strerror(errno));
			free(image_filename);
			return CW_RESULT_IMAGE_DATA_ERROR;
		}

		mbag_set_str(conn->outgoing,CW_ITEM_IMAGE_FILENAME,image_filename);
		mbag_set_dword(conn->outgoing,CW_ITEM_RESULT_CODE,0);	
		conn->capwap_state=CW_STATE_IMAGE_DATA;
		return 0;
	}

	

	return CW_RESULT_IMAGE_DATA_ERROR;

}
Example #3
0
static int wtpman_join(void *arg, time_t timer)
{
	struct wtpman *wtpman = (struct wtpman *) arg;
	struct conn *conn = wtpman->conn;

	wtpman->conn->outgoing = mbag_create();
	wtpman->conn->incomming = mbag_create();
	conn->config = conn->incomming;
//      wtpman->conn->local = ac_config;

	mbag_set_str(conn->local, CW_ITEM_AC_NAME, conf_acname);



	wtpman->conn->capwap_state = CW_STATE_JOIN;
//	wtpman->conn->actions = &capwap_actions;

//      wtpman->conn->itemstore = mbag_create();


	cw_dbg(DBG_INFO, "Join State - %s", sock_addr2str(&conn->addr));

	int rc;
	while (!cw_timer_timeout(timer) && wtpman->conn->capwap_state == CW_STATE_JOIN) {
		rc = cw_read_messages(wtpman->conn);
		if (rc < 0) {
			break;
		}
	}

	if (rc != 0) {
		cw_log(LOG_ERR, "Error joining WTP %s", cw_strerror(rc));
		return 0;

	}


	if (wtpman->conn->capwap_state == CW_STATE_JOIN) {
		cw_dbg(DBG_MSG_ERR, "No join request from %s after %d seconds, WTP died.",
		       sock_addr2str(&wtpman->conn->addr), wtpman->conn->wait_dtls);

		return 0;
	}


	return 1;


}