コード例 #1
0
ファイル: reg.c プロジェクト: exeasy/pma2
int agent_register(u32 agent_id, const char *seq)
{

	//pack the login xml
	xmlDocPtr doc = create_xml_doc();
	xmlNodePtr devnode;
	xmlNodePtr childnode;

	xmlNodePtr rootnode = create_xml_root_node(doc,"AGENT_REGISTER");
	struct timeval now;
	gettimeofday(&now, NULL);
	char * time = PRINTTIME(now);
	add_xml_child(rootnode, "timestamp",time); free(time);

	devnode = add_xml_child(rootnode, "device", NULL);
	char aid[24];
	sprintf(aid,"%d", get_pma_id());
	add_xml_child_prop(devnode, "id",aid); 
	char dev_type[10];
	if( get_protocol_type() == OSPF_ROUTER )
		sprintf(dev_type, "ospf");
	else if( get_protocol_type() == BGP_ROUTER )
		sprintf(dev_type, "bgp");
	else {}
	add_xml_child(devnode, "type", dev_type);
	
	char* xmlbuff;
	int len = 0;
	xmlDocDumpFormatMemoryEnc( doc, &xmlbuff, &len, "UTF-8", 0);
	char* buff = (char*)malloc(len+1);
	memcpy(buff, xmlbuff, len);
	buff[len] = 0;
	xmlFree(xmlbuff);
	xmlFreeDoc(doc);

	struct req_args *login_args =
		(struct req_args *)malloc(sizeof(struct req_args)+len);

	memset(login_args->ip, 0, sizeof(login_args->ip));
	char *ip = get_server_address();
	memcpy(login_args->ip, ip, strlen(ip));
	login_args->port = get_server_port();
	login_args->ops_type = OPS_PMA_LOGIN;
	login_args->len = len;
	memcpy(login_args->data, buff, len);
	free(buff);
	if (login(login_args) == ((void *)-1)) {
		free(login_args);
		return -1;
	}
	free(login_args);
	agent_login_status = AGENT_LOGIN;
	return SUCCESS;
}
コード例 #2
0
/* Change name from requestSetupDefaultPDP to requestSetupDataCall */
void requestSetupDataCall(void * data, size_t datalen, RIL_Token t)
{
    /* In GSM with CDMA version: DOUNT - data[0] is radioType(GSM/UMTS or CDMA), data[1] is profile,
     * data[2] is apn, data[3] is username, data[4] is passwd, data[5] is authType (added by Android2.1)
     * data[6] is cid field added by mtk for Multiple PDP contexts setup support 2010-04
     */
    const char* profile = ((const char **)data)[1];
    const char* apn = ((const char **)data)[2];
    const char* username = ((const char **)data)[3];
    const char* passwd = ((const char **)data)[4];
    const int authType = getAuthType(((const char **)data)[5]);
    const int protocol = get_protocol_type(((const char **)data)[6]);
    const int interfaceId = atoi(((const char **)data)[7]) - 1;
    LOGD("requestSetupData profile=%s, apn=%s, username=%s, password=xxxx, authType=%d, protocol=%d, interfaceId=%d",
        profile, apn, username, authType, protocol, interfaceId);
 
    int requestParamNumber = (datalen/sizeof(char*));
    LOGD("requestSetupData with datalen=%d and parameter number=%d", datalen, requestParamNumber);
    if (requestParamNumber != 8) {
        /* Last parm is the authType instaed of cid */
        LOGD("requestSetupData with incorrect parameters");
        goto error;
    }

#if defined(PURE_AP_USE_EXTERNAL_MODEM) && !defined(MT6280_SUPER_DONGLE)
    if (strcmp(profile, "1002") == 0) {
        // Always request for CID 1 for default connection
        requestSetupDataCallOverIPv6(apn, username, passwd, authType, protocol, 0, 1, profile, t);
    } else {
        requestSetupDataCallOverIPv6(apn, username, passwd, authType, protocol, 1, 2, profile, t);
    }
#else
    //genenal project
    requestSetupDataCallOverIPv6(apn, username, passwd, authType, protocol, interfaceId, profile, t);
#endif
    

    return;
error:
    RIL_onRequestComplete(t, RIL_E_GENERIC_FAILURE, NULL, 0);
    
}
コード例 #3
0
ファイル: dst_entry.cpp プロジェクト: alantsev/libvma
void dst_entry::configure_ip_header(header *h, uint16_t packet_id)
{
	h->configure_ip_header(get_protocol_type(), m_bound_ip ? m_bound_ip : m_p_net_dev_val->get_local_addr(), m_dst_ip.get_in_addr(), m_ttl, m_tos, packet_id);
}
コード例 #4
0
bool C_ProtocolControl::fromXml (C_XmlData *P_data,
				 T_pConfigValueList P_config_value_list,
				 bool               P_display_protocol_stats) {
  
  bool                          L_ret       = true   ;
  T_pXmlData_List               L_subList            ;
  T_XmlData_List::iterator      L_subListIt          ;
  C_XmlData                    *L_data               ;
  char                         *L_protocol_name, 
                               *L_protocol_type      ;
  int                           L_protocol_id        ;
  T_ProtocolInstList            L_protocol_inst_list ;
  T_pProtocolInstanceInfo       L_protocol_info      ;
  T_ProtocolInstList::iterator  L_it                 ;

  

  GEN_DEBUG(1, "C_ProtocolControl::fromXml() start");
  if (P_data != NULL) {
    if ((L_subList = P_data->get_sub_data()) != NULL) {
      for (L_subListIt = L_subList->begin() ;
	   L_subListIt != L_subList->end() ;
	   L_subListIt++) {

	L_data = *L_subListIt ;

	if (L_data != NULL) {
	  if (strcmp(L_data->get_name(), XML_PROTOCOL_SECTION) == 0) {
	    // protocol section definition found
	    L_protocol_name = get_protocol_name (L_data) ;
	    // check protocol type for creation
	    L_protocol_type = get_protocol_type (L_data) ;
	    
	    // check name/type presence
	    if (L_protocol_name == NULL) {
	      GEN_ERROR(E_GEN_FATAL_ERROR, 
			"name mandatory for section " << XML_PROTOCOL_SECTION);
	      L_ret = false ;
	      break ;
	    }
	    if (L_protocol_type == NULL) {
	      GEN_ERROR(E_GEN_FATAL_ERROR, 
			"type mandatory for section " << XML_PROTOCOL_SECTION);
	      L_ret = false ;
	      break ;
	    }

	    // check protocol name unicity
	    if (m_name_map->find(T_ProtocolNameMap::key_type(L_protocol_name)) 
		!= m_name_map->end()) {
	      GEN_ERROR(E_GEN_FATAL_ERROR, 
		        XML_PROTOCOL_SECTION << " with name ["
			<< L_protocol_name << "] already defined");
	      L_ret = false ;
	      break ;
	    }

	    // check protocol type or sub type
	    if (strcmp(L_protocol_type, "binary") == 0) {
	      // create protocol instance
	      
	      C_ProtocolBinary    *L_protocol_instance = NULL ;
	      T_ConstructorResult  L_res ;

	      NEW_VAR(L_protocol_instance,
		      C_ProtocolBinary());
              
              L_protocol_instance->construction_data(L_data, &L_protocol_name, &L_res) ;

	      if (L_res != E_CONSTRUCTOR_OK) {
		GEN_ERROR(E_GEN_FATAL_ERROR,
			  "Error found in protocol definition");
		DELETE_VAR(L_protocol_instance);
		L_ret = false ;
		break ;
	      } else {
		// store new instance
		if (P_display_protocol_stats == true) {
		  C_ProtocolStats  *L_protocol_stats ;
		  NEW_VAR(L_protocol_stats,C_ProtocolStats(L_protocol_instance));
		  L_protocol_instance->set_stats(L_protocol_stats);
		}

		L_protocol_id = m_id_gen->new_id() ;
		ALLOC_VAR(L_protocol_info,
			  T_pProtocolInstanceInfo,
			  sizeof(T_ProtocolInstanceInfo));

		L_protocol_info->m_instance = L_protocol_instance ;
		L_protocol_info->m_id = L_protocol_id ;
		L_protocol_info->m_name = L_protocol_name ;
		L_protocol_inst_list.push_back(L_protocol_info);
		m_name_map
		  ->insert(T_ProtocolNameMap::value_type(L_protocol_name,
							 L_protocol_id)) ;
	      }
	    } else if (strcmp(L_protocol_type, "binary-tlv") == 0) {
	      // create protocol instance
	      C_ProtocolTlv    *L_protocol_instance = NULL ;
	      T_ConstructorResult  L_res ;

	      NEW_VAR(L_protocol_instance,
		      C_ProtocolTlv());
              
              L_protocol_instance->construction_data(L_data, &L_protocol_name, &L_res) ;
              
	      if (L_res != E_CONSTRUCTOR_OK) {
		GEN_ERROR(E_GEN_FATAL_ERROR,
			  "Error found in protocol definition");
		DELETE_VAR(L_protocol_instance);
		L_ret = false ;
		break ;
	      } else {
		// store new instance
		if (P_display_protocol_stats == true) {
		  C_ProtocolStats  *L_protocol_stats ;
		  NEW_VAR(L_protocol_stats,C_ProtocolStats(L_protocol_instance));
		  L_protocol_instance->set_stats(L_protocol_stats);
		}
                
		L_protocol_id = m_id_gen->new_id() ;
		ALLOC_VAR(L_protocol_info,
			  T_pProtocolInstanceInfo,
			  sizeof(T_ProtocolInstanceInfo));
                
		L_protocol_info->m_instance = L_protocol_instance ;
		L_protocol_info->m_id = L_protocol_id ;
		L_protocol_info->m_name = L_protocol_name ;
		L_protocol_inst_list.push_back(L_protocol_info);
		m_name_map
		  ->insert(T_ProtocolNameMap::value_type(L_protocol_name,
							 L_protocol_id)) ;
	      }
	    } else if (strcmp(L_protocol_type, "binary-body-not-interpreted") == 0) {
	      // create protocol instance
	      C_ProtocolBinaryBodyNotInterpreted    *L_protocol_instance = NULL ;

	      T_ConstructorResult  L_res ;


	      NEW_VAR(L_protocol_instance,
		      C_ProtocolBinaryBodyNotInterpreted());
              
              L_protocol_instance->construction_data(L_data, &L_protocol_name, &L_res) ;
              
	      if (L_res != E_CONSTRUCTOR_OK) {
		GEN_ERROR(E_GEN_FATAL_ERROR,
			  "Error found in protocol definition");
		DELETE_VAR(L_protocol_instance);
		L_ret = false ;
		break ;
	      } else {
		// store new instance
		if (P_display_protocol_stats == true) {
		  C_ProtocolStats  *L_protocol_stats ;
		  NEW_VAR(L_protocol_stats,C_ProtocolStats(L_protocol_instance));
		  L_protocol_instance->set_stats(L_protocol_stats);
		}
                
		L_protocol_id = m_id_gen->new_id() ;
		ALLOC_VAR(L_protocol_info,
			  T_pProtocolInstanceInfo,
			  sizeof(T_ProtocolInstanceInfo));
                
		L_protocol_info->m_instance = L_protocol_instance ;
		L_protocol_info->m_id = L_protocol_id ;
		L_protocol_info->m_name = L_protocol_name ;
		L_protocol_inst_list.push_back(L_protocol_info);
		m_name_map
		  ->insert(T_ProtocolNameMap::value_type(L_protocol_name,
							 L_protocol_id)) ;
	      }

	    } else if (strcmp(L_protocol_type, "binary-separator") == 0) {

	      // create protocol instance
	      C_ProtocolBinarySeparator    *L_protocol_instance = NULL ;

	      T_ConstructorResult  L_res ;


	      NEW_VAR(L_protocol_instance,
		      C_ProtocolBinarySeparator());
              
              L_protocol_instance
		->construction_data(L_data, &L_protocol_name, &L_res) ;
              
	      if (L_res != E_CONSTRUCTOR_OK) {
		GEN_ERROR(E_GEN_FATAL_ERROR,
			  "Error found in protocol definition");
		DELETE_VAR(L_protocol_instance);
		L_ret = false ;
		break ;
	      } else {
		// store new instance
		if (P_display_protocol_stats == true) {
		  C_ProtocolStats  *L_protocol_stats ;
		  NEW_VAR(L_protocol_stats,C_ProtocolStats(L_protocol_instance));
		  L_protocol_instance->set_stats(L_protocol_stats);
		}
                
		L_protocol_id = m_id_gen->new_id() ;
		ALLOC_VAR(L_protocol_info,
			  T_pProtocolInstanceInfo,
			  sizeof(T_ProtocolInstanceInfo));
                
		L_protocol_info->m_instance = L_protocol_instance ;
		L_protocol_info->m_id = L_protocol_id ;
		L_protocol_info->m_name = L_protocol_name ;
		L_protocol_inst_list.push_back(L_protocol_info);
		m_name_map
		  ->insert(T_ProtocolNameMap::value_type(L_protocol_name,
							 L_protocol_id)) ;
	      }
	    } else if (strcmp(L_protocol_type, "external-library") == 0) {
              
	      C_ProtocolExternal    *L_protocol_instance = NULL ;
	      T_ConstructorResult    L_res = E_CONSTRUCTOR_OK ;
	      NEW_VAR(L_protocol_instance,
		      C_ProtocolExternal(m_transport_control, 
					 L_data, &L_protocol_name, 
					 P_config_value_list,
					 &L_res));

	      if (L_res != E_CONSTRUCTOR_OK) {
		GEN_ERROR(E_GEN_FATAL_ERROR,
			  "Error found in protocol definition");
		DELETE_VAR(L_protocol_instance);
		L_ret = false ;
		break ;
	      } else {

		if (P_display_protocol_stats == true) {
		  C_ProtocolStats  *L_protocol_stats ;
		  NEW_VAR(L_protocol_stats,C_ProtocolStats(L_protocol_instance));
		  L_protocol_instance->set_stats(L_protocol_stats);
		}

		// store new instance
		L_protocol_id = m_id_gen->new_id() ;
		ALLOC_VAR(L_protocol_info,
			  T_pProtocolInstanceInfo,
			  sizeof(T_ProtocolInstanceInfo));

		L_protocol_info->m_instance = L_protocol_instance ;
		L_protocol_info->m_id = L_protocol_id ;
		L_protocol_info->m_name = L_protocol_name ;
		L_protocol_inst_list.push_back(L_protocol_info);
		m_name_map
		  ->insert(T_ProtocolNameMap::value_type(L_protocol_name,
							 L_protocol_id)) ;
	      }
	    }  else if (strcmp(L_protocol_type, "text") == 0) {
              
	      C_ProtocolText    *L_protocol_instance = NULL ;
	      T_ConstructorResult    L_res = E_CONSTRUCTOR_OK ;

	      NEW_VAR(L_protocol_instance,
		      C_ProtocolText());
              
              L_protocol_instance->analyze_data(L_data, 
                                                &L_protocol_name, 
                                                P_config_value_list,
                                                &L_res);

            if (L_res != E_CONSTRUCTOR_OK) {
		GEN_ERROR(E_GEN_FATAL_ERROR,
			  "Error found in protocol definition");
		DELETE_VAR(L_protocol_instance);
		L_ret = false ;
		break ;
	      } else {

		if (P_display_protocol_stats == true) {
		  C_ProtocolStats  *L_protocol_stats ;
		  NEW_VAR(L_protocol_stats,C_ProtocolStats(L_protocol_instance));
		  L_protocol_instance->set_stats(L_protocol_stats);
		}

		// store new instance
		L_protocol_id = m_id_gen->new_id() ;
		ALLOC_VAR(L_protocol_info,
			  T_pProtocolInstanceInfo,
			  sizeof(T_ProtocolInstanceInfo));

		L_protocol_info->m_instance = L_protocol_instance ;
		L_protocol_info->m_id = L_protocol_id ;
		L_protocol_info->m_name = L_protocol_name ;
		L_protocol_inst_list.push_back(L_protocol_info);
		m_name_map
		  ->insert(T_ProtocolNameMap::value_type(L_protocol_name,
							 L_protocol_id)) ;
	      }
	    } else {
	      GEN_ERROR(E_GEN_FATAL_ERROR,
		        XML_PROTOCOL_SECTION 
			<< " [" 
			<< L_protocol_name
			<< "] with type ["
			<< L_protocol_type << "] unsupported");
	      L_ret = false ;
	    }
	  }
	}
      }
      if (L_ret != false) {
	if (!L_protocol_inst_list.empty()) {
	  m_protocol_table_size = L_protocol_inst_list.size() ;
	  ALLOC_TABLE(m_protocol_table,
		      T_pC_ProtocolFrame*,
		      sizeof(T_pC_ProtocolFrame),
		      m_protocol_table_size) ;
	  ALLOC_TABLE(m_protocol_name_table,
		      char**,
		      sizeof(char*),
		      m_protocol_table_size) ;
	  for (L_it  = L_protocol_inst_list.begin();
	       L_it != L_protocol_inst_list.end()  ;
	       L_it++) {
	    L_protocol_info = *L_it ;
	    m_protocol_table[L_protocol_info->m_id] 
	      = L_protocol_info->m_instance ;
	    m_protocol_name_table[L_protocol_info->m_id]
	      = L_protocol_info->m_name ;
	  }
	} else {
	  GEN_ERROR(E_GEN_FATAL_ERROR,
		    "No protocol definition found"); 
	  L_ret = false ;
	}
      } // if L_ret != false 
      
      if (!L_protocol_inst_list.empty()) {
	  for (L_it  = L_protocol_inst_list.begin();
	       L_it != L_protocol_inst_list.end()  ;
	       L_it++) {
	    FREE_VAR(*L_it);
	  }
	  L_protocol_inst_list.erase(L_protocol_inst_list.begin(),
				     L_protocol_inst_list.end());
      }
    } 
コード例 #5
0
ファイル: reg.c プロジェクト: exeasy/pma2
int agent_init_request(char* routerid)
{
	//pack the login xml
	xmlDocPtr doc = create_xml_doc();
	xmlNodePtr devnode;
	xmlNodePtr childnode;

	xmlNodePtr rootnode = create_xml_root_node(doc,"AGENT_INIT");
	struct timeval now;
	gettimeofday(&now, NULL);
	char * time = PRINTTIME(now);
	add_xml_child(rootnode, "timestamp",time); free(time);

	devnode = add_xml_child(rootnode, "device", NULL);
	char aid[24];
	sprintf(aid,"%d", get_pma_id());
	add_xml_child_prop(devnode, "id",aid); 
	char dev_type[10];
	if( get_protocol_type() == OSPF_ROUTER )
	{
		sprintf(dev_type, "ospf");
		add_xml_child(devnode, "type", dev_type);
	}
	else if( get_protocol_type() == BGP_ROUTER )
	{
		sprintf(dev_type, "bgp");
		add_xml_child(devnode, "type", dev_type);
	}
	else {}

	char asid[24];
	inet_ntop(AF_INET, &pma_conf.as_num , asid, 24);
	add_xml_child(devnode, "as_id", asid);
	add_xml_child(devnode, "router_id", routerid);
	char ctlip[24];
	inet_ntop(AF_INET, &pma_conf.ic_config.hello_ip, ctlip,24);
	add_xml_child(devnode, "agent_control_ip", ctlip);
	
	char* xmlbuff;
	int len = 0;
	xmlDocDumpFormatMemoryEnc( doc, &xmlbuff, &len, "UTF-8", 0);
	char* buff = (char*)malloc(len+1);
	memcpy(buff, xmlbuff, len);
	buff[len] = 0;
	xmlFree(xmlbuff);
	xmlFreeDoc(doc);

	len = strlen(buff);
	char rid[24];
	strcpy(rid,routerid);
	struct req_args *req_arg =
		(struct req_args *)malloc(sizeof(struct req_args));

	memset(req_arg->ip, 0, sizeof(req_arg->ip));
	char *ip = get_server_address();
	memcpy(req_arg->ip, ip, strlen(ip));
	req_arg->port = get_server_port();
	req_arg->ops_type = OPS_PMA_INIT_REQUEST;
	req_arg->len = 0;
	int ret = send_message_to_pms(req_arg->ip,
			req_arg->port,
			req_arg->ops_type,
			buff,
			len);
	free(req_arg);
	free(buff);
	return ret;
	 
}
コード例 #6
0
ファイル: dst_entry.cpp プロジェクト: widagdos/libvmaclone
void dst_entry::configure_ip_header(uint16_t packet_id)
{
	m_header.configure_ip_header(get_protocol_type(), m_p_net_dev_val->get_local_addr(), m_dst_ip.get_in_addr(), m_ttl, m_tos, packet_id);
}