void CopyTo(AAAAvpContainerList &cl)
  {
    DiameterAvpContainerManager cm;
    AAAAvpContainer *c;
    if (TunnelType.IsSet())
      {
	c = cm.acquire("Tunnel-Type");
	TunnelType.CopyTo(*c, AAA_AVP_ENUM_TYPE);
	cl.add(c);
      }
    if (TunnelMediumType.IsSet())
      {
	c = cm.acquire("Tunnel-Medium-Type");
	TunnelMediumType.CopyTo(*c, AAA_AVP_ENUM_TYPE);
	cl.add(c);
      }
    if (TunnelClientEndpoint.IsSet())
      {
	c = cm.acquire("Tunnel-Client-Endpoint");
	TunnelClientEndpoint.CopyTo(*c, AAA_AVP_UTF8_STRING_TYPE);
	cl.add(c);
      }
    if (TunnelServerEndpoint.IsSet())
      {
	c = cm.acquire("Tunnel-Server-Endpoint");
	TunnelServerEndpoint.CopyTo(*c, AAA_AVP_UTF8_STRING_TYPE);
	cl.add(c);
      }
    if (TunnelPreference.IsSet())
      {
	c = cm.acquire("Tunnel-Preference");
	TunnelPreference.CopyTo(*c, AAA_AVP_UINTEGER32_TYPE);
	cl.add(c);
      }
    if (TunnelClientAuthId.IsSet())
      {
	c = cm.acquire("Tunnel-Client-Auth-Id");
	TunnelClientAuthId.CopyTo(*c, AAA_AVP_UINTEGER32_TYPE);
	cl.add(c);
      }
    if (TunnelServerAuthId.IsSet())
      {
	c = cm.acquire("Tunnel-Server-Auth-Id");
	TunnelServerAuthId.CopyTo(*c, AAA_AVP_UINTEGER32_TYPE);
	cl.add(c);
      }
    if (TunnelPassword.IsSet())
      {
	c = cm.acquire("Tunnel-Password");
	TunnelPassword.CopyTo(*c, AAA_AVP_STRING_TYPE);
	cl.add(c);
      }
    if (TunnelPrivateGroupId.IsSet())
      {
	c = cm.acquire("Tunnel-Private-Group-Id");
	TunnelPrivateGroupId.CopyTo(*c, AAA_AVP_UTF8_STRING_TYPE);
	cl.add(c);
      }
  }
  void CopyTo(AAAAvpContainerList &cl)
  {
    DiameterAvpContainerManager cm;
    AAAAvpContainer *c;
    if (ProxyHost.IsSet())
      {
	c = cm.acquire("Proxy-Host");
	ProxyHost.CopyTo(*c, AAA_AVP_DIAMID_TYPE);
	cl.add(c);
      }
    if (ProxyState.IsSet())
      {
	c = cm.acquire("Proxy-State");
	ProxyState.CopyTo(*c, AAA_AVP_STRING_TYPE);
	cl.add(c);
      }
    if (Avp.IsSet())
      {
	c = cm.acquire("AVP");
	Avp.CopyTo(*c, AAA_AVP_CUSTOM_TYPE);
	cl.add(c);
      }
  }
Example #3
0
int SetAvpValue(AAAAvpContainerList *acl1, char *avp_name1, T &data, AAA_AVPDataType t)
{
  AAAAvpContainerManager cm;
  AAAAvpContainerEntryManager em;
  AAAAvpContainerEntry *e;
  int quit_flag = 0, ret = 0, pos, start_pos, flag, set_flag ; 
  std::string avpName, avp_name = std::string(avp_name1);
  int pos1, pos2, pos3;
  AAAAvpContainerList *acl = acl1;
  AAAAvpContainerList *tp_list = NULL;
  AAAAvpContainer* c;
  for( pos = 0, start_pos = 0, flag = 0, set_flag = 0; !quit_flag ;  ) 
  {
   	pos1 = avp_name.find(".", start_pos);
    if( pos1 != std::string::npos ) 
    {
    	avpName =  avp_name.substr(start_pos, pos1-start_pos); 
    	pos2 = avpName.find("[", 0);
    	if( pos2 != std::string::npos)
    	{
    		pos3 = avpName.find("]", pos2);
    		if( pos3 != std::string::npos)
    			pos = atoi(avpName.substr(pos2+1, pos3-pos2-1).c_str());
    		avpName.erase(pos2, 10);
    	}
    	start_pos = pos1+1;
    }
    else 
    {
		  pos2 = avp_name.find("[", start_pos);
		  if( pos2 != std::string::npos ) 
		  {
			  pos3 = avp_name.find("]", pos2);
			  if( pos3 != std::string::npos)
				  pos = atoi(avp_name.substr(pos2+1, pos3-pos2-1).c_str());
    	  avpName = avp_name.substr(start_pos, pos2-start_pos);;
		  }
		  else 
    	{
    	  avpName = avp_name.substr(start_pos, 500);
    	}
    	quit_flag = 1 ;
    }	
//    printf("avpName:[%s]\n", avpName.c_str());
    if( !flag && (c = acl->search(avpName.c_str()) ) )
    {
//    	printf("1.avpName:[%s]\n", avpName.c_str());
      if( c->size() > pos ) 
      {
    	  if( ((*c)[pos]->dataType()) == AAA_AVP_GROUPED_TYPE ) 
    	  {
    		  acl = ((*c)[pos])->dataPtr(Type2Type<AAAAvpContainerList>());
    		  pos = 0;
    		  set_flag = 1 ;
//    			printf("2.avpName:[%s],set_flag=1\n", avpName.c_str());
    	  }
    	  else 
    	  {
//    			printf("3.avpName:[%s],set_value\n", avpName.c_str());
    		  GET_DATA_REF(T, tmp, (*c)[pos]);
    		  pos = 0;
    		  tmp = data;
    		  return 1;
    	  }
      }
      else 
      {
//    		printf("avpName=%s,pos[%d] is large size, [%d]\n", avpName.c_str(), pos, c->size());
        if( !quit_flag ) 
    	  {
//    		printf("11.avpName:[%s],set_flag\n", avpName.c_str());
    		  e = em.acquire(AAA_AVP_GROUPED_TYPE);
    		  acl = e->dataPtr(Type2Type<diameter_grouped_t>());
    	    c->add(e);
    	  }
    	  else 
    	  {
    		  e = em.acquire(t);
    		  GET_DATA_REF(T, tp, e);
      	  c->add(e);
     	    tp = data;
    		  ret = 1;
    	  }
    	  flag = 1 ;
      }
    }
    else 
    {
//    	printf("2.avpName:[%s]\n", avpName.c_str());
      c = cm.acquire(avpName.c_str());
      if( !quit_flag ) 
      {
//    		printf("5.avpName:[%s],set_flag\n", avpName.c_str());
    	  e = em.acquire(AAA_AVP_GROUPED_TYPE);
    	  tp_list = e->dataPtr(Type2Type<diameter_grouped_t>());
    	  c->add(e);
     	}
      else 
      {
//    		printf("4.avpName:[%s],set_value\n", avpName.c_str());
//    		cout << "data:t" << t << ":" << data << endl;
    	  e = em.acquire(t);
    	  GET_DATA_REF(T, tp, e);
      	c->add(e);
     	  tp = data;
//    		cout << "data:" << data << ":" << tp << endl;
    	  ret = 1;
      }
      	      	
      if( acl ) 
      {
//        printf("2.acl add\n");
        acl->add(c);
    	}
      acl = tp_list;
    	flag = 1 ;
    }
    
  }	
  return ret;	   	
   
}