EpcTools
An event based multi-threaded C++ development framework.
epcdns.h
Go to the documentation of this file.
1 /*
2 * Copyright (c) 2017 Sprint
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 
17 #ifndef __EPCDNS_H
18 #define __EPCDNS_H
19 
22 
23 #include <stdio.h>
24 
25 #include <algorithm>
26 #include <string>
27 #include <sstream>
28 #include <list>
29 #include <vector>
30 
31 #include "estring.h"
32 #include "dnscache.h"
33 
35 /*
36  MCC digit 1 - low order nibble octet 1
37  MCC digit 2 - high order nibble octet 1
38  MCC digit 3 - low order nibble octet 2
39 
40  MCC = [MCC digit 1][MCC digit 2][MCC digit 3]
41 
42 
43  MNC digit 1 - low order nibble octet 3
44  MNC digit 2 - high order nibble octet 3
45  MNC digit 3 - high order nibble octet 2, nibble set to 1111 if MNC len is 2
46 
47  MNC = [MNC digit 1][MNC digit 2][MNC digit 3]
48 */
49 
50 #ifndef LOW_NIBBLE
51 #define LOW_NIBBLE(a) (((unsigned char)a) & 0x0f)
52 #endif
53 #ifndef HIGH_NIBBLE
54 #define HIGH_NIBBLE(a) ((((unsigned char)a) & 0xf0) >> 4)
55 #endif
56 
57 #define PARSE_MNC(a,b) { \
58  if ( HIGH_NIBBLE(b[1]) == 0x0f ) { \
59  a[0] = '0'; \
60  a[1] = LOW_NIBBLE(b[2]) + '0'; \
61  a[2] = HIGH_NIBBLE(b[2]) + '0'; \
62  a[3] = '\0'; \
63  } else { \
64  a[0] = LOW_NIBBLE(b[2]) + '0'; \
65  a[1] = HIGH_NIBBLE(b[2]) + '0'; \
66  a[2] = HIGH_NIBBLE(b[1]) + '0'; \
67  a[3] = '\0'; \
68  } \
69 }
70 
71 #define PARSE_MCC(a,b) { \
72  a[0] = LOW_NIBBLE(b[0]) + '0'; \
73  a[1] = HIGH_NIBBLE(b[0]) + '0'; \
74  a[2] = LOW_NIBBLE(b[1]) + '0'; \
75  a[3] = '\0'; \
76 }
77 
78 #define PARSE_PLMNID(a) \
79  char mnc[4], mcc[4]; \
80  PARSE_MNC(mnc,a); \
81  PARSE_MCC(mcc,a);
82 
83 #define PARSE_PLMNID_MCC(a) \
84  char mcc[4]; \
85  PARSE_MCC(mcc,a);
86 
87 #define APPEND_MNC(a) append("mnc").append(a).append(".")
88 #define APPEND_MCC(a) append("mcc").append(a).append(".")
89 #define APPEND_3GPPNETWORK append("3gppnetwork.org")
90 
94 
96 namespace EPCDNS
97 {
98  /*
99  * Service and Protocol service names for 3GPP
100  * TS 23.003 V15.5.0, Table 19.4.3.1
101  */
104  {
125  };
126 
129  {
188  };
189 
192  {
217  };
218 
221  {
242  };
243 
246  {
251  };
252 
255  {
270  };
271 
274  {
293  };
294 
297  {
300  };
301 
304  {
311  };
312 
315  {
318  };
319 
322  {
325  /*
326  +------------------+----------------------------+
327  | Tag | Diameter Application |
328  +------------------+----------------------------+
329  | aaa+ap1 | NASREQ [RFC3588] |
330  | aaa+ap2 | Mobile IPv4 [RFC4004] |
331  | aaa+ap3 | Base Accounting [RFC3588] |
332  | aaa+ap4 | Credit Control [RFC4006] |
333  | aaa+ap5 | EAP [RFC4072] |
334  | aaa+ap6 | SIP [RFC4740] |
335  | aaa+ap7 | Mobile IPv6 IKE [RFC5778] |
336  | aaa+ap8 | Mobile IPv6 Auth [RFC5778] |
337  | aaa+ap9 | QoS [RFC5866] |
338  | aaa+ap4294967295 | Relay [RFC3588] |
339  +------------------+----------------------------+
340  */
361  /*
362  +----------------+----------------------+
363  | Tag | Diameter Application |
364  +----------------+----------------------+
365  | aaa+ap16777250 | 3GPP STa [TS29.273] |
366  | aaa+ap16777251 | 3GPP S6a [TS29.272] |
367  | aaa+ap16777264 | 3GPP SWm [TS29.273] |
368  | aaa+ap16777267 | 3GPP S9 [TS29.215] |
369  | aaa+ap16777238 | 3GPP Gx [TS29.212] |
370  +----------------+----------------------+
371  */
382  /*
383  +----------------+--------------------------------------------------+
384  | Tag | Diameter Application |
385  +----------------+--------------------------------------------------+
386  | aaa+ap16777281 | WiMAX Network Access Authentication and |
387  | | Authorization Diameter Application (WNAAADA) |
388  | | [WiMAX-BASE] |
389  | aaa+ap16777282 | WiMAX Network Accounting Diameter Application |
390  | | (WNADA) [WiMAX-BASE] |
391  | aaa+ap16777283 | WiMAX MIP4 Diameter Application (WM4DA) |
392  | | [WiMAX-BASE] |
393  | aaa+ap16777284 | WiMAX MIP6 Diameter Application (WM6DA) |
394  | | [WiMAX-BASE] |
395  | aaa+ap16777285 | WiMAX DHCP Diameter Application (WDDA) |
396  | | [WiMAX-BASE] |
397  | aaa+ap16777286 | WiMAX Location Authentication Authorization |
398  | | Diameter Application (WLAADA) [WiMAX-LBS] |
399  | aaa+ap16777287 | WiMAX Policy and Charging Control R3 Policies |
400  | | Diameter Application (WiMAX PCC-R3-P) |
401  | | [WiMAX-PCC] |
402  | aaa+ap16777288 | WiMAX Policy and Charging Control R3 Offline |
403  | | Charging Diameter Application (WiMAX PCC-R3-OFC) |
404  | | [WiMAX-PCC] |
405  | aaa+ap16777289 | WiMAX Policy and Charging Control R3 Offline |
406  | | Charging Prime Diameter Application (WiMAX |
407  | | PCC-R3-OFC-PRIME) [WiMAX-PCC] |
408  | aaa+ap16777290 | WiMAX Policy and Charging Control R3 Online |
409  | | Charging Diameter Application (WiMAX PCC-R3-OC) |
410  | | [WiMAX-PCC] |
411  +----------------+--------------------------------------------------+
412  */
433  };
434 
437  {
446  };
447 
450 
452  class Utility
453  {
454  public:
459  static EString home_network( const char *mnc, const char *mcc );
463  static EString home_network( const unsigned char *plmnid );
468  static EString home_network_gprs( const char *mnc, const char *mcc );
472  static EString home_network_gprs( const unsigned char *plmnid );
479  static EString tai_fqdn( const char *lb, const char *hb, const char *mnc, const char *mcc );
485  static EString tai_fqdn( const char *lb, const char *hb, const unsigned char *plmnid );
492  static EString mme_fqdn( const char *mmec, const char *mmegi, const char *mnc, const char *mcc );
498  static EString mme_fqdn( const char *mmec, const char *mmegi, const unsigned char *plmnid );
504  static EString mme_pool_fqdn( const char *mmegi, const char *mnc, const char *mcc );
509  static EString mme_pool_fqdn( const char *mmegi, const unsigned char *plmnid );
516  static EString rai_fqdn( const char *rac, const char *lac, const char *mnc, const char *mcc );
522  static EString rai_fqdn( const char *rac, const char *lac, const unsigned char *plmnid );
528  static EString rnc_fqdn( const char *rnc, const char *mnc, const char *mcc );
533  static EString rnc_fqdn( const char *rnc, const unsigned char *plmnid );
541  static EString sgsn_fqdn( const char *nri, const char *rac, const char *lac, const char *mnc, const char *mcc );
548  static EString sgsn_fqdn( const char *nri, const char *rac, const char *lac, const unsigned char *plmnid );
553  static EString epc_nodes_domain_fqdn( const char *mnc, const char *mcc );
557  static EString epc_nodes_domain_fqdn( const unsigned char *plmnid );
563  static EString epc_node_fqdn( const char *node, const char *mnc, const char *mcc );
568  static EString epc_node_fqdn( const char *node, const unsigned char *plmnid );
573  static EString nonemergency_epdg_oi_fqdn( const char *mnc, const char *mcc );
577  static EString nonemergency_epdg_oi_fqdn( const unsigned char *plmnid );
584  static EString nonemergency_epdg_tai_fqdn( const char *lb, const char *hb, const char *mnc, const char *mcc );
590  static EString nonemergency_epdg_tai_fqdn( const char *lb, const char *hb, const unsigned char *plmnid );
596  static EString nonemergency_epdg_lac_fqdn( const char *lac, const char *mnc, const char *mcc );
601  static EString nonemergency_epdg_lac_fqdn( const char *lac, const unsigned char *plmnid );
605  static EString nonemergency_epdg_visitedcountry_fqdn( const char *mcc );
609  static EString nonemergency_epdg_visitedcountry_fqdn( const unsigned char *plmnid );
614  static EString emergency_epdg_oi_fqdn( const char *mnc, const char *mcc );
618  static EString emergency_epdg_oi_fqdn( const unsigned char *plmnid );
625  static EString emergency_epdg_tai_fqdn( const char *lb, const char *hb, const char *mnc, const char *mcc );
631  static EString emergency_epdg_tai_fqdn( const char *lb, const char *hb, const unsigned char *plmnid );
637  static EString emergency_epdg_lac_fqdn( const char *lac, const char *mnc, const char *mcc );
642  static EString emergency_epdg_lac_fqdn( const char *lac, const unsigned char *plmnid );
646  static EString emergency_epdg_visitedcountry_fqdn( const char *mcc );
650  static EString emergency_epdg_visitedcountry_fqdn( const unsigned char *plmnid );
656  static EString global_enodeb_id_fqdn( const char *enb, const char *mnc, const char *mcc );
661  static EString global_enodeb_id_fqdn( const char *enb, const unsigned char *plmnid );
666  static EString local_homenetwork_fqdn( const char *lhn, const char *mcc );
671  static EString local_homenetwork_fqdn( const char *lhn, const unsigned char *plmnid );
676  static EString epc( const char *mnc, const char *mcc );
680  static EString epc( const unsigned char *plmnid );
686  static EString apn_fqdn( const char *apn, const char *mnc, const char *mcc );
691  static EString apn_fqdn( const char *apn, const unsigned char *plmnid );
697  static EString apn( const char *apn, const char *mnc, const char *mcc );
702  static EString apn( const char *apn, const unsigned char *plmnid );
703 
707  static AppServiceEnum getAppService( const std::string &s );
711  static AppProtocolEnum getAppProtocol( const std::string &p );
712 
716  static const char *getAppService( AppServiceEnum s );
720  static const char *getAppProtocol( AppProtocolEnum proto );
721 
754 
759  static EString diameter_fqdn( const char *mnc, const char *mcc );
763  static EString diameter_fqdn( const unsigned char *plmnid );
764 
768  static uint32_t getDiameterApplication( DiameterApplicationEnum app );
772  static const char *getDiameterProtocol( DiameterProtocolEnum protocol );
773 
779 
780  private:
781  Utility() {}
782  };
783 
786 
788  class CanonicalNodeName : public std::list<std::string>
789  {
790  public:
795  CanonicalNodeName( const std::string &n );
796 
799  Void setName( const std::string &n );
800 
803  Bool getTopon() { return m_topon; }
806  const EString getName() const { return m_name; }
807 
811  int topologicalCompare( const CanonicalNodeName &right );
812 
815  Void dump( const char *prefix )
816  {
817  std::cout << prefix << "Name - " << m_name << std::endl;
818  std::cout << prefix << "topon - " << (m_topon?"true":"false") << std::endl;
819 
820  std::cout << prefix << "Labels" << std::endl;
821  for ( CanonicalNodeName::const_iterator it = begin(); it != end(); ++it )
822  std::cout << prefix << " " << *it << std::endl;
823  }
824 
825  private:
826  Bool m_topon;
827  EString m_name;
828  };
829 
832 
834  typedef int UsageType;
836 
838  class UsageTypeList : public std::list<UsageType>
839  {
840  public:
843 
846  Void dump( const char *prefix )
847  {
848  for (UsageTypeList::const_iterator it = begin();
849  it != end();
850  ++it)
851  {
852  std::cout << prefix << *it << std::endl;
853  }
854  }
855  };
856 
859 
861  typedef std::string NetworkCapability;
863 
865  class NetworkCapabilityList: public std::list<NetworkCapability>
866  {
867  public:
868 
871  Void dump( const char *prefix )
872  {
873  for (NetworkCapabilityList::const_iterator it = begin();
874  it != end();
875  ++it)
876  {
877  std::cout << prefix << *it << std::endl;
878  }
879  }
880  };
881 
884 
886  class StringVector : public std::vector<std::string>
887  {
888  public:
891  Void dump( const char *prefix )
892  {
893  for (StringVector::const_iterator it = begin();
894  it != end();
895  ++it)
896  {
897  std::cout << prefix << *it << std::endl;
898  }
899  }
900 
902  Void shuffle()
903  {
904  std::random_shuffle ( begin(), end() );
905  }
906  };
907 
910 
913  {
914  public:
916  AppProtocol() { m_protocol = x_unknown; }
919 
922  const EString &getRawProtocol() { return m_rawProtocol; }
925  AppProtocolEnum getProtocol() { return m_protocol; }
928  UsageTypeList &getUsageTypes() { return m_usageTypes; }
931  NetworkCapabilityList &getNetworkCapabilities() { return m_networkCapabilities; }
932 
936  AppProtocolEnum setProtocol( AppProtocolEnum ape ) { return m_protocol = ape; }
940  UsageType addUsageType( UsageType ut ) { m_usageTypes.push_back( ut ); return ut; }
944  NetworkCapability &addNetworkCapability( NetworkCapability &nc ) { m_networkCapabilities.push_back(nc); return m_networkCapabilities.back(); }
945 
948  Void parse( const std::string &rp );
949 
953  Bool findUsageType( UsageType ut )
954  {
955  return std::find( m_usageTypes.begin(), m_usageTypes.end(), ut ) != m_usageTypes.end();
956  }
957 
961  Bool findNetworkCapability( const NetworkCapability &nc )
962  {
963  return std::find( m_networkCapabilities.begin(), m_networkCapabilities.end(), nc ) != m_networkCapabilities.end();
964  }
965 
968  Void dump( const char *prefix = "" )
969  {
970  std::cout << prefix << "Protocol [" << Utility::getAppProtocol( m_protocol );
971  if ( !m_rawProtocol.empty() )
972  std::cout << "/" << m_rawProtocol;
973  std::cout << "] - [";
974  Bool first = true;
975  for ( UsageTypeList::const_iterator it = m_usageTypes.begin(); it != m_usageTypes.end(); ++it )
976  {
977  std::cout << (first?"":",") << *it;
978  first = false;
979  }
980  std::cout << "] - [";
981  first = true;
982  for ( NetworkCapabilityList::const_iterator it = m_networkCapabilities.begin(); it != m_networkCapabilities.end(); ++it )
983  {
984  std::cout << (first?"":",") << *it;
985  first = false;
986  }
987  std::cout << "]" << std::endl;
988  }
989 
990  private:
991  EString m_rawProtocol;
992  AppProtocolEnum m_protocol;
993  UsageTypeList m_usageTypes;
994  NetworkCapabilityList m_networkCapabilities;
995  };
996 
999 
1001  class AppProtocolList : public std::list<AppProtocol*>
1002  {
1003  public:
1008  {
1009  while ( !empty() )
1010  {
1011  AppProtocol *ap = *begin();
1012  erase( begin() );
1013  delete ap;
1014  }
1015  }
1016 
1019  Void dump( const char *prefix )
1020  {
1021  for (AppProtocolList::const_iterator it = begin();
1022  it != end();
1023  ++it)
1024  {
1025  (*it)->dump( prefix );
1026  }
1027  }
1028  };
1029 
1032 
1035  {
1036  public:
1038  AppService() { m_service = x_3gpp_unknown; }
1041  AppService( const std::string &ds ) { parse( ds ); }
1044  {
1045  while ( !m_protocols.empty() )
1046  {
1047  AppProtocol *ap = *m_protocols.begin();
1048  m_protocols.pop_front();
1049  delete ap;
1050  }
1051  }
1052 
1055  AppServiceEnum getService() { return m_service; }
1058  AppProtocolList &getProtocols() { return m_protocols; }
1061  EString &getRawService() { return m_rawService; }
1062 
1065  Void parse( const std::string &ds );
1066 
1071  {
1072  for ( AppProtocolList::const_iterator it = m_protocols.begin(); it != m_protocols.end(); ++it )
1073  {
1074  if ( (*it)->getProtocol() == protocol )
1075  return *it;
1076  }
1077 
1078  return NULL;
1079  }
1080 
1082  Void dump()
1083  {
1084  std::cout << m_rawService << std::endl;
1085  std::cout << " Service [" << Utility::getAppService( m_service ) << "]" << std::endl;
1086  for ( AppProtocolList::const_iterator it = m_protocols.begin(); it != m_protocols.end(); ++it )
1087  {
1088  (*it)->dump( " " );
1089  }
1090  }
1091 
1092  private:
1093 
1094  AppServiceEnum m_service;
1095  AppProtocolList m_protocols;
1096  EString m_rawService;
1097  };
1098 
1101 
1104  {
1105  public:
1108  {
1109  m_order = 0;
1110  m_preference = 0;
1111  m_port = 0;
1112  }
1113 
1116  const EString &getHostname() { return m_hostname; }
1119  uint16_t getOrder() { return m_order; }
1122  uint16_t getPreference() { return m_preference; }
1125  uint16_t getPort() { return m_port; }
1128  AppProtocolList &getSupportedProtocols() { return m_supported_protocols; }
1131  StringVector &getIPv4Hosts() { return m_ipv4_hosts; }
1134  StringVector &getIPv6Hosts() { return m_ipv6_hosts; }
1135 
1139  uint16_t setOrder( uint16_t order ) { return m_order = order; }
1143  uint16_t setPreference( uint16_t preference ) { return m_preference = preference; }
1147  uint16_t setPort( uint16_t port ) { return m_port = port; }
1151  const EString &setHostname( const std::string &hostname ) { m_hostname = hostname; return m_hostname; }
1154  Void addSupportedProtocol( AppProtocol *ap ) { m_supported_protocols.push_back( ap ); }
1157  Void addIPv4Host( const std::string &host ) { m_ipv4_hosts.push_back( host ); }
1160  Void addIPv6Host( const std::string &host ) { m_ipv6_hosts.push_back( host ); }
1161 
1164  Void dump( const char *prefix )
1165  {
1166  std::cout << prefix << "HOSTNAME: " << m_hostname << std::endl;
1167  std::cout << prefix << " order - " << m_order << std::endl;
1168  std::cout << prefix << " preference - " << m_preference << std::endl;
1169  std::cout << prefix << " port - " << m_port << std::endl;
1170 
1171  EString pfx( prefix );
1172  std::cout << prefix << " supported protocols" << std::endl;
1173  pfx.append( " " );
1174  m_supported_protocols.dump( pfx.c_str() );
1175 
1176  std::cout << prefix << " IPv4 HOSTS" << std::endl;
1177  m_ipv4_hosts.dump( pfx.c_str() );
1178 
1179  std::cout << prefix << " IPv6 HOSTS" << std::endl;
1180  m_ipv6_hosts.dump( pfx.c_str() );
1181 
1182  //std::cout << prefix << " Canonical Name" << std::endl;
1183  //m_canonicalname.dump( pfx.c_str() );
1184  }
1185 
1186  private:
1187  EString m_hostname;
1188  uint16_t m_order;
1189  uint16_t m_preference;
1190  uint16_t m_port;
1191  AppProtocolList m_supported_protocols;
1192  StringVector m_ipv4_hosts;
1193  StringVector m_ipv6_hosts;
1194  };
1195 
1198 
1200  class NodeSelectorResultList : public std::list<NodeSelectorResult*>
1201  {
1202  public:
1207  {
1208  while ( !empty() )
1209  {
1210  NodeSelectorResult* nsr = *begin();
1211  erase( begin() );
1212  delete nsr;
1213  }
1214  }
1215 
1218  Void dump( const char *prefix )
1219  {
1220  for (NodeSelectorResultList::const_iterator it = begin();
1221  it != end();
1222  ++it)
1223  {
1224  (*it)->dump( prefix );
1225  }
1226  }
1227 
1232  static Bool sort_compare( NodeSelectorResult*& first, NodeSelectorResult*& second );
1233  };
1234 
1237 
1238  class NodeSelector;
1239  extern "C" typedef Void(*AsyncNodeSelectorCallback)(NodeSelector &ns, cpVoid data);
1240 
1243  {
1244  public:
1247  DNS::namedserverid_t getNamedServerID() { return m_nsid; }
1251  DNS::namedserverid_t setNamedServerID(DNS::namedserverid_t nsid) { return m_nsid = nsid; }
1252 
1255  AppServiceEnum getDesiredService() { return m_desiredService; }
1258  AppProtocolList &getDesiredProtocols() { return m_desiredProtocols; }
1261  const EString &getDomainName() { return m_domain; }
1264  NodeSelectorResultList &getResults() { return m_results; }
1265 
1269  UsageType addDesiredUsageType( UsageType ut ) { m_desiredUsageTypes.push_back( ut ); return ut; }
1273  NetworkCapability &addDesiredNetworkCapability( const char *nc ) { EString s(nc); m_desiredNetworkCapabilities.push_back( s ); return m_desiredNetworkCapabilities.back(); }
1277  NetworkCapability &addDesiredNetworkCapability( NetworkCapability &nc ) { m_desiredNetworkCapabilities.push_back( nc ); return nc; }
1278 
1281  NodeSelectorResultList &process();
1285  Void process(cpVoid data, AsyncNodeSelectorCallback cb);
1286 
1288  Void dump()
1289  {
1290  std::cout << "NodeSelector REQUEST" << std::endl;
1291  std::cout << " domain - " << m_domain << std::endl;
1292  std::cout << " desired service - " << Utility::getAppService( m_desiredService ) << std::endl;
1293  std::cout << " desired protocols" << std::endl;
1294  m_desiredProtocols.dump( " " );
1295  std::cout << " desired usage types" << std::endl;
1296  m_desiredUsageTypes.dump( " " );
1297  std::cout << " desired network capabilities" << std::endl;
1298  m_desiredNetworkCapabilities.dump( " " );
1299  std::cout << " results" << std::endl;
1300  m_results.dump( " " );
1301  }
1302 
1303  protected:
1305  NodeSelector();
1307  ~NodeSelector();
1308 
1312  AppServiceEnum setAppService( AppServiceEnum s ) { return m_desiredService = s; }
1316  const EString &setDomainName( const std::string &d ) { m_domain = d; return m_domain; }
1319  Void addDesiredProtocol( AppProtocol *ap ) { m_desiredProtocols.push_back( ap ); }
1320 
1321  private:
1322  AppServiceEnum parseService( const std::string &service, std::list<AppProtocolEnum> &protocols ) const;
1323  static Bool naptr_compare( DNS::RRecordNAPTR*& first, DNS::RRecordNAPTR*& second );
1324  NodeSelectorResultList &process(DNS::QueryPtr query, Bool cacheHit);
1325  static Void async_callback(DNS::QueryPtr q, Bool cacheHit, const void *data);
1326 
1327  DNS::namedserverid_t m_nsid;
1328  EString m_domain;
1329  AppServiceEnum m_desiredService;
1330  AppProtocolList m_desiredProtocols;
1331  UsageTypeList m_desiredUsageTypes;
1332  NetworkCapabilityList m_desiredNetworkCapabilities;
1333 
1334  NodeSelectorResultList m_results;
1335  DNS::QueryPtr m_query;
1336  AsyncNodeSelectorCallback m_asynccb;
1337  pVoid m_asyncdata;
1338  };
1339 
1342 
1345  {
1346  public:
1349  {
1351  ptUnknown = 0,
1353  ptColocated = 1,
1355  ptTopologicalDistance = 2,
1357  ptDNSPriority = 3
1358  };
1359 
1363  ColocatedCandidate( NodeSelectorResult &candidate1, NodeSelectorResult &candidate2 );
1364 
1367  NodeSelectorResult &getCandidate1() { return m_candidate1; }
1370  NodeSelectorResult &getCandidate2() { return m_candidate2; }
1379  PairType getPairType() { return m_pairtype; }
1382  int getTopologicalMatches() { return m_topologicalMatches; }
1383 
1386  Void dump( const char *prefix )
1387  {
1388  EString pfx( prefix );
1389  pfx.append( " " );
1390 
1391  std::cout << prefix << "canonical name 1 - " << m_cnn1.getName() << std::endl;
1392  m_candidate1.dump( pfx.c_str() );
1393  std::cout << prefix << "canonical name 2 - " << m_cnn2.getName() << std::endl;
1394  m_candidate2.dump( pfx .c_str());
1395  std::cout << prefix << "pair type - " << (
1396  m_pairtype == ptColocated ? "colocated" :
1397  m_pairtype == ptTopologicalDistance ? "topological distance" :
1398  m_pairtype == ptDNSPriority ? "DNS priority" : "unknown") << std::endl;
1399  std::cout << prefix << "topological matches - " << m_topologicalMatches << std::endl;
1400  }
1401 
1402  private:
1404 
1405  NodeSelectorResult &m_candidate1;
1406  NodeSelectorResult &m_candidate2;
1407  CanonicalNodeName m_cnn1;
1408  CanonicalNodeName m_cnn2;
1409  PairType m_pairtype;
1410  int m_topologicalMatches;
1411  };
1412 
1415 
1417  class ColocatedCandidateList : public std::list<ColocatedCandidate*>
1418  {
1419  public:
1426 
1429  Void dump( const char *prefix = "" )
1430  {
1431  EString pfx1( prefix );
1432  pfx1.append( " " );
1433  EString pfx2( pfx1 );
1434  pfx2.append(" ");
1435 
1436  int candidate = 1;
1437  std::cout << prefix << "candidate list" << std::endl;
1438  for ( ColocatedCandidateList::const_iterator it = begin(); it != end(); ++it )
1439  {
1440  std::cout << pfx1 << "candidate " << candidate++ << std::endl;
1441  (*it)->dump( pfx2.c_str() );
1442  }
1443  }
1444 
1445  private:
1447 
1448  static Bool sort_compare( ColocatedCandidate*& first, ColocatedCandidate*& second );
1449 
1450  NodeSelectorResultList &m_nodelist1;
1451  NodeSelectorResultList &m_nodelist2;
1452  };
1453 
1456 
1459  {
1460  public:
1461 
1467  MMENodeSelector( const char *mmec, const char *mmegi, const char *mnc, const char *mcc )
1468  {
1469  setAppService( x_3gpp_mme );
1470  setDomainName( Utility::mme_fqdn( mmec, mmegi, mnc, mcc ) );
1471  }
1472 
1477  MMENodeSelector( const char *mmec, const char *mmegi, const unsigned char *plmnid )
1478  {
1479  setAppService( x_3gpp_mme );
1480  setDomainName( Utility::mme_fqdn( mmec, mmegi, plmnid ) );
1481  }
1482 
1487  MMENodeSelector( const char *mmegi, const char *mnc, const char *mcc )
1488  {
1489  setAppService( x_3gpp_mme );
1490  setDomainName( Utility::mme_pool_fqdn( mmegi, mnc, mcc ) );
1491  }
1492 
1496  MMENodeSelector( const char *mmegi, const unsigned char *plmnid )
1497  {
1498  setAppService( x_3gpp_mme );
1499  setDomainName( Utility::mme_pool_fqdn( mmegi, plmnid ) );
1500  }
1501 
1506  {
1507  AppProtocol *ap = new AppProtocol();
1510  return ap;
1511  }
1512 
1513  private:
1514  MMENodeSelector() {}
1515  };
1516 
1519 
1522  {
1523  public:
1528  PGWNodeSelector( const char *apn, const char *mnc, const char *mcc )
1529  {
1530  setAppService( x_3gpp_pgw );
1531  setDomainName( Utility::apn_fqdn( apn, mnc, mcc ) );
1532  }
1533 
1537  PGWNodeSelector( const char *apn, const unsigned char *plmnid )
1538  {
1539  setAppService( x_3gpp_pgw );
1540  setDomainName( Utility::apn_fqdn( apn, plmnid ) );
1541  }
1542 
1547  {
1548  AppProtocol *ap = new AppProtocol();
1551  return ap;
1552  }
1553 
1554  private:
1555  PGWNodeSelector() {}
1556  };
1557 
1560 
1563  {
1564  public:
1569  PGWUPFNodeSelector( const char *apn, const char *mnc, const char *mcc )
1570  {
1571  setAppService( x_3gpp_upf );
1572  setDomainName( Utility::apn_fqdn( apn, mnc, mcc ) );
1573  }
1574 
1578  PGWUPFNodeSelector( const char *apn, const unsigned char *plmnid )
1579  {
1580  setAppService( x_3gpp_upf );
1581  setDomainName( Utility::apn_fqdn( apn, plmnid ) );
1582  }
1583 
1588  {
1589  AppProtocol *ap = new AppProtocol();
1592  return ap;
1593  }
1594 
1595  private:
1596  PGWUPFNodeSelector() {}
1597  };
1598 
1601 
1604  {
1605  public:
1611  SGWNodeSelector( const unsigned char lb, const unsigned char hb, const char *mnc, const char *mcc )
1612  {
1613  char lbbuf[3];
1614  char hbbuf[3];
1615 
1616  sprintf( lbbuf, "%02x", lb );
1617  sprintf( hbbuf, "%02x", hb );
1618 
1619  setAppService( x_3gpp_sgw );
1620  setDomainName( Utility::tai_fqdn( lbbuf, hbbuf, mnc, mcc ) );
1621  }
1622 
1627  SGWNodeSelector( unsigned char lb, unsigned char hb, const unsigned char *plmnid )
1628  {
1629  char lbbuf[3];
1630  char hbbuf[3];
1631 
1632  sprintf( lbbuf, "%02x", lb );
1633  sprintf( hbbuf, "%02x", hb );
1634 
1635  setAppService( x_3gpp_sgw );
1636  setDomainName( Utility::tai_fqdn( lbbuf, hbbuf, plmnid ) );
1637  }
1638 
1644  SGWNodeSelector( const char *lb, const char *hb, const char *mnc, const char *mcc )
1645  {
1646  setAppService( x_3gpp_sgw );
1647  setDomainName( Utility::tai_fqdn( lb, hb, mnc, mcc ) );
1648  }
1649 
1654  SGWNodeSelector( const char *lb, const char *hb, const unsigned char *plmnid )
1655  {
1656  setAppService( x_3gpp_sgw );
1657  setDomainName( Utility::tai_fqdn( lb, hb, plmnid ) );
1658  }
1659 
1664  SGWNodeSelector( const char *node, const char *mnc, const char *mcc )
1665  {
1666  setAppService( x_3gpp_sgw );
1667  setDomainName( Utility::epc_node_fqdn( node, mnc, mcc ) );
1668  }
1669 
1673  SGWNodeSelector( const char *node, const unsigned char *plmnid )
1674  {
1675  setAppService( x_3gpp_sgw );
1676  setDomainName( Utility::epc_node_fqdn( node, plmnid ) );
1677  }
1678 
1683  {
1684  AppProtocol *ap = new AppProtocol();
1687  return ap;
1688  }
1689 
1690  private:
1691  SGWNodeSelector() {}
1692  };
1693 
1696 
1699  {
1700  public:
1706  SGWUPFNodeSelector( const unsigned char lb, const unsigned char hb, const char *mnc, const char *mcc )
1707  {
1708  char lbbuf[3];
1709  char hbbuf[3];
1710 
1711  sprintf( lbbuf, "%02x", lb );
1712  sprintf( hbbuf, "%02x", hb );
1713 
1714  setAppService( x_3gpp_upf );
1715  setDomainName( Utility::tai_fqdn( lbbuf, hbbuf, mnc, mcc ) );
1716  }
1717 
1722  SGWUPFNodeSelector( unsigned char lb, unsigned char hb, const unsigned char *plmnid )
1723  {
1724  char lbbuf[3];
1725  char hbbuf[3];
1726 
1727  sprintf( lbbuf, "%02x", lb );
1728  sprintf( hbbuf, "%02x", hb );
1729 
1730  setAppService( x_3gpp_upf );
1731  setDomainName( Utility::tai_fqdn( lbbuf, hbbuf, plmnid ) );
1732  }
1733 
1739  SGWUPFNodeSelector( const char *lb, const char *hb, const char *mnc, const char *mcc )
1740  {
1741  setAppService( x_3gpp_upf );
1742  setDomainName( Utility::tai_fqdn( lb, hb, mnc, mcc ) );
1743  }
1744 
1749  SGWUPFNodeSelector( const char *lb, const char *hb, const unsigned char *plmnid )
1750  {
1751  setAppService( x_3gpp_upf );
1752  setDomainName( Utility::tai_fqdn( lb, hb, plmnid ) );
1753  }
1754 
1759  SGWUPFNodeSelector( const char *node, const char *mnc, const char *mcc )
1760  {
1761  setAppService( x_3gpp_upf );
1762  setDomainName( Utility::epc_node_fqdn( node, mnc, mcc ) );
1763  }
1764 
1768  SGWUPFNodeSelector( const char *node, const unsigned char *plmnid )
1769  {
1770  setAppService( x_3gpp_upf );
1771  setDomainName( Utility::epc_node_fqdn( node, plmnid ) );
1772  }
1773 
1778  {
1779  AppProtocol *ap = new AppProtocol();
1782  return ap;
1783  }
1784 
1785  private:
1786  SGWUPFNodeSelector() {}
1787  };
1788 
1791 
1794  {
1795  public:
1800  ENodeBUPFNodeSelector( const char *enb, const char *mnc, const char *mcc )
1801  {
1802  setAppService( x_3gpp_upf );
1803  setDomainName( Utility::global_enodeb_id_fqdn( enb, mnc, mcc ) );
1804  }
1805 
1809  ENodeBUPFNodeSelector( const char *enb, const unsigned char *plmnid )
1810  {
1811  setAppService( x_3gpp_upf );
1812  setDomainName( Utility::global_enodeb_id_fqdn( enb, plmnid ) );
1813  }
1814 
1819  {
1820  AppProtocol *ap = new AppProtocol();
1823  return ap;
1824  }
1825 
1826  private:
1828  };
1829 
1832 
1835  {
1836  public:
1842  EpcNodeSelector( const char *node, const char *mnc, const char *mcc, AppServiceEnum appsvc = x_3gpp_any )
1843  {
1844  NodeSelector::setAppService( appsvc );
1845  setDomainName( Utility::epc_node_fqdn( node, mnc, mcc ) );
1846  }
1847 
1852  EpcNodeSelector( const char *node, const unsigned char *plmnid, AppServiceEnum appsvc = x_3gpp_any )
1853  {
1854  NodeSelector::setAppService( appsvc );
1855  setDomainName( Utility::epc_node_fqdn( node, plmnid ) );
1856  }
1857 
1861  EpcNodeSelector( const char *fqdn, AppServiceEnum appsvc = x_3gpp_any )
1862  {
1863  NodeSelector::setAppService( appsvc );
1864  setDomainName( fqdn );
1865  }
1866 
1871  {
1872  AppProtocol *ap = new AppProtocol();
1875  return ap;
1876  }
1877 
1882  {
1884  return *this;
1885  }
1886 
1887  private:
1888  EpcNodeSelector() {}
1889  };
1890 
1893 
1896  {
1903  };
1904 
1907 
1910  {
1911  public:
1915  : m_type( drt )
1916  {
1917  }
1918 
1920  virtual ~DiameterNaptr()
1921  {
1922  }
1923 
1926  DiameterNaptrTypeEnum getType() { return m_type; }
1927 
1930  uint16_t getOrder() { return m_order; }
1934  uint16_t setOrder( uint16_t order ) { return m_order = order; }
1935 
1938  uint16_t getPreference() { return m_order; }
1942  uint16_t setPreference( uint16_t pref ) { return m_preference = pref; }
1943 
1946  const EString &getService() { return m_service; }
1950  const EString &setService( const char *service ) { return m_service = service; }
1954  const EString &setService( const std::string &service ) { return setService( service.c_str() ); }
1955 
1958  const EString &getReplacement() { return m_replacement; }
1962  const EString &setReplacement( const char *replacement ) { return m_replacement = replacement; }
1966  const EString &setReplacement( const std::string &replacement ) { return setReplacement( replacement.c_str() ); }
1967 
1970  Void dump( const char *prefix )
1971  {
1972  std::cout << prefix << "Flags: " << (
1973  m_type == dnt_hostname ? "hostname" :
1974  m_type == dnt_service ? "service" : "unknown") << std::endl;
1975  std::cout << prefix << "Order: " << m_order << std::endl;
1976  std::cout << prefix << "Preference: " << m_preference << std::endl;
1977  std::cout << prefix << "Service: " << m_service << std::endl;
1978  std::cout << prefix << "Replacement: " << m_replacement << std::endl;
1979  }
1980 
1981  private:
1982  DiameterNaptr();
1983 
1984  DiameterNaptrTypeEnum m_type;
1985  uint16_t m_order;
1986  uint16_t m_preference;
1987  EString m_service;
1988  EString m_replacement;
1989  };
1990 
1993 
1996  {
1997  public:
2002  DiameterHost( const char *name ) : m_name( name ) {}
2005  DiameterHost( const std::string &name ) : m_name( name ) {}
2006 
2009  const EString &getName() const { return m_name; }
2013  const EString &setName( const char *name ) { return m_name = name; }
2017  const EString &setName( const std::string &name ) { return setName( name.c_str() ); }
2018 
2021  StringVector &getIPv4Addresses() { return m_ipv4_addrs; }
2024  StringVector &getIPv6Addresses() { return m_ipv6_addrs; }
2025 
2028  Void addIPv4Address( const std::string &addr ) { m_ipv4_addrs.push_back( addr ); }
2031  Void addIPv6Address( const std::string &addr ) { m_ipv6_addrs.push_back( addr ); }
2032 
2035  Void dump( const char *prefix )
2036  {
2037  EString pfx( prefix );
2038  pfx.append( " " );
2039 
2040  std::cout << prefix << "Name: " << m_name << std::endl;
2041  std::cout << prefix << "IPv4 addresses" << std::endl;
2042  m_ipv4_addrs.dump( pfx.c_str() );
2043  std::cout << prefix << "IPv6 addresses" << std::endl;
2044  m_ipv6_addrs.dump( pfx.c_str() );
2045  }
2046 
2047  private:
2048  EString m_name;
2049  StringVector m_ipv4_addrs;
2050  StringVector m_ipv6_addrs;
2051  };
2052 
2055 
2058  {
2059  public:
2064 
2067  uint16_t getPriority() { return m_priority; }
2071  uint16_t setPriority( uint16_t priority ) { return m_priority = priority; }
2072 
2075  uint16_t getWeight() { return m_weight; }
2079  uint16_t setWeight( uint16_t weight ) { return m_weight = weight; }
2080 
2083  uint16_t getPort() { return m_port; }
2087  uint16_t setPort( uint16_t port ) { return m_port = port; }
2088 
2091  DiameterHost &getHost() { return m_host; }
2092 
2095  Void dump( const char *prefix )
2096  {
2097  EString pfx( prefix );
2098 
2099  std::cout << prefix << "Priority: " << m_priority << std::endl;
2100  std::cout << prefix << "Weight: " << m_weight << std::endl;
2101  std::cout << prefix << "Port: " << m_port << std::endl;
2102 
2103  std::cout << prefix << "Diameter Host" << std::endl;
2104  m_host.dump( pfx.c_str() );
2105  }
2106 
2107  private:
2108  uint16_t m_priority;
2109  uint16_t m_weight;
2110  uint16_t m_port;
2111  DiameterHost m_host;
2112  };
2113 
2116 
2118  class DiameterSrvVector : public std::vector<DiameterSrv*>
2119  {
2120  public:
2123  {
2124  while ( !empty() )
2125  {
2126  DiameterSrv *ds = *begin();
2127  erase( begin() );
2128  delete ds;
2129  }
2130  }
2131 
2134  Void dump( const char *prefix )
2135  {
2136  EString pfx( prefix );
2137  pfx.append( " " );
2138 
2139  int cnt = 0;
2140  for (DiameterSrvVector::const_iterator it = begin();
2141  it != end();
2142  ++it)
2143  {
2144  std::cout << prefix << "Diameter SRV " << ++cnt << std::endl;
2145  (*it)->dump( pfx.c_str() );
2146  }
2147  }
2148 
2150  Void sort_vector();
2151 
2152  private:
2153  static Bool sort_compare( DiameterSrv* first, DiameterSrv* second );
2154  };
2155 
2158 
2161  {
2162  public:
2165 
2168  DiameterHost &getHost() { return m_host; }
2169 
2172  Void dump( const char *prefix )
2173  {
2174  EString pfx( prefix );
2175  pfx.append( " " );
2176  DiameterNaptr::dump( prefix );
2177  std::cout << prefix << "Host Information" << std::endl;
2178  m_host.dump( pfx.c_str() );
2179  }
2180 
2181  private:
2182  DiameterHost m_host;
2183  };
2184 
2187 
2190  {
2191  public:
2194 
2197  DiameterSrvVector &getSrvs() { return m_srv; }
2198 
2201  Void dump( const char *prefix )
2202  {
2203  EString pfx( prefix );
2204  pfx.append( " " );
2205  DiameterNaptr::dump( prefix );
2206  std::cout << prefix << "Service Information" << std::endl;
2207  m_srv.dump( pfx.c_str() );
2208  }
2209 
2210  private:
2211  DiameterSrvVector m_srv;
2212  };
2213 
2216 
2218  class DiameterNaptrList : public std::list<DiameterNaptr*>
2219  {
2220  public:
2223  {
2224  while ( !empty() )
2225  {
2226  DiameterNaptr *n = *begin();
2227  erase( begin() );
2228  delete n;
2229  }
2230  }
2231 
2234  Void dump( const char *prefix = "" )
2235  {
2236  for (DiameterNaptrList::const_iterator it = begin();
2237  it != end();
2238  ++it)
2239  {
2240  if ( (*it)->getType() == dnt_hostname )
2241  ((DiameterNaptrA*)*it)->dump( prefix );
2242  if ( (*it)->getType() == dnt_service )
2243  ((DiameterNaptrS*)*it)->dump( prefix );
2244  }
2245  }
2246  };
2247 
2250 
2253  {
2254  public:
2256  DiameterSelector();
2257 
2260  const EString &getRealm() { return m_realm; }
2264  const EString &setRealm( const char *realm ) { return m_realm = realm; }
2269  const EString &setRealm( const char *mnc, const char *mcc ) { return m_realm = Utility::diameter_fqdn( mnc, mcc ); }
2273  const EString &setRealm( const unsigned char *plmnid ) { return m_realm = Utility::diameter_fqdn( plmnid ); }
2274 
2277  DiameterApplicationEnum getApplicataion() { return m_application; }
2281  DiameterApplicationEnum setApplication( DiameterApplicationEnum app ) { return m_application = app; }
2282 
2285  DiameterProtocolEnum getProtocol() { return m_protocol; }
2289  DiameterProtocolEnum setProtocol( DiameterProtocolEnum proto ) { return m_protocol = proto; }
2290 
2292  DiameterNaptrList &process();
2293 
2294  private:
2295  EString m_realm;
2296  DiameterApplicationEnum m_application;
2297  DiameterProtocolEnum m_protocol;
2298 
2299  DNS::QueryPtr m_query;
2300  DiameterNaptrList m_results;
2301  };
2302 
2303 } // namespace EPCDNS
2304 
2305 #endif // #ifndef __EPCDNS_H
uint16_t getOrder()
Retrieves the order value.
Definition: epcdns.h:1119
EpcNodeSelector & setAppService(AppServiceEnum s)
Assigns the required application service type.
Definition: epcdns.h:1881
x-16
Definition: epcdns.h:153
static EString local_homenetwork_fqdn(const char *lhn, const char *mcc)
Constructs the local home network identifier.
Definition: epcdns.cpp:426
static EString emergency_epdg_lac_fqdn(const char *lac, const char *mnc, const char *mcc)
Constructs the location area code based emergency ePDG FQDN.
Definition: epcdns.cpp:364
EpcNodeSelector(const char *node, const char *mnc, const char *mcc, AppServiceEnum appsvc=x_3gpp_any)
Class constructor.
Definition: epcdns.h:1842
SIP.
Definition: epcdns.h:352
DiameterHost(const char *name)
Class constructor.
Definition: epcdns.h:2002
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:1970
QoS.
Definition: epcdns.h:358
DiameterHost & getHost()
Retrieves the diameter host.
Definition: epcdns.h:2091
static EString mme_fqdn(const char *mmec, const char *mmegi, const char *mnc, const char *mcc)
Constructs the mobile management entity (MME) FQDN.
Definition: epcdns.cpp:83
x-s2a-pmip
Definition: epcdns.h:229
static EString getDiameterService(DiameterApplicationEnum app, DiameterProtocolEnum protocol)
Constructs the Diameter service string.
Definition: epcdns.cpp:702
static EString rai_fqdn(const char *rac, const char *lac, const char *mnc, const char *mcc)
Constructs the routing area identity (RAI) FQDN.
Definition: epcdns.cpp:127
uint16_t getPort()
Retrieves the IP port value.
Definition: epcdns.h:1125
SCTP.
Definition: epcdns.h:443
SGSN.
Definition: epcdns.h:116
x-sxc
Definition: epcdns.h:187
SGWAppProtocolEnum
the SGW related protocols.
Definition: epcdns.h:220
DiameterHost & getHost()
Retrieves the Diameter host.
Definition: epcdns.h:2168
Diameter name pointer (NAPTR) object.
Definition: epcdns.h:1909
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:2201
Encapsulates and extends a std::string object.
x-s2b-gtp
Definition: epcdns.h:204
PairType getPairType()
Retrieves the pair type.
Definition: epcdns.h:1379
Void shuffle()
Randomizes the list of strings.
Definition: epcdns.h:902
const EString & getRawProtocol()
Retrieves the raw protocol string.
Definition: epcdns.h:922
x-s4
Definition: epcdns.h:267
x-gn
Definition: epcdns.h:133
Credit Control.
Definition: epcdns.h:348
x-s2a-gtp
Definition: epcdns.h:155
x-s8-gtp
Definition: epcdns.h:177
static EString nonemergency_epdg_oi_fqdn(const char *mnc, const char *mcc)
Constructs the operator identifier (OI) based ePDG FQDN.
Definition: epcdns.cpp:235
NetworkCapabilityList & getNetworkCapabilities()
Retrieves the list of network capabilities.
Definition: epcdns.h:931
static EString home_network(const char *mnc, const char *mcc)
Constructs the home network domain name.
Definition: epcdns.cpp:24
uint16_t getOrder()
Retrieves the order value.
Definition: epcdns.h:1930
SGWNodeSelector(const char *node, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1664
MSC.
Definition: epcdns.h:120
A list of colocated candidates.
Definition: epcdns.h:1417
x-gp
Definition: epcdns.h:250
WiMAX Network Accounting Diameter Application (WNADA)
Definition: epcdns.h:416
NodeSelectorResult & getCandidate2()
Retrieves the second candidate node selector result object.
Definition: epcdns.h:1370
static uint32_t getDiameterApplication(DiameterApplicationEnum app)
Converts a DiameterApplicationEnum to the corresponding Diameter application ID.
Definition: epcdns.cpp:709
x-gn
Definition: epcdns.h:257
NodeSelectorResultList & getResults()
Retrieves the node selector results list.
Definition: epcdns.h:1264
ENodeBUPFNodeSelector(const char *enb, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1800
~AppService()
Class destructor.
Definition: epcdns.h:1043
NetworkCapability & addDesiredNetworkCapability(const char *nc)
Adds a desired network capability to the list of desired network capabilities.
Definition: epcdns.h:1273
x-n2
Definition: epcdns.h:317
x-nqprime
Definition: epcdns.h:141
MSCAppProtocolEnum
the MSC related protocols.
Definition: epcdns.h:296
x-s2c-dsmip
Definition: epcdns.h:165
const EString & getName() const
Retrieves the Diameter host name.
Definition: epcdns.h:2009
DiameterSrvVector & getSrvs()
Retrieves the Diameter server.
Definition: epcdns.h:2197
Application protocol object.
Definition: epcdns.h:912
uint16_t setOrder(uint16_t order)
Assigns the order value.
Definition: epcdns.h:1139
x-s2a-pmip
Definition: epcdns.h:202
~DiameterSrv()
Class destructor.
Definition: epcdns.h:2063
x-s8-pmip
Definition: epcdns.h:241
EString & getRawService()
Retrieves the raw application service string.
Definition: epcdns.h:1061
3GPP S9
Definition: epcdns.h:379
DiameterHost()
Default constructor.
Definition: epcdns.h:1999
Represents an NAPTR resource record.
Definition: dnsrecord.h:429
x-s1-u
Definition: epcdns.h:145
x-gp
Definition: epcdns.h:278
static EString apn_fqdn(const char *apn, const char *mnc, const char *mcc)
Constructs the APN FQDN.
Definition: epcdns.cpp:466
x-s11
Definition: epcdns.h:284
x-s5-pmip
Definition: epcdns.h:237
x-s5-gtp
Definition: epcdns.h:235
~DiameterSrvVector()
Class destructor.
Definition: epcdns.h:2122
Void addIPv6Host(const std::string &host)
Adds an IPv6 host to the list of IPv6 hosts.
Definition: epcdns.h:1160
Void addIPv4Host(const std::string &host)
Adds an IPv4 host to the list of IPv4 hosts.
Definition: epcdns.h:1157
static EString epc_nodes_domain_fqdn(const char *mnc, const char *mcc)
Constructs the EPC nodes subdomain (DNS zone).
Definition: epcdns.cpp:196
x-s8-gtp
Definition: epcdns.h:214
Unknown.
Definition: epcdns.h:131
DiameterProtocolEnum
The Diameter transport protocols.
Definition: epcdns.h:436
Represents a vector (array) of strings.
Definition: epcdns.h:886
x-s3
Definition: epcdns.h:167
EpcNodeSelector(const char *node, const unsigned char *plmnid, AppServiceEnum appsvc=x_3gpp_any)
Class constructor.
Definition: epcdns.h:1852
A Diameter NAPTR A record object.
Definition: epcdns.h:2160
static EString epc_node_fqdn(const char *node, const char *mnc, const char *mcc)
Constructs the EPC node FQDN.
Definition: epcdns.cpp:215
x-gn
Definition: epcdns.h:194
x-s4
Definition: epcdns.h:233
unknown
Definition: epcdns.h:324
Bool getTopon()
Determines if the "topon" feature is enabled for this object.
Definition: epcdns.h:803
static EString emergency_epdg_tai_fqdn(const char *lb, const char *hb, const char *mnc, const char *mcc)
Constructs the tracking area identity based emergency ePDG FQDN.
Definition: epcdns.cpp:340
SGWUPFNodeSelector(const char *lb, const char *hb, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1749
x-s5-gtp
Definition: epcdns.h:210
Unknown.
Definition: epcdns.h:439
AppServiceEnum getDesiredService()
Retrieves the desired application service type.
Definition: epcdns.h:1255
SGWNodeSelector(const char *lb, const char *hb, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1654
A PGW node selector.
Definition: epcdns.h:1521
A SGW node selector.
Definition: epcdns.h:1603
WiMAX Policy and Charging Control R3 Online Charging Diameter Application (WiMAX PCC-R3-OC) ...
Definition: epcdns.h:432
uint16_t getPriority()
Retrieves the priority value.
Definition: epcdns.h:2067
x-gp
Definition: epcdns.h:259
const EString & setReplacement(const std::string &replacement)
Assigns the replacement value.
Definition: epcdns.h:1966
SGWNodeSelector(const char *node, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1673
Mobile IPv6 IKE.
Definition: epcdns.h:354
Relay.
Definition: epcdns.h:360
x-s5-pmip
Definition: epcdns.h:212
A PGW user plane node selector.
Definition: epcdns.h:1562
Void dump(const char *prefix="")
Prints the contents of this object.
Definition: epcdns.h:2234
PGWUPFNodeSelector(const char *apn, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1578
AppServiceEnum
Service names defined in 23.003 v15.5.0, table 19.4.3.1.
Definition: epcdns.h:103
AppProtocolEnum
3GPP protocols defined in 23.003 v15.5.0, table 19.4.3.1.
Definition: epcdns.h:128
An eNodeB user plane node selector.
Definition: epcdns.h:1793
Contains the node selector results.
Definition: epcdns.h:1103
AppServiceEnum getService()
Retrieves the application service type.
Definition: epcdns.h:1055
StringVector & getIPv6Addresses()
Retrieves the list of IPv6 addresses for this Diameter host.
Definition: epcdns.h:2024
PGWAppProtocolEnum
the PGW related protocols.
Definition: epcdns.h:191
x-sv
Definition: epcdns.h:269
WiMAX Policy and Charging Control R3 Policies Diameter Application (WiMAX PCC-R3-P) ...
Definition: epcdns.h:426
NASREQ.
Definition: epcdns.h:342
static EString nonemergency_epdg_lac_fqdn(const char *lac, const char *mnc, const char *mcc)
Constructs the location area code based ePDG FQDN.
Definition: epcdns.cpp:279
AppProtocolList & getSupportedProtocols()
Retrieves the list supported protocols.
Definition: epcdns.h:1128
uint16_t setPort(uint16_t port)
Assigns the IP port.
Definition: epcdns.h:2087
uint16_t setPreference(uint16_t preference)
Assigns the preference value.
Definition: epcdns.h:1143
GGSN.
Definition: epcdns.h:114
AppProtocol * addDesiredProtocol(PGWAppProtocolEnum p)
Adds the desired application protocol to the selector.
Definition: epcdns.h:1870
MMEAppProtocolEnum
the SGSN related protocols.
Definition: epcdns.h:273
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:1164
WiMAX DHCP Diameter Application (WDDA)
Definition: epcdns.h:422
DiameterHost(const std::string &name)
Class constructor.
Definition: epcdns.h:2005
static const char * getDiameterProtocol(DiameterProtocolEnum protocol)
Converts a DiameterProtocolEnum to the corresponding Diameter protocol string.
Definition: epcdns.cpp:797
x-gp
Definition: epcdns.h:135
The application service object.
Definition: epcdns.h:1034
x-s10
Definition: epcdns.h:282
Represents a vector (array) of Diameter servers.
Definition: epcdns.h:2118
UsageTypeList & getUsageTypes()
Retrieves the list of usage types.
Definition: epcdns.h:928
Provides several utilities for manipulating names, services and protocols.
Definition: epcdns.h:452
TCP with TLS.
Definition: epcdns.h:445
static EString sgsn_fqdn(const char *nri, const char *rac, const char *lac, const char *mnc, const char *mcc)
Constructs the serving GPRS support node (SGSN) FQDN.
Definition: epcdns.cpp:171
StringVector & getIPv6Hosts()
Retrieves the list of IPv6 hosts.
Definition: epcdns.h:1134
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:846
contains the information to select a node.
Definition: epcdns.h:1242
TCP.
Definition: epcdns.h:441
x_s2a_pmip
Definition: epcdns.h:159
x-s12
Definition: epcdns.h:227
const EString & setName(const char *name)
Assigns the Diameter host name.
Definition: epcdns.h:2013
static EString apn(const char *apn, const char *mnc, const char *mcc)
Constructs the APN.
Definition: epcdns.cpp:486
Represents a colocated candidate.
Definition: epcdns.h:1344
AppService()
Default constructor.
Definition: epcdns.h:1038
x-sxc
Definition: epcdns.h:310
UsageType addUsageType(UsageType ut)
Adds a usage type object to the usage type list.
Definition: epcdns.h:940
PGWNodeSelector(const char *apn, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1537
PairType
Pair type.
Definition: epcdns.h:1348
static EString rnc_fqdn(const char *rnc, const char *mnc, const char *mcc)
Constructs the radio network controller (RNC) FQDN.
Definition: epcdns.cpp:150
uint16_t setPreference(uint16_t pref)
Assigns the preference value.
Definition: epcdns.h:1942
Bool findUsageType(UsageType ut)
Determines if a usage type exists in the usage type list.
Definition: epcdns.h:953
A EPC node selector.
Definition: epcdns.h:1834
uint16_t setOrder(uint16_t order)
Assigns the order value.
Definition: epcdns.h:1934
3GPP S6a
Definition: epcdns.h:375
x-s12
Definition: epcdns.h:151
PGWUPFNodeSelector(const char *apn, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1569
SGWNodeSelector(unsigned char lb, unsigned char hb, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1627
unknown
Definition: epcdns.h:1898
DiameterProtocolEnum setProtocol(DiameterProtocolEnum proto)
Assigns the protocol type.
Definition: epcdns.h:2289
UPF.
Definition: epcdns.h:122
AppProtocol * addDesiredProtocol(UPFAppProtocolEnum p)
Adds the desired application protocol to the selector.
Definition: epcdns.h:1587
const EString & setService(const char *service)
Assigns the service value.
Definition: epcdns.h:1950
Base Accounting.
Definition: epcdns.h:346
Mobile IPv6 Auth.
Definition: epcdns.h:356
Bool findNetworkCapability(const NetworkCapability &nc)
Determines if a network capability exists in the network capabilities list.
Definition: epcdns.h:961
Represents a Diameter selector.
Definition: epcdns.h:2252
Void addDesiredProtocol(AppProtocol *ap)
Adds a desired application protcol to the desired protocol list.
Definition: epcdns.h:1319
DiameterNaptrTypeEnum
Diameter name pointer (NAPTR) type.
Definition: epcdns.h:1895
const EString & getHostname()
Retrieves the host name.
Definition: epcdns.h:1116
SGWNodeSelector(const unsigned char lb, const unsigned char hb, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1611
x-s2a-mipv4
Definition: epcdns.h:157
~AppProtocolList()
Class destructor.
Definition: epcdns.h:1007
Represents a list of network capabilities.
Definition: epcdns.h:865
AppProtocol * addDesiredProtocol(UPFAppProtocolEnum p)
Adds the desired application protocol to the selector.
Definition: epcdns.h:1777
x-s6a
Definition: epcdns.h:290
3GPP Gx
Definition: epcdns.h:381
static AppServiceEnum getAppService(const std::string &s)
Retrieves the AppServiceEnum value for a given string.
Definition: epcdns.cpp:506
Unknown.
Definition: epcdns.h:106
DNS::namedserverid_t setNamedServerID(DNS::namedserverid_t nsid)
Assigns the named server ID.
Definition: epcdns.h:1251
x-s5-pmip
Definition: epcdns.h:173
const EString & getRealm()
Retrieves the realm.
Definition: epcdns.h:2260
host name
Definition: epcdns.h:1900
SGWNodeSelector(const char *lb, const char *hb, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1644
uint16_t setWeight(uint16_t weight)
Assigns the weight value.
Definition: epcdns.h:2079
uint16_t getPreference()
Retrieves the preference value.
Definition: epcdns.h:1938
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:1019
x-s8-pmip
Definition: epcdns.h:216
x-s4
Definition: epcdns.h:169
x-s3
Definition: epcdns.h:265
x-s5-gtp
Definition: epcdns.h:171
AppProtocol * addDesiredProtocol(SGWAppProtocolEnum p)
Adds the desired application protocol to the selector.
Definition: epcdns.h:1682
CanonicalNodeName & getCanonicalNodeName1()
Retrieves the first canonical node name.
Definition: epcdns.h:1373
const EString & setService(const std::string &service)
Assigns the service value.
Definition: epcdns.h:1954
SGWUPFNodeSelector(const unsigned char lb, const unsigned char hb, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1706
AppServiceEnum setAppService(AppServiceEnum s)
Assigns the application service type.
Definition: epcdns.h:1312
service
Definition: epcdns.h:1902
EAP.
Definition: epcdns.h:350
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:815
const EString & setRealm(const char *realm)
Assigns the realm.
Definition: epcdns.h:2264
x-s2b-pmip
Definition: epcdns.h:231
Mobile IPv4.
Definition: epcdns.h:344
static EString global_enodeb_id_fqdn(const char *enb, const char *mnc, const char *mcc)
Constructs the global eNodeB ID.
Definition: epcdns.cpp:405
const EString & setDomainName(const std::string &d)
Assigns the domain name.
Definition: epcdns.h:1316
SGW.
Definition: epcdns.h:112
int getTopologicalMatches()
Retrieves the number of topological matches.
Definition: epcdns.h:1382
const EString getName() const
Retrieves the canonical node name.
Definition: epcdns.h:806
AppProtocolList & getDesiredProtocols()
Retrieves the list of application protocols.
Definition: epcdns.h:1258
const EString & setRealm(const char *mnc, const char *mcc)
Assigns the realm.
Definition: epcdns.h:2269
virtual ~DiameterNaptr()
Class destructor.
Definition: epcdns.h:1920
A list of node selector result objects.
Definition: epcdns.h:1200
uint16_t getPort()
Retrieves the IP port.
Definition: epcdns.h:2083
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:2035
x-s2b-pmip
Definition: epcdns.h:163
x-s2a-gtp
Definition: epcdns.h:198
SGWUPFNodeSelector(const char *node, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1759
WiMAX Policy and Charging Control R3 Offline Charging Diameter Application (WiMAX PCC-R3-OFC) ...
Definition: epcdns.h:428
AppProtocol * addDesiredProtocol(PGWAppProtocolEnum p)
Adds the desired application protocol to the selector.
Definition: epcdns.h:1546
x-sxa
Definition: epcdns.h:306
DiameterApplicationEnum setApplication(DiameterApplicationEnum app)
Assigns the applciation type.
Definition: epcdns.h:2281
x-s11
Definition: epcdns.h:149
SGWUPFNodeSelector(const char *node, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1768
const EString & setHostname(const std::string &hostname)
Assigns the host name.
Definition: epcdns.h:1151
SGSNAppProtocolEnum
the SGSN related protocols.
Definition: epcdns.h:254
static EString tai_fqdn(const char *lb, const char *hb, const char *mnc, const char *mcc)
Constructs the tracking area identity FQDN.
Definition: epcdns.cpp:60
MME.
Definition: epcdns.h:118
static EString mme_pool_fqdn(const char *mmegi, const char *mnc, const char *mcc)
Constructs the MME pool FQDN.
Definition: epcdns.cpp:106
A MME node selector.
Definition: epcdns.h:1458
uint16_t getPreference()
Retrieves the preference value.
Definition: epcdns.h:1122
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:891
SGWUPFNodeSelector(unsigned char lb, unsigned char hb, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1722
Canonical node name.
Definition: epcdns.h:788
WiMAX Policy and Charging Control R3 Offline Charging Prime Diameter Application (WiMAX PCC-R3-OFC-PR...
Definition: epcdns.h:430
const EString & setRealm(const unsigned char *plmnid)
Assigns the realm.
Definition: epcdns.h:2273
NetworkCapability & addDesiredNetworkCapability(NetworkCapability &nc)
Adds a desired network capability to the list of desired network capabilities.
Definition: epcdns.h:1277
const EString & getService()
Retrieves the service value.
Definition: epcdns.h:1946
Represents a diameter host.
Definition: epcdns.h:1995
static EString nonemergency_epdg_visitedcountry_fqdn(const char *mcc)
Constructs the visited country FQDN.
Definition: epcdns.cpp:301
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:2095
static EString home_network_gprs(const char *mnc, const char *mcc)
Constructs the APN operator identifier.
Definition: epcdns.cpp:42
Void dump()
Prints the contents of this object.
Definition: epcdns.h:1082
NodeSelectorResult & getCandidate1()
Retrieves the first candidate node selector result object.
Definition: epcdns.h:1367
x-s10
Definition: epcdns.h:147
Void dump(const char *prefix="")
Prints the contents of this object.
Definition: epcdns.h:1429
3GPP STa
Definition: epcdns.h:373
DiameterApplicationEnum
the Diameter application ID&#39;s.
Definition: epcdns.h:321
MMENodeSelector(const char *mmec, const char *mmegi, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1467
x-nqprime
Definition: epcdns.h:261
x-sv
Definition: epcdns.h:299
CanonicalNodeName & getCanonicalNodeName2()
Retrieves the second canonical node name.
Definition: epcdns.h:1376
x-s11
Definition: epcdns.h:225
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:1218
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:2172
AppProtocolEnum setProtocol(AppProtocolEnum ape)
Assigns the protocol enumeration.
Definition: epcdns.h:936
static AppProtocolEnum getAppProtocol(const std::string &p)
Retrieves the AppProtocolEnum value for a given string.
Definition: epcdns.cpp:519
UsageType addDesiredUsageType(UsageType ut)
Adds a desired usage type to the list of desired usage types.
Definition: epcdns.h:1269
ENodeBUPFNodeSelector(const char *enb, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1809
AppProtocol()
Default constructor.
Definition: epcdns.h:916
SGWUPFNodeSelector(const char *lb, const char *hb, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1739
static EString diameter_fqdn(const char *mnc, const char *mcc)
Constructs the Diameter FQDN.
Definition: epcdns.cpp:683
x-gp
Definition: epcdns.h:196
WiMAX MIP6 Diameter Application (WM6DA)
Definition: epcdns.h:420
~DiameterNaptrList()
Class destructor.
Definition: epcdns.h:2222
EpcNodeSelector(const char *fqdn, AppServiceEnum appsvc=x_3gpp_any)
Class constructor.
Definition: epcdns.h:1861
x-s1-mme
Definition: epcdns.h:286
DiameterNaptrA()
Default constructor.
Definition: epcdns.h:2164
AppProtocolList & getProtocols()
Retrieves the list of application protocols.
Definition: epcdns.h:1058
x-s8-pmip
Definition: epcdns.h:179
Void addIPv4Address(const std::string &addr)
Adds an IPv4 address for this Diameter host.
Definition: epcdns.h:2028
DiameterApplicationEnum getApplicataion()
Retrieves the application type.
Definition: epcdns.h:2277
AMF.
Definition: epcdns.h:124
MMENodeSelector(const char *mmec, const char *mmegi, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1477
Manages a list of application protocols.
Definition: epcdns.h:1001
const EString & getDomainName()
Retrieves the domain name.
Definition: epcdns.h:1261
PGWNodeSelector(const char *apn, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1528
x-nq
Definition: epcdns.h:280
MMENodeSelector(const char *mmegi, const char *mnc, const char *mcc)
Class constructor.
Definition: epcdns.h:1487
NodeSelectorResult()
Default constructor.
Definition: epcdns.h:1107
~NodeSelectorResultList()
Class destructor.
Definition: epcdns.h:1206
AppProtocol * addDesiredProtocol(UPFAppProtocolEnum p)
Adds the desired application protocol to the selector.
Definition: epcdns.h:1818
Represents a Diameter server.
Definition: epcdns.h:2057
AppProtocol * findProtocol(AppProtocolEnum protocol)
Searches for a specific application protocol object.
Definition: epcdns.h:1070
AppProtocolList()
Default constructor.
Definition: epcdns.h:1005
x-sv
Definition: epcdns.h:292
static EString nonemergency_epdg_tai_fqdn(const char *lb, const char *hb, const char *mnc, const char *mcc)
Constructs the tracking area identity based ePDG FQDN.
Definition: epcdns.cpp:255
MMENodeSelector(const char *mmegi, const unsigned char *plmnid)
Class constructor.
Definition: epcdns.h:1496
AppService(const std::string &ds)
Class constructor.
Definition: epcdns.h:1041
NetworkCapability & addNetworkCapability(NetworkCapability &nc)
Adds a network capability to the network capability list.
Definition: epcdns.h:944
GGSNAppProtocolEnum
the GGSN related protocols.
Definition: epcdns.h:245
DiameterSrv()
Default constructor.
Definition: epcdns.h:2061
Void addSupportedProtocol(AppProtocol *ap)
Adds the application object to the list.
Definition: epcdns.h:1154
x-gn
Definition: epcdns.h:248
iMAX Network Access Authentication and Authorization Diameter Application (WNAAADA) ...
Definition: epcdns.h:414
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:1386
x-n2
Definition: epcdns.h:137
DiameterProtocolEnum getProtocol()
Retrieves the protocol type.
Definition: epcdns.h:2285
uint16_t setPort(uint16_t port)
Assigns the IP port.
Definition: epcdns.h:1147
3GPP SWm
Definition: epcdns.h:377
x-sv
Definition: epcdns.h:181
Void dump()
Prints the contents of this object.
Definition: epcdns.h:1288
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:2134
StringVector & getIPv4Hosts()
Retrieves the list of IPv4 hosts.
Definition: epcdns.h:1131
PGW.
Definition: epcdns.h:110
x-nq
Definition: epcdns.h:139
~AppProtocol()
Class destructor.
Definition: epcdns.h:918
DNS::namedserverid_t getNamedServerID()
Retrieves the named server ID.
Definition: epcdns.h:1247
A SGW user plane node selector.
Definition: epcdns.h:1698
x-sxa
Definition: epcdns.h:183
A list of Diameter NAPTR objects.
Definition: epcdns.h:2218
WiMAX MIP4 Diameter Application (WM4DA)
Definition: epcdns.h:418
x-s16
Definition: epcdns.h:263
x-s8-gtp
Definition: epcdns.h:239
The namespace for the TS 29.303 related DNS functions.
Definition: epcdns.h:96
Void dump(const char *prefix)
Prints the contents of this object.
Definition: epcdns.h:871
x-s2c-dsmip
Definition: epcdns.h:208
x-sxb
Definition: epcdns.h:308
x-s2a-mipv4
Definition: epcdns.h:200
x-s1-mme
Definition: epcdns.h:143
const EString & setName(const std::string &name)
Assigns the Diameter host name.
Definition: epcdns.h:2017
uint16_t setPriority(uint16_t priority)
Assigns the priority value.
Definition: epcdns.h:2071
DiameterNaptrTypeEnum getType()
Retrieves the NAPTR type.
Definition: epcdns.h:1926
x-s6a
Definition: epcdns.h:175
Void(* AsyncNodeSelectorCallback)(NodeSelector &ns, cpVoid data)
Definition: epcdns.h:1239
x-s3
Definition: epcdns.h:288
StringVector & getIPv4Addresses()
Retrieves the list of IPv4 addresses for this Diameter host.
Definition: epcdns.h:2021
x-gn
Definition: epcdns.h:276
uint16_t getWeight()
Retrieves the weight value.
Definition: epcdns.h:2075
std::shared_ptr< Query > QueryPtr
A typedef to std::shared_ptr<Query>.
Definition: dnsquery.h:40
Void addIPv6Address(const std::string &addr)
Adds an IPv6 address for this Diameter host.
Definition: epcdns.h:2031
DiameterNaptrS()
Default constructor.
Definition: epcdns.h:2193
x-s2b-gtp
Definition: epcdns.h:161
AMFAppProtocolEnum
the AMF related protocols.
Definition: epcdns.h:314
static EString emergency_epdg_visitedcountry_fqdn(const char *mcc)
Constructs the visited country emergency FQDN.
Definition: epcdns.cpp:386
AppProtocolEnum getProtocol()
Retrieves the protocol enumeration.
Definition: epcdns.h:925
String class.
Definition: estring.h:31
A Diameter NAPTR S record object.
Definition: epcdns.h:2189
Defines classes related to the DNS cache.
Void dump(const char *prefix="")
Prints the contents of this object.
Definition: epcdns.h:968
x-sxb
Definition: epcdns.h:185
Any.
Definition: epcdns.h:108
UsageTypeList()
Default constructor.
Definition: epcdns.h:842
UPFAppProtocolEnum
the UPF related protocols.
Definition: epcdns.h:303
NodeSelectorResultList()
Default constructor.
Definition: epcdns.h:1204
WiMAX Location Authentication Authorization Diameter Application (WLAADA)
Definition: epcdns.h:424
AppProtocol * addDesiredProtocol(MMEAppProtocolEnum p)
Adds the desired application protocol to the selector.
Definition: epcdns.h:1505
x-s1_u
Definition: epcdns.h:223
DiameterNaptr(DiameterNaptrTypeEnum drt)
Class constructor.
Definition: epcdns.h:1914
Represents a list of usage types.
Definition: epcdns.h:838
static EString epc(const char *mnc, const char *mcc)
Constructs the home network realm/domain name.
Definition: epcdns.cpp:447
static EString emergency_epdg_oi_fqdn(const char *mnc, const char *mcc)
Constructs the operator identifier (OI) based emergency ePDG FQDN.
Definition: epcdns.cpp:320
const EString & getReplacement()
Retrieves the replacement value.
Definition: epcdns.h:1958
x-s2b-pmip
Definition: epcdns.h:206
const EString & setReplacement(const char *replacement)
Assigns the replacement value.
Definition: epcdns.h:1962