def login(self): login = self.send_packet(["login.hashed"]) passwordHash = Frostbite.generatePasswordHash(login[1].decode("hex"), self.serverPassword) passwordHashHexString = passwordHash.encode("hex").upper() response = self.send_packet(["login.hashed", passwordHashHexString]) if response[0] != "OK": self.log.error('[{}:{}] Wrong RCON password. Exiting.'.format(self.serverIp, self.serverPort)) sys.exit() elif response[0] == "OK": self.log.info('[{}:{}] is now logged on'.format(self.serverIp, self.serverPort)) else: self.log.warn('Something went wrong, response: {}'.format(response)) return response
def receive_packet(self, socket=None, receiveBuffer=""): while True: #Fills the buffer until it's full or complete while not Frostbite.containsCompletePacket(receiveBuffer): receiveBuffer += self.socket.recv(4096) packetSize = Frostbite.DecodeInt32(receiveBuffer[4:8]) packet = receiveBuffer[0:packetSize] receiveBuffer = receiveBuffer[packetSize:len(receiveBuffer)] # This code needs to be cleared out a bit, so it's more obvious # when a response is received or expected if socket == None: #waiting for events [isFromServer, isResponse, sequence, words] = Frostbite.DecodePacket(packet) return words elif socket: #waiting for a response return [packet, receiveBuffer] else: self.log.error('Unable to handle received packet!') return None