inline AAA_AVP *cdp_avp_new_Integer32(int avp_code,int avp_flags,int avp_vendorid,int32_t data) { char x[4]; str s={x,4}; set_4bytes(x,data); return cdp_avp_new(avp_code,avp_flags,avp_vendorid,s,AVP_DUPLICATE_DATA); }
inline AAA_AVP* cdp_avp_new_Address(int avp_code,int avp_flags,int avp_vendorid,ip_address data) { char x[18]; str s; s.s = x; s.len = 0; switch (data.ai_family){ case AF_INET: x[0]=0; x[1]=1; memcpy(x+2, (char*)(&data.ip.v4.s_addr), 4); s.len=6; break; case AF_INET6: x[0]=0; x[1]=2; s.len=18; memcpy(x+2,data.ip.v6.s6_addr,16); break; default: LOG(L_ERR,"Unimplemented for ai_family %d! (AVP Code %d Vendor-Id %d)\n",data.ai_family,avp_code,avp_vendorid); return 0; } return cdp_avp_new(avp_code,avp_flags,avp_vendorid,s,AVP_DUPLICATE_DATA); }
inline AAA_AVP* cdp_avp_new_Time(int avp_code,int avp_flags,int avp_vendorid,time_t data) { char x[4]; str s={x,4}; uint32_t ntime = htonl(data+EPOCH_UNIX_TO_EPOCH_NTP); memcpy(x,&ntime,sizeof(uint32_t)); return cdp_avp_new(avp_code,avp_flags,avp_vendorid,s,AVP_DUPLICATE_DATA); }
inline AAA_AVP *cdp_avp_new_Unsigned32(int avp_code,int avp_flags,int avp_vendorid,uint32_t data) { char x[4]; str s={x,4}; uint32_t ndata=htonl(data); memcpy(x,&ndata,sizeof(uint32_t)); //*((uint32_t*)x) = htonl(data); return cdp_avp_new(avp_code,avp_flags,avp_vendorid,s,AVP_DUPLICATE_DATA); }
inline AAA_AVP *cdp_avp_new_Unsigned64(int avp_code,int avp_flags,int avp_vendorid,uint64_t data) { char x[8]; str s={x,8}; int i; for(i=7;i>=0;i--){ x[i] = data%256; data /= 256; } return cdp_avp_new(avp_code,avp_flags,avp_vendorid,s,AVP_DUPLICATE_DATA); }
inline AAA_AVP *cdp_avp_new_Integer64(int avp_code,int avp_flags,int avp_vendorid,int64_t data) { char x[8]; str s={x,8}; int i; for(i=7;i>=0;i--){ x[i] = data%256; data /= 256; } //TODO - check if this is correct return cdp_avp_new(avp_code,avp_flags,avp_vendorid,s,AVP_DUPLICATE_DATA); }
/** * Creates a grouped AVP from a list * @param avp_code * @param avp_flags * @param avp_vendorid * @param list * @param list_do - if this is AVP_FREE_DATA then the list will aso be freed * @return */ inline AAA_AVP *cdp_avp_new_Grouped(int avp_code,int avp_flags,int avp_vendorid,AAA_AVP_LIST *list,AVPDataStatus list_do) { str grp; if (!list){ LOG(L_ERR,"The AAA_AVP_LIST was NULL!\n"); return 0; } grp = cdp->AAAGroupAVPS(*list); if (!grp.len){ LOG(L_ERR,"The AAA_AVP_LIST provided was empty! (AVP Code %d VendorId %d)\n",avp_code,avp_vendorid); return 0; } if (list_do==AVP_FREE_DATA) cdp->AAAFreeAVPList(list); return cdp_avp_new(avp_code,avp_flags,avp_vendorid,grp,AVP_FREE_DATA); }
/** * Adds a new AVP to a list * @param list * @param d * @param len * @param avp_code * @param avp_flags * @param avp_vendorid * @param data_do * @return */ inline int cdp_avp_add_new_to_list(AAA_AVP_LIST *list,int avp_code,int avp_flags,int avp_vendorid,str data,AVPDataStatus data_do) { AAA_AVP *avp = cdp_avp_new(avp_code,avp_flags,avp_vendorid,data,data_do); if (!list) { LOG(L_ERR,"Failed adding to NULL list AVP with Code [%d] Flags [%d] VendorID [%d] from data of length [%d]!\n", avp_code,avp_flags,avp_vendorid,data.len); if (avp) cdp->AAAFreeAVP(&avp); return 0; } if (!avp) { LOG(L_ERR,"Error creating AVP with Code [%d] Flags [%d] VendorID [%d] from data of length [%d]!\n", avp_code,avp_flags,avp_vendorid,data.len); return 0; } cdp->AAAAddAVPToList(list,avp); return 1; }
inline AAA_AVP *cdp_avp_new_OctetString(int avp_code,int avp_flags,int avp_vendorid,str data,AVPDataStatus data_do) { return cdp_avp_new(avp_code,avp_flags,avp_vendorid,data,data_do); }
inline AAA_AVP* cdp_avp_new_QoSFilterRule(int avp_code,int avp_flags,int avp_vendorid,str data,AVPDataStatus data_do) { return cdp_avp_new(avp_code,avp_flags,avp_vendorid,data,data_do); }
inline AAA_AVP* cdp_avp_new_DiameterURI(int avp_code,int avp_flags,int avp_vendorid,str data,AVPDataStatus data_do) { return cdp_avp_new(avp_code,avp_flags,avp_vendorid,data,data_do); }