forked from Hay1tsme/artemis
mucha: add DownloadState
This commit is contained in:
parent
09c4f8cda4
commit
85b73e634d
@ -4,6 +4,7 @@ from logging.handlers import TimedRotatingFileHandler
|
|||||||
from twisted.web import resource
|
from twisted.web import resource
|
||||||
from twisted.web.http import Request
|
from twisted.web.http import Request
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from Crypto.Cipher import Blowfish
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from core import CoreConfig
|
from core import CoreConfig
|
||||||
@ -56,18 +57,22 @@ class MuchaServlet:
|
|||||||
self.logger.error(
|
self.logger.error(
|
||||||
f"Error processing mucha request {request.content.getvalue()}"
|
f"Error processing mucha request {request.content.getvalue()}"
|
||||||
)
|
)
|
||||||
return b""
|
return b"RESULTS=000"
|
||||||
|
|
||||||
req = MuchaAuthRequest(req_dict)
|
req = MuchaAuthRequest(req_dict)
|
||||||
|
self.logger.info(f"Boardauth request from {client_ip} for {req.gameVer}")
|
||||||
self.logger.debug(f"Mucha request {vars(req)}")
|
self.logger.debug(f"Mucha request {vars(req)}")
|
||||||
self.logger.info(f"Boardauth request from {client_ip} for {req.gameVer}")
|
|
||||||
|
|
||||||
if req.gameCd not in self.mucha_registry:
|
if req.gameCd not in self.mucha_registry:
|
||||||
self.logger.warn(f"Unknown gameCd {req.gameCd}")
|
self.logger.warn(f"Unknown gameCd {req.gameCd}")
|
||||||
return b""
|
return b"RESULTS=000"
|
||||||
|
|
||||||
# TODO: Decrypt S/N
|
# TODO: Decrypt S/N
|
||||||
|
|
||||||
|
#cipher = Blowfish.new(req.sendDate.encode(), Blowfish.MODE_ECB)
|
||||||
|
#sn_decrypt = cipher.decrypt(bytes.fromhex(req.serialNum))
|
||||||
|
#self.logger.debug(f"Decrypt SN to {sn_decrypt.hex()}")
|
||||||
|
|
||||||
resp = MuchaAuthResponse(
|
resp = MuchaAuthResponse(
|
||||||
f"{self.config.mucha.hostname}{':' + str(self.config.allnet.port) if self.config.server.is_develop else ''}"
|
f"{self.config.mucha.hostname}{':' + str(self.config.allnet.port) if self.config.server.is_develop else ''}"
|
||||||
)
|
)
|
||||||
@ -84,22 +89,37 @@ class MuchaServlet:
|
|||||||
self.logger.error(
|
self.logger.error(
|
||||||
f"Error processing mucha request {request.content.getvalue()}"
|
f"Error processing mucha request {request.content.getvalue()}"
|
||||||
)
|
)
|
||||||
return b""
|
return b"RESULTS=000"
|
||||||
|
|
||||||
req = MuchaUpdateRequest(req_dict)
|
req = MuchaUpdateRequest(req_dict)
|
||||||
|
self.logger.info(f"Updatecheck request from {client_ip} for {req.gameVer}")
|
||||||
self.logger.debug(f"Mucha request {vars(req)}")
|
self.logger.debug(f"Mucha request {vars(req)}")
|
||||||
self.logger.info(f"Updatecheck request from {client_ip} for {req.gameVer}")
|
|
||||||
|
|
||||||
if req.gameCd not in self.mucha_registry:
|
if req.gameCd not in self.mucha_registry:
|
||||||
self.logger.warn(f"Unknown gameCd {req.gameCd}")
|
self.logger.warn(f"Unknown gameCd {req.gameCd}")
|
||||||
return b""
|
return b"RESULTS=000"
|
||||||
|
|
||||||
resp = MuchaUpdateResponseStub(req.gameVer)
|
resp = MuchaUpdateResponse(req.gameVer, f"{self.config.mucha.hostname}{':' + str(self.config.allnet.port) if self.config.server.is_develop else ''}")
|
||||||
|
|
||||||
self.logger.debug(f"Mucha response {vars(resp)}")
|
self.logger.debug(f"Mucha response {vars(resp)}")
|
||||||
|
|
||||||
return self.mucha_postprocess(vars(resp))
|
return self.mucha_postprocess(vars(resp))
|
||||||
|
|
||||||
|
def handle_dlstate(self, request: Request, _: Dict) -> bytes:
|
||||||
|
req_dict = self.mucha_preprocess(request.content.getvalue())
|
||||||
|
client_ip = Utils.get_ip_addr(request)
|
||||||
|
|
||||||
|
if req_dict is None:
|
||||||
|
self.logger.error(
|
||||||
|
f"Error processing mucha request {request.content.getvalue()}"
|
||||||
|
)
|
||||||
|
return b""
|
||||||
|
|
||||||
|
req = MuchaDownloadStateRequest(req_dict)
|
||||||
|
self.logger.info(f"DownloadState request from {client_ip} for {req.gameCd} -> {req.updateVer}")
|
||||||
|
self.logger.debug(f"request {vars(req)}")
|
||||||
|
return b"RESULTS=001"
|
||||||
|
|
||||||
def mucha_preprocess(self, data: bytes) -> Optional[Dict]:
|
def mucha_preprocess(self, data: bytes) -> Optional[Dict]:
|
||||||
try:
|
try:
|
||||||
ret: Dict[str, Any] = {}
|
ret: Dict[str, Any] = {}
|
||||||
@ -202,22 +222,57 @@ class MuchaUpdateRequest:
|
|||||||
|
|
||||||
class MuchaUpdateResponse:
|
class MuchaUpdateResponse:
|
||||||
def __init__(self, game_ver: str, mucha_url: str) -> None:
|
def __init__(self, game_ver: str, mucha_url: str) -> None:
|
||||||
self.RESULTS = "001"
|
self.RESULTS = "001"
|
||||||
|
self.EXE_VER = game_ver
|
||||||
|
|
||||||
self.UPDATE_VER_1 = game_ver
|
self.UPDATE_VER_1 = game_ver
|
||||||
self.UPDATE_URL_1 = f"https://{mucha_url}/updUrl1/"
|
self.UPDATE_URL_1 = f"http://{mucha_url}/updUrl1/"
|
||||||
self.UPDATE_SIZE_1 = "0"
|
self.UPDATE_SIZE_1 = "20"
|
||||||
self.UPDATE_CRC_1 = "0000000000000000"
|
|
||||||
self.CHECK_URL_1 = f"https://{mucha_url}/checkUrl/"
|
self.CHECK_CRC_1 = "0000000000000000"
|
||||||
self.EXE_VER_1 = game_ver
|
self.CHECK_URL_1 = f"http://{mucha_url}/checkUrl/"
|
||||||
|
self.CHECK_SIZE_1 = "20"
|
||||||
|
|
||||||
self.INFO_SIZE_1 = "0"
|
self.INFO_SIZE_1 = "0"
|
||||||
self.COM_SIZE_1 = "0"
|
self.COM_SIZE_1 = "0"
|
||||||
self.COM_TIME_1 = "0"
|
self.COM_TIME_1 = "0"
|
||||||
self.LAN_INFO_SIZE_1 = "0"
|
self.LAN_INFO_SIZE_1 = "0"
|
||||||
|
|
||||||
self.USER_ID = ""
|
self.USER_ID = ""
|
||||||
self.PASSWORD = ""
|
self.PASSWORD = ""
|
||||||
|
|
||||||
|
"""
|
||||||
|
RESULTS
|
||||||
|
EXE_VER
|
||||||
|
|
||||||
|
UPDATE_VER_%d
|
||||||
|
UPDATE_URL_%d
|
||||||
|
UPDATE_SIZE_%d
|
||||||
|
|
||||||
|
CHECK_CRC_%d
|
||||||
|
CHECK_URL_%d
|
||||||
|
CHECK_SIZE_%d
|
||||||
|
|
||||||
|
INFO_SIZE_1
|
||||||
|
COM_SIZE_1
|
||||||
|
COM_TIME_1
|
||||||
|
LAN_INFO_SIZE_1
|
||||||
|
|
||||||
|
USER_ID
|
||||||
|
PASSWORD
|
||||||
|
"""
|
||||||
class MuchaUpdateResponseStub:
|
class MuchaUpdateResponseStub:
|
||||||
def __init__(self, game_ver: str) -> None:
|
def __init__(self, game_ver: str) -> None:
|
||||||
self.RESULTS = "001"
|
self.RESULTS = "001"
|
||||||
self.UPDATE_VER_1 = game_ver
|
self.UPDATE_VER_1 = game_ver
|
||||||
|
|
||||||
|
class MuchaDownloadStateRequest:
|
||||||
|
def __init__(self, request: Dict) -> None:
|
||||||
|
self.gameCd = request.get("gameCd", "")
|
||||||
|
self.updateVer = request.get("updateVer", "")
|
||||||
|
self.serialNum = request.get("serialNum", "")
|
||||||
|
self.fileSize = request.get("fileSize", "")
|
||||||
|
self.compFileSize = request.get("compFileSize", "")
|
||||||
|
self.boardId = request.get("boardId", "")
|
||||||
|
self.placeId = request.get("placeId", "")
|
||||||
|
self.storeRouterIp = request.get("storeRouterIp", "")
|
||||||
|
7
index.py
7
index.py
@ -113,6 +113,13 @@ class HttpDispatcher(resource.Resource):
|
|||||||
action="handle_updatecheck",
|
action="handle_updatecheck",
|
||||||
conditions=dict(method=["POST"]),
|
conditions=dict(method=["POST"]),
|
||||||
)
|
)
|
||||||
|
self.map_post.connect(
|
||||||
|
"mucha_dlstate",
|
||||||
|
"/mucha/downloadstate.do",
|
||||||
|
controller="mucha",
|
||||||
|
action="handle_dlstate",
|
||||||
|
conditions=dict(method=["POST"]),
|
||||||
|
)
|
||||||
|
|
||||||
self.map_get.connect(
|
self.map_get.connect(
|
||||||
"title_get",
|
"title_get",
|
||||||
|
Loading…
Reference in New Issue
Block a user