summaryrefslogtreecommitdiff
path: root/servergreps/packets.py
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-03-31 21:55:14 +0300
committerAndrei Karas <akaras@inbox.ru>2016-03-31 22:30:22 +0300
commit0732a6fe72c378bbac151749a0bab1a9dd7c1b8f (patch)
tree9710d72ead7d79c73c0551eba7fa3104831559bd /servergreps/packets.py
parent5f900444cdf2e55adfd1c55a83e5821082e36a7d (diff)
downloadtools-0732a6fe72c378bbac151749a0bab1a9dd7c1b8f.tar.gz
tools-0732a6fe72c378bbac151749a0bab1a9dd7c1b8f.tar.bz2
tools-0732a6fe72c378bbac151749a0bab1a9dd7c1b8f.tar.xz
tools-0732a6fe72c378bbac151749a0bab1a9dd7c1b8f.zip
servergreps: move scripts and output into hercules directory.
Diffstat (limited to 'servergreps/packets.py')
-rwxr-xr-xservergreps/packets.py221
1 files changed, 0 insertions, 221 deletions
diff --git a/servergreps/packets.py b/servergreps/packets.py
deleted file mode 100755
index ef469a3..0000000
--- a/servergreps/packets.py
+++ /dev/null
@@ -1,221 +0,0 @@
-#! /usr/bin/env python2.7
-# -*- coding: utf8 -*-
-#
-# Copyright (C) 2015 Evol Online
-# Author: Andrei Karas (4144)
-
-import os
-import re
-import sys
-
-filt = re.compile(".+[.]c", re.IGNORECASE)
-serverpacketre = re.compile("(WFIFOW|WBUFW)([ ]*)[(]([ ]*)([\w>_-]+),([ ]*)"
- + "(?P<offset>0)([ ]*)[)]([ ]*)=([ ]*)0x(?P<packet>[0-9a-fA-F]+)([ ]*)[;]")
-serverpacketre2 = re.compile("[.]PacketType([ ]*)=([ ]*)(?P<name>[\w]+);")
-serverpacketre3 = re.compile("(WFIFOW|WBUFW)([ ]*)[(]([ ]*)([\w>_-]+),([ ]*)"
- + "(?P<offset>0)([ ]*)[)]([ ]*)=([ ]*)(?P<packet>[0-9\w]+)([ ]*)[;]")
-# need remove SMSG_
-#protocolinre = re.compile("packet[(](?P<name>[A-Z0-9_]+),([ ]*)0x(?P<packet>[0-9a-fA-F]+)[)];")
-protocolinre = re.compile("packet[(](?P<name>[A-Z0-9_]+),([ ]*)0x(?P<packet>[0-9a-fA-F]+),([ ]*)(?P<len>[\w-]+),([ ]*)")
-protocoloutre = re.compile("packet[(](?P<name>CMSG_[A-Z0-9_]+),([ ]*)0x(?P<packet>[0-9a-fA-F]+)[)];")
-clientpacketre = re.compile("(\t*)packet[(]0x(?P<packet>[0-9a-fA-F]+),(?P<len>[\w-]+),(?P<function>[0-9a-zA-Z_>-]+)(,|[)])")
-packetNameClientre = re.compile("(?P<name>(S|C)MSG_[A-Z0-9_]+)")
-
-packetsSet = set()
-serverpacketsSorted = []
-clientpacketsSorted = []
-clientPacketsManaPlus = dict()
-clientPacketsManaPlusClient = dict()
-clientPackets = dict()
-sizes = dict()
-manaplusUsedPacketsSet = set()
-
-def collectServerPackets(parentDir):
- global itemNamesByName
- files = os.listdir(parentDir)
- for file1 in files:
- if file1[0] == ".":
- continue
- file2 = os.path.abspath(parentDir + os.path.sep + file1)
- if not os.path.isfile(file2):
- collectServerPackets(file2)
- elif filt.search(file1):
- with open(file2, "r") as f:
- for line in f:
- m = serverpacketre.findall(line)
- if len(m) == 0:
- m = serverpacketre3.findall(line)
- if len(m) > 0:
- for str in m:
- if str[9] == "0":
- continue
- data = str[9]
- while len(data) < 4:
- data = "0" + data
- packetsSet.add(data.lower())
- m = serverpacketre2.findall(line)
- if len(m) > 0:
- for str in m:
- if str[2] == "0":
- continue
- packetsSet.add(str[2].lower())
-
-def sortServerPackets():
- for packet in packetsSet:
- serverpacketsSorted.append(packet)
- serverpacketsSorted.sort()
-
-def sortClientPackets():
- for packet in clientPackets:
- clientpacketsSorted.append(packet)
- clientpacketsSorted.sort()
-
-def collectManaPlusPackets(fileName):
- with open(fileName, "r") as f:
- for line in f:
- m = protocolinre.search(line)
- if m is not None:
- clientPacketsManaPlus[m.group("packet").lower()] = m.group("name")
- sizes[m.group("packet").lower()] = m.group("len")
- m = protocoloutre.search(line)
- if m is not None:
- clientPacketsManaPlus[m.group("packet").lower()] = m.group("name")
- clientPacketsManaPlusClient[m.group("packet").lower()] = m.group("name")
-
-def collectClientPackets(fileName):
- with open(fileName, "r") as f:
- for line in f:
- m = clientpacketre.search(line)
- if m is not None:
- data = m.group("packet").lower()
- while len(data) < 4:
- data = "0" + data
- clientPackets[data] = (int(m.group("len")), m.group("function"));
- #print "{0},{1},{2}".format(m.group("packet"), m.group("len"), m.group("function"))
-
-def collectManaPlusSizes(fileName):
- cnt = 0
- comaSplit = re.compile(",")
- with open(fileName, "r") as f:
- for line in f:
- line = line.strip()
- if len(line) < 2 or ((line[0] < "0" or line[0] > "9") and line[0] != "-"):
- continue
- cols = comaSplit.split(line)
- for col in cols:
- if col == "" or col == "\\":
- continue
- data = hex(cnt).split('x')[1]
- while len(data) < 4:
- data = "0" + data
- sizes[data] = int(col)
- cnt = cnt + 1
-# for d in range(0, 30):
-# s = ""
-# for f in range(0, 15):
-# s = s + "{0:>4},".format(sizes[f + d * 16])
-# print s
-
-def collectManaPlusUsedPackets(fileName):
- with open(fileName, "r") as f:
- for line in f:
- m = packetNameClientre.search(line)
- if m is not None:
- manaplusUsedPacketsSet.add(m.group("name"))
- #print m.group("name")
-
-def processManaPlusCppFiles(parentDir):
- files = os.listdir(parentDir)
- for file1 in files:
- if file1[0] == ".":
- continue
- file2 = os.path.abspath(parentDir + os.path.sep + file1)
- if not os.path.isfile(file2):
- processManaPlusCppFiles(file2)
- elif file1[-4:] == ".cpp":
- collectManaPlusUsedPackets(file2)
-
-def printPackets():
- with open(sys.argv[1] + "/serverpackets.txt", "w") as w:
- for packet in serverpacketsSorted:
- data = packet
- while data[0] == "0":
- data = data[1:]
- if packet in clientPacketsManaPlus:
- clientName = clientPacketsManaPlus[packet]
-# if clientName not in manaplusUsedPacketsSet and clientName.find("_OUTDATED") <= 0:
-# w.write("UNIMPLIMENTED ")
- w.write(data + " client name: " + clientName)
- else:
- w.write(data)
- w.write("\n")
-
- funcDict = dict()
- forRemove = []
- for packet in clientpacketsSorted:
- data = packet
- while data[0] == "0":
- data = data[1:]
- if packet in clientPackets:
- funcDict[clientPackets[packet][1]] = packet
-
- with open(sys.argv[1] + "/uselesspackets.txt", "w") as w:
- for packet in clientPacketsManaPlusClient:
- if packet not in clientPackets:
- w.write("Useless packet {0}.\n".format(packet))
-
- manaplusFunc = set()
- rev = []
- with open(sys.argv[1] + "/clientpackets.txt", "w") as w:
- for packet in clientPacketsManaPlusClient:
- clientName = clientPacketsManaPlusClient[packet]
- if clientName not in manaplusUsedPacketsSet and clientName.find("_OUTDATED") <= 0:
- w.write("UNIMPLIMENTED {0}\n".format(clientName))
-
- for packet in clientPacketsManaPlusClient:
- if packet in clientPackets:
- manaplusFunc.add(clientPackets[packet][1])
- for func in funcDict:
- if func not in manaplusFunc:
- packet = funcDict[func]
- rev.append("{0:4} {1:>4} {2}".format(packet, clientPackets[packet][0], clientPackets[packet][1]))
- rev.sort()
-
- for data in rev:
- w.write(data)
- w.write("\n")
-
-# with open(sys.argv[1] + "/wrongpackersizes.txt", "w") as w:
-# for packet in sizes:
-# if packet == "0000":
-# continue
-# data = packet
-# while data[0] == "0":
-# data = data[1:]
-# if packet in serverpacketsSorted:
-# if sizes[packet] != clientPackets[packet][0]:
-# w.write("{0:>4} {1:4} -> {2:4}\n".format(data, sizes[packet], clientPackets[packet][0]))
-
-def showHelp():
- print("Usage: packets.py version");
- exit(1)
-
-if len(sys.argv) != 2:
- showHelp()
-
-srcPath = "../../server-code/src/"
-manaplusPath = "../../manaplus/src/"
-protocolPath = manaplusPath + "net/eathena/packets"
-clientPacketsPath = sys.argv[1] + "/packets.h"
-packetsPath = manaplusPath + "net/eathena/packetsin.inc"
-eathenaPath = manaplusPath + "net/eathena/"
-
-collectServerPackets(srcPath)
-collectClientPackets(clientPacketsPath)
-collectManaPlusPackets(protocolPath + "in.inc")
-collectManaPlusPackets(protocolPath + "out.inc")
-#collectManaPlusSizes(packetsPath);
-processManaPlusCppFiles(eathenaPath);
-sortClientPackets()
-sortServerPackets()
-printPackets()