Skip to content

Instantly share code, notes, and snippets.

@EdenShapiro
Last active May 19, 2017 21:46
Show Gist options
  • Save EdenShapiro/45207ccd957c2cc1fe21f6d15f0e8394 to your computer and use it in GitHub Desktop.
Save EdenShapiro/45207ccd957c2cc1fe21f6d15f0e8394 to your computer and use it in GitHub Desktop.
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