(self, router)
| 283 | logger.exception("UPnP send query failed") |
| 284 | |
| 285 | def createPortMapping(self, router): |
| 286 | from debug import logger |
| 287 | |
| 288 | for i in range(50): |
| 289 | try: |
| 290 | routerIP, = unpack('>I', socket.inet_aton(router.address)) |
| 291 | localIP = self.localIP |
| 292 | if i == 0: |
| 293 | extPort = self.localPort # try same port first |
| 294 | elif i == 1 and self.extPort: |
| 295 | extPort = self.extPort # try external port from last time next |
| 296 | else: |
| 297 | extPort = randint(32767, 65535) |
| 298 | logger.debug("Attempt %i, requesting UPnP mapping for %s:%i on external port %i", i, localIP, self.localPort, extPort) |
| 299 | router.AddPortMapping(extPort, self.localPort, localIP, 'TCP', 'BitMessage') |
| 300 | shared.extPort = extPort |
| 301 | self.extPort = extPort |
| 302 | BMConfigParser().set('bitmessagesettings', 'extport', str(extPort)) |
| 303 | BMConfigParser().save() |
| 304 | break |
| 305 | except UPnPError: |
| 306 | logger.debug("UPnP error: ", exc_info=True) |
| 307 | |
| 308 | def deletePortMapping(self, router): |
| 309 | router.DeletePortMapping(router.extPort, 'TCP') |
no test coverage detected