MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / dns_naptr_parser

Function dns_naptr_parser

resolve.c:869–909  ·  view source on GitHub ↗

! \brief parses the naptr record into a naptr_rdata structure * \param msg - pointer to the dns message * \param end - pointer to the end of the message * \param rdata - pointer to the rdata part of the naptr answer * \return 0 on error, or a dyn. alloc'ed naptr_rdata structure * * NAPTR rdata format: * 111111 * 0123456789012345 * +----------------+ * | ord

Source from the content-addressed store, hash-verified

867 * +----------------+
868 */
869struct naptr_rdata* dns_naptr_parser( unsigned char* msg, unsigned char* end,
870 unsigned char* rdata)
871{
872 struct naptr_rdata* naptr;
873
874 naptr = 0;
875 if ((rdata + 7) >= end)
876 goto error;
877 naptr=(struct naptr_rdata*)local_malloc(sizeof(struct naptr_rdata));
878 if (naptr == 0){
879 LM_ERR("out of pkg memory\n");
880 goto error;
881 }
882
883 memcpy((void*)&naptr->order, rdata, 2);
884 naptr->order=ntohs(naptr->order);
885 memcpy((void*)&naptr->pref, rdata + 2, 2);
886 naptr->pref=ntohs(naptr->pref);
887 naptr->flags_len = (int)rdata[4];
888 if ((rdata + 7 + naptr->flags_len) >= end)
889 goto error;
890 memcpy((void*)&naptr->flags, rdata + 5, naptr->flags_len);
891 naptr->services_len = (int)rdata[5 + naptr->flags_len];
892 if ((rdata + 7 + naptr->flags_len + naptr->services_len) >= end) goto error;
893 memcpy((void*)&naptr->services, rdata + 6 + naptr->flags_len, naptr->services_len);
894 naptr->regexp_len = (int)rdata[6 + naptr->flags_len + naptr->services_len];
895 if ((rdata + 7 + naptr->flags_len + naptr->services_len + naptr->regexp_len) >= end)
896 goto error;
897 memcpy((void*)&naptr->regexp, rdata + 7 + naptr->flags_len +
898 naptr->services_len, naptr->regexp_len);
899 rdata = rdata + 7 + naptr->flags_len + naptr->services_len + naptr->regexp_len;
900 naptr->repl_len=dn_expand(msg, end, rdata, naptr->repl, MAX_DNS_NAME-1);
901 if ( naptr->repl_len==(unsigned int)-1 )
902 goto error;
903 /* add terminating 0 ? (warning: len=compressed name len) */
904 return naptr;
905error:
906 if (naptr)
907 local_free(naptr);
908 return 0;
909}
910
911
912

Callers 1

get_recordFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected