void DrachtioController::getTransactionSender( nta_incoming_t* irq, string& host, unsigned int& port ) { su_sockaddr_t su[1]; socklen_t sulen = sizeof su; msg_t* msg = nta_incoming_getrequest( irq ) ; if( 0 != msg_get_address(msg, su, &sulen) ) { throw std::runtime_error("Failed trying to retrieve socket associated with incoming sip message") ; } char h[256], s[256] ; su_getnameinfo(su, sulen, h, 256, s, 256, NI_NUMERICHOST | NI_NUMERICSERV); host = h ; port = ::atoi( s ) ; }
static int li_name(su_localinfo_t const *hints, int gni_flags, su_sockaddr_t const *su, char **ccanonname) { char name[SU_MAXHOST]; int error; int flags = hints->li_flags; *ccanonname = NULL; if ((flags & LI_CANONNAME) || hints->li_canonname) { if ((flags & LI_NAMEREQD) == LI_NAMEREQD) gni_flags |= NI_NAMEREQD; if (flags & LI_NUMERIC) gni_flags |= NI_NUMERICHOST; error = su_getnameinfo(su, su_sockaddr_size(su), name, sizeof(name), NULL, 0, gni_flags); if (error) { if ((flags & LI_NAMEREQD) == LI_NAMEREQD) return 1; SU_DEBUG_7(("li_name: getnameinfo() failed\n")); if (!su_inet_ntop(su->su_family, SU_ADDR(su), name, sizeof name)) return ELI_RESOLVER; } if (hints->li_canonname && !su_casematch(name, hints->li_canonname)) return 1; if (!(flags & LI_CANONNAME)) return 0; if (!(*ccanonname = strdup(name))) return ELI_MEMORY; } return 0; }