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 ) ;
    }
Exemple #2
0
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;
}