Initial commit
This commit is contained in:
4
handlers/__init__.py
Normal file
4
handlers/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from . import mainHandler
|
||||
from . import serverPingHandler
|
||||
|
||||
from . import handshakeHandler
|
||||
3
handlers/handshakeHandler.py
Normal file
3
handlers/handshakeHandler.py
Normal file
@@ -0,0 +1,3 @@
|
||||
def handle(client, data):
|
||||
print("![{}] -> Handshake".format(client.addr))
|
||||
return
|
||||
19
handlers/mainHandler.py
Normal file
19
handlers/mainHandler.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from . import handshakeHandler
|
||||
|
||||
def handle(client, data):
|
||||
print("?[{}] -> {} / {}".format(client.addr, data, data.hex()))
|
||||
|
||||
if client.state == 0: # Perform handshake if possible
|
||||
client.state = 1
|
||||
return b"\x1a\x1e\xd1\xd1"
|
||||
if client.state == 1:
|
||||
client.state = 2
|
||||
return b"\x19\x00"
|
||||
if client.state == 2:
|
||||
client.state = 3
|
||||
return b"\xe3\x00\x00"
|
||||
if client.state == 3:
|
||||
client.state = 4
|
||||
return b"\xe3\x00\x00", b"\x00\x00\x42\x98\x0c\x11\x33\x45\x30\x42\x33\x33\x35\x32\x37\x34\x46\x39\x31\x43\x39\x39\x00"
|
||||
|
||||
return b"WUT?"
|
||||
38
handlers/serverPingHandler.py
Normal file
38
handlers/serverPingHandler.py
Normal file
@@ -0,0 +1,38 @@
|
||||
import struct
|
||||
from objects import glob
|
||||
|
||||
def handle(client, data):
|
||||
ping_ip = ".".join((str(x) for x in struct.unpack(b"<BBBB", data[4:8])))
|
||||
|
||||
print("![{}] -> Pinging to {}".format(client.addr, ping_ip))
|
||||
|
||||
if len(data) == 11: # We should add our data ontop
|
||||
if data[-1:] in RESPONSE:
|
||||
data += RESPONSE[data[-1:]]()
|
||||
|
||||
return data
|
||||
|
||||
def query_i():
|
||||
len_hostname = len(glob.config["server"]["hostname"])
|
||||
len_mode = len(glob.config["server"]["mode"])
|
||||
len_language = len(glob.config["server"]["language"])
|
||||
|
||||
packet = struct.pack(b"<?HHI%dsI%dsI%ds" % (len_hostname, len_mode, len_language),
|
||||
False,
|
||||
get_online_players(),
|
||||
glob.config["server"]["max_players"],
|
||||
len_hostname,
|
||||
glob.config["server"]["hostname"].encode(),
|
||||
len_mode,
|
||||
glob.config["server"]["mode"].encode(),
|
||||
len_language,
|
||||
glob.config["server"]["language"].encode())
|
||||
|
||||
return packet
|
||||
|
||||
def get_online_players(): #TODO
|
||||
return 0
|
||||
|
||||
RESPONSE = { #TODO: r, c, d & p (https://wiki.sa-mp.com/wiki/Query_Mechanism)
|
||||
b"i": query_i
|
||||
}
|
||||
Reference in New Issue
Block a user