aboutsummaryrefslogtreecommitdiff
path: root/src/net.cpp
diff options
context:
space:
mode:
authorMatt Corallo <matt@bluematt.me>2012-01-31 17:36:25 -0500
committerLuke Dashjr <luke-jr+git@utopios.org>2012-02-02 17:44:42 -0500
commite5b031f5d2a467fa28fbf7667101909a28e430bb (patch)
tree9d55d8b2258a01346ea21701a85670168d49b655 /src/net.cpp
parentedb563e8a5e6145cef6684e6e179b428a115ec62 (diff)
downloadbitcoin-e5b031f5d2a467fa28fbf7667101909a28e430bb.tar.xz
Fix UPnP by reannouncing every 20 minutes.
Diffstat (limited to 'src/net.cpp')
-rw-r--r--src/net.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/net.cpp b/src/net.cpp
index b35a79deae..f995ea9c2a 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -1105,11 +1105,11 @@ void ThreadMapPort2(void* parg)
{
string strDesc = "Bitcoin " + FormatFullVersion();
#ifndef UPNPDISCOVER_SUCCESS
- /* miniupnpc 1.5 */
+ /* miniupnpc 1.5 */
r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
port, port, lanaddr, strDesc.c_str(), "TCP", 0);
#else
- /* miniupnpc 1.6 */
+ /* miniupnpc 1.6 */
r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
port, port, lanaddr, strDesc.c_str(), "TCP", 0, "0");
#endif
@@ -1119,6 +1119,7 @@ void ThreadMapPort2(void* parg)
port, port, lanaddr, r, strupnperror(r));
else
printf("UPnP Port Mapping successful.\n");
+ int i = 1;
loop {
if (fShutdown || !fUseUPnP)
{
@@ -1128,7 +1129,26 @@ void ThreadMapPort2(void* parg)
FreeUPNPUrls(&urls);
return;
}
+ if (i % 600 == 0) // Refresh every 20 minutes
+ {
+#ifndef UPNPDISCOVER_SUCCESS
+ /* miniupnpc 1.5 */
+ r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
+ port, port, lanaddr, strDesc.c_str(), "TCP", 0);
+#else
+ /* miniupnpc 1.6 */
+ r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
+ port, port, lanaddr, strDesc.c_str(), "TCP", 0, "0");
+#endif
+
+ if(r!=UPNPCOMMAND_SUCCESS)
+ printf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n",
+ port, port, lanaddr, r, strupnperror(r));
+ else
+ printf("UPnP Port Mapping successful.\n");;
+ }
Sleep(2000);
+ i++;
}
} else {
printf("No valid UPnP IGDs found\n");