QuteCom uses src-port 5060 for outgoing connections. why?
Darshaka Pathirana
dpat at syn-net.org
Wed Aug 6 20:24:32 CEST 2008
Hi!
Is there any reason why QuteCom alwayas tries to allocate src-port 5060
when registering on a remote server?
The code in subject is this (in wengophone/src/model/network/NetworkDiscovery.cpp):
unsigned NetworkDiscovery::getFreeLocalPort() {
Config & config = ConfigManager::getInstance().getCurrentConfig();
int localPort = SIP_PORT;
if (!is_local_udp_port_used(NULL, config.getNetworkSipLocalPort())) {
LOG_DEBUG("UDP port configured, will use port number : "
+ String::fromNumber(config.getNetworkSipLocalPort()));
return config.getNetworkSipLocalPort();
}
if (!is_local_udp_port_used(NULL, localPort)) {
LOG_DEBUG("UDP port 5060 is free");
return localPort;
} else if (!is_local_udp_port_used(NULL, localPort + 1)) {
LOG_DEBUG("UDP port 5060 is busy, will use 5061");
return localPort + 1;
} else {
localPort = get_local_free_udp_port(NULL);
if (localPort == -1) {
LOG_DEBUG("cannot get a free local port");
localPort = 0;
}
LOG_DEBUG("UDP port 5061 is busy, will use random port number : " + String::fromNumber(localPort));
return localPort;
}
}
[1] states that there is no reason for a client to always use the same
src-port number - the contrary is the case: the client should get a
"pseudo-random" port number for each process...
[1] http://www.tcpipguide.com/free/t_TCPIPClientEphemeralPortsandClientServerApplicatio.htm
QuteComs behaviour also causes a number of problems when running a
SIP-Server (asterisk) on localhost (or - under special circumstances -
even if in the same network).
I found some posts[2][3] in the wengophone-devel-mailling list but
they were primary workarounds.
[1] http://article.gmane.org/gmane.comp.voip.wengophone.devel/594
[2] http://article.gmane.org/gmane.comp.voip.wengophone.devel/947
I tried a quick 'n dirty hack to get a random port number but it
seems that it just works for Windows and breaks Mac and Linux.
But I do not know why.
# HG changeset patch
# User Darshaka Pathirana <dpat at syn-net.org>
# Date 1214762709 -7200
# Node ID 504e52162cdb92920f13fb26dec0da23cc71eaa8
# Parent dce8e9215e87a504dc76b30dc6a8574861c8f560
always use random local udp port (should be a config setting)
--- a/wengophone/src/model/network/NetworkDiscovery.cpp Sun Jun 29 14:26:26 2008 +0200
+++ b/wengophone/src/model/network/NetworkDiscovery.cpp Sun Jun 29 20:05:09 2008 +0200
@@ -141,16 +141,17 @@ unsigned NetworkDiscovery::getFreeLocalP
unsigned NetworkDiscovery::getFreeLocalPort() {
Config & config = ConfigManager::getInstance().getCurrentConfig();
int localPort = SIP_PORT;
+ bool randomPort = true;
- if (!is_local_udp_port_used(NULL, config.getNetworkSipLocalPort())) {
+ if (!randomPort && !is_local_udp_port_used(NULL, config.getNetworkSipLocalPort())) {
LOG_DEBUG("UDP port configured, will use port number : "
+ String::fromNumber(config.getNetworkSipLocalPort()));
return config.getNetworkSipLocalPort();
}
- if (!is_local_udp_port_used(NULL, localPort)) {
+ if (!randomPort && !is_local_udp_port_used(NULL, localPort)) {
LOG_DEBUG("UDP port 5060 is free");
return localPort;
- } else if (!is_local_udp_port_used(NULL, localPort + 1)) {
+ } else if (!randomPort && !is_local_udp_port_used(NULL, localPort + 1)) {
LOG_DEBUG("UDP port 5060 is busy, will use 5061");
return localPort + 1;
} else {
@@ -159,7 +160,12 @@ unsigned NetworkDiscovery::getFreeLocalP
LOG_DEBUG("cannot get a free local port");
localPort = 0;
}
- LOG_DEBUG("UDP port 5061 is busy, will use random port number : " + String::fromNumber(localPort));
+ if (!randomPort) {
+ LOG_DEBUG("UDP port 5061 is busy, will use random port number : " + String::fromNumber(localPort));
+ } else {
+ LOG_DEBUG("UDP port set to random, will use random port number : " + String::fromNumber(localPort));
+ }
+
return localPort;
}
}
Any ideas?
Greetings,
- Darsha
More information about the QuteCom-dev
mailing list