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