Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (Revision 273980) +++ channels/chan_sip.c (Arbeitskopie) @@ -2982,6 +2982,20 @@ return "UNKNOWN"; } +/*! \brief Return service as string */ +static inline const char *get_srv_service(enum sip_transport t) +{ + switch (t) { + case SIP_TRANSPORT_UDP: + case SIP_TRANSPORT_TCP: + return "sip"; + case SIP_TRANSPORT_TLS: + return "sips"; + } + + return "UNKNOWN"; +} + /*! \brief Return transport of dialog. \note this is based on a false assumption. We don't always use the outbound proxy for all requests in a dialog. It depends on the @@ -4850,7 +4864,11 @@ char service[MAXHOSTNAMELEN]; int tportno; - snprintf(service, sizeof(service), "_sip._%s.%s", get_transport(dialog->socket.type), peername); + snprintf(service, sizeof(service), "_%s._%s.%s", + get_srv_service(dialog->socket.type), + (dialog->socket.type == SIP_TRANSPORT_UDP) ? "UDP" : "TCP", + peername + ); srv_ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service); if (srv_ret > 0) { hostn = host; @@ -10982,7 +11000,10 @@ /* If we have no DNS manager let's do a lookup */ if (!mwi->dnsmgr) { char transport[MAXHOSTNAMELEN]; - snprintf(transport, sizeof(transport), "_sip._%s", get_transport(mwi->transport)); + snprintf(transport, sizeof(transport), "_%s._%s", + get_srv_service(mwi->transport), + (mwi->transport == SIP_TRANSPORT_UDP) ? "UDP" : "TCP" + ); ast_dnsmgr_lookup(mwi->hostname, &mwi->us, &mwi->dnsmgr, sip_cfg.srvlookup ? transport : NULL); } @@ -11693,7 +11714,11 @@ if (r->dnsmgr == NULL) { char transport[MAXHOSTNAMELEN]; peer = find_peer(r->hostname, NULL, TRUE, FINDPEERS, FALSE, 0); - snprintf(transport, sizeof(transport), "_sip._%s", get_transport(r->transport)); /* have to use static get_transport function */ + snprintf(transport, sizeof(transport), "_%s._%s", + get_srv_service(r->transport), + (r->transport == SIP_TRANSPORT_UDP) ? "UDP" : "TCP" + ); /* have to use static get_transport function */ + ast_dnsmgr_lookup(peer ? peer->tohost : r->hostname, &r->us, &r->dnsmgr, sip_cfg.srvlookup ? transport : NULL); if (peer) { peer = unref_peer(peer, "removing peer ref for dnsmgr_lookup"); @@ -25653,7 +25678,10 @@ *params++ = '\0'; } - snprintf(transport, sizeof(transport), "_sip._%s", get_transport(peer->socket.type)); + snprintf(transport, sizeof(transport), "_%s._%s", + get_srv_service(peer->socket.type), + (peer->socket.type == SIP_TRANSPORT_UDP) ? "UDP" : "TCP" + ); if (ast_dnsmgr_lookup(_srvlookup, &peer->addr, &peer->dnsmgr, sip_cfg.srvlookup && !peer->portinuri ? transport : NULL)) { ast_log(LOG_ERROR, "srvlookup failed for host: %s, on peer %s, removing peer\n", _srvlookup, peer->name);