Last active
May 19, 2017 21:46
-
-
Save EdenShapiro/45207ccd957c2cc1fe21f6d15f0e8394 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def logon(self): | |
p = proto.LogonRequest() | |
p.program = "WTCG" | |
p.platform = "Win" | |
p.locale = "enUS" | |
# p.email = None | |
p.version = "12051" | |
p.application_version = 1 | |
p.public_computer = False | |
# p.sso_id = None | |
p.disconnect_on_cookie_fail = False | |
p.allow_logon_queue_notifications = True | |
p.web_client_verification = True | |
# p.cached_web_credentials = None | |
p.user_agent = user_agent | |
self.send_request(self.id, 1, p, None) | |
def connect(self): | |
p = proto.ConnectRequest() | |
for imported_service in self._services_to_import: | |
p.bind_request.imported_service_hash.append(imported_service.hash) | |
for i, exported_service in enumerate([self] + self._services_to_export): | |
logger.info("Exporting service id=%d name=%s" % (i, exported_service.name)) | |
exported_service.id = i | |
p.bind_request.exported_service.add( | |
hash=exported_service.hash, | |
id=exported_service.id | |
) | |
self.exported_services[i] = exported_service | |
self.send_request(self.id, 1, p, self.on_connect, decode_response_as=proto.ConnectResponse) | |
def send_request(self, service_id, method_id, body, callback, object_id=0, decode_response_as=None): | |
header = Header() | |
header.service_id = service_id | |
header.method_id = method_id | |
if object_id: | |
header.object_id = object_id | |
message = body.SerializeToString() | |
header.size = len(message) | |
if not callback: | |
callback = lambda x: None | |
token = len(self.waiting_for_response) | |
header.token = token | |
self.waiting_for_response[token] = (callback, decode_response_as) | |
logger.info("Sending request for %d.%d, token=%d" % (service_id, method_id, token)) | |
logger.debug("Sending request. Header: {%s}" % header) | |
header_buf = header.SerializeToString() | |
self.connection.send(struct.pack(">H", len(header_buf))) | |
self.connection.send(header_buf) | |
self.connection.send(message) | |
def on_connect(self, response): | |
logger.debug("Connection response {%s}" % response) | |
assert response.bind_result == 0 | |
for service_id, service in zip(response.bind_response.imported_service_id, self._services_to_import): | |
logger.info("Importing service id=%d name=%s" % (service_id, service.name)) | |
service.id = service_id | |
self.imported_services[service_id] = service | |
self.logon() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment