mirror of
https://github.com/de2tla2f/pymaster.git
synced 2024-11-25 20:31:28 +00:00
Add simple nat bypass
This commit is contained in:
parent
6eb0a2ae83
commit
fff6fc9332
15
pymaster.py
15
pymaster.py
|
@ -78,6 +78,7 @@ class PyMaster:
|
|||
# Use NoneType as undefined
|
||||
gamedir = None
|
||||
gamemap = None # UNUSED: until Xash3D will not support full filter
|
||||
nat = 0
|
||||
|
||||
for i in range( 0, len(split), 2 ):
|
||||
try:
|
||||
|
@ -86,6 +87,8 @@ class PyMaster:
|
|||
gamedir = key
|
||||
elif( split[i] == 'map' ):
|
||||
gamemap = key
|
||||
elif( split[i] == 'nat' ):
|
||||
nat = int(key)
|
||||
else:
|
||||
logPrint('Unhandled info string entry: {0}/{1}'.format(split[i], key))
|
||||
except IndexError:
|
||||
|
@ -100,9 +103,17 @@ class PyMaster:
|
|||
if( not i.check ):
|
||||
continue
|
||||
|
||||
if( gamedir != None ):
|
||||
if( gamedir != i.gamedir):
|
||||
if( nat != i.nat ):
|
||||
continue
|
||||
|
||||
if( gamedir != None ):
|
||||
if( gamedir != i.gamedir ):
|
||||
continue
|
||||
|
||||
if( nat ):
|
||||
# Tell server to send info reply
|
||||
self.sock.sendto( '\xff\xff\xff\xffc {0}:{1}'.format( addr[0], addr[1] ), i.addr )
|
||||
|
||||
# Use pregenerated address string
|
||||
packet += i.queryAddr
|
||||
packet += b'\0\0\0\0\0\0' # Fill last IP:Port with \0
|
||||
|
|
|
@ -17,6 +17,7 @@ class ServerEntry:
|
|||
lan = 0
|
||||
region = 255
|
||||
product = ''
|
||||
nat = 0
|
||||
|
||||
def setInfoString(self, data):
|
||||
infostring = data.replace('\n', '').replace('\r', '').replace('\0', '')
|
||||
|
@ -54,6 +55,8 @@ class ServerEntry:
|
|||
self.region = key
|
||||
elif( split[i] == 'product' ):
|
||||
self.product = key
|
||||
elif( split[i] == 'nat' ):
|
||||
self.nat = int(key)
|
||||
except IndexError:
|
||||
pass
|
||||
self.check = self.challenge == self.challenge2
|
||||
|
|
Loading…
Reference in a new issue