diff --git a/core/sip/resolver.h b/core/sip/resolver.h index 857ab8ba..5b1b9b76 100644 --- a/core/sip/resolver.h +++ b/core/sip/resolver.h @@ -144,6 +144,10 @@ public: const address_type types); + int str2ip(const char* name, + sockaddr_storage* sa, + const address_type types); + protected: _resolver(); ~_resolver(); diff --git a/core/sip/trans_layer.cpp b/core/sip/trans_layer.cpp index f1234ac1..a731138d 100644 --- a/core/sip/trans_layer.cpp +++ b/core/sip/trans_layer.cpp @@ -714,7 +714,18 @@ int _trans_layer::set_next_hop(sip_msg* msg, int _trans_layer::set_destination_ip(sip_msg* msg, cstring* next_hop, unsigned short next_port) { + string nh = c2stlstr(*next_hop); + + if (resolver::instance()->str2ip(nh.c_str(), &(msg->remote_ip), IPv4) == 1) { + // already a valid IP address + if (!next_port) + ((sockaddr_in*)&(msg->remote_ip))->sin_port = htons(5060); + else + ((sockaddr_in*)&(msg->remote_ip))->sin_port = htons(next_port); + + return 0; + } if(!next_port){ // no explicit port specified,