Ejemplo n.º 1
0
 def process_incoming(self):
     while self.keep_alive:
         reader = self.incoming_pending.get(block=True, timeout=None)
         if reader:  # Can be None if we shutdown the thread.
             if reader.opcode:
                 handler, found = Definitions.get_handler_from_packet(
                     self, reader.opcode)
                 if handler:
                     res = handler(self, self.request, reader)
                     if res == 0:
                         Logger.debug(
                             f'[{self.client_address[0]}] Handling {OpCode(reader.opcode).name}'
                         )
                     elif res == 1:
                         Logger.debug(
                             f'[{self.client_address[0]}] Ignoring {OpCode(reader.opcode).name}'
                         )
                     elif res < 0:
                         self.disconnect()
                         break
                 elif not found:
                     Logger.warning(
                         f'[{self.client_address[0]}] Received unknown data: {reader.data}'
                     )
         else:
             self.disconnect()
Ejemplo n.º 2
0
 def receive(self, sck):
     try:
         data = sck.recv(1024)
         reader = PacketReader(data)
         if reader.opcode:
             handler = Definitions.get_handler_from_packet(reader.opcode)
             if handler:
                 Logger.debug('Handling %s' % OpCode(reader.opcode))
                 if handler(self, sck, reader) != 0:
                     return -1
     except OSError:
         Logger.warning('Tried to interact with a closed socket.')
         return -1
Ejemplo n.º 3
0
 def auth_challenge(self, sck):
     data = pack('<6B', 0, 0, 0, 0, 0, 0)
     try:
         sck.settimeout(10)  # Set a 10 second timeout.
         sck.sendall(PacketWriter.get_packet(OpCode.SMSG_AUTH_CHALLENGE, data))  # Request challenge
         reader = self.receive_client_message(sck)
         if reader and reader.opcode == OpCode.CMSG_AUTH_SESSION:
             handler, found = Definitions.get_handler_from_packet(self, reader.opcode)
             if handler:
                 res = handler(self, sck, reader)
                 if res == 0:
                     return True
         return False
     except socket.timeout:  # Can't check this inside Auth handler.
         data = pack('<B', AuthCode.AUTH_SESSION_EXPIRED)
         sck.request.sendall(PacketWriter.get_packet(OpCode.SMSG_AUTH_RESPONSE, data))
         return False
Ejemplo n.º 4
0
 def receive(self, sck):
     try:
         data = sck.recv(2048)
         if len(data) > 0:
             reader = PacketReader(data)
             if reader.opcode:
                 handler, res = Definitions.get_handler_from_packet(self, reader.opcode)
                 if handler:
                     Logger.debug('[%s] Handling %s' % (self.client_address[0], OpCode(reader.opcode)))
                     if handler(self, sck, reader) != 0:
                         return -1
                 elif res == -1:
                     Logger.warning('[%s] Received unknown data: %s' % (self.client_address[0], data))
         else:
             return -1
     except OSError:
         self.disconnect()
         return -1