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); } }
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; }