Beispiel #1
0
    def connect(self, addr, port, password):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True)

        # try to connect to server
        try:
            # Connect to server and send data
            sock.connect((addr, port))

            buf = BufferStruct(opcode=100)

            # create challenge
            rand = random.randint(1, 254)
            m = hashlib.md5()
            m.update(password.encode('utf-16'))
            m.update(str(rand).encode('utf-8'))

            # send login challenge
            buf.push_null_str8(m.hexdigest())
            buf.push_uint8(rand)

            # add protocol version
            buf.push_len_str8(PROTOCOL_VERSION)
            sock.send(buf.buffer)

            # Receive data from the server
            msg = sock.recv(1024)
            if msg is None or len(msg) == 0:
                msg = str()

            sid = None

            buf = BufferStruct(msg)
            while not buf.empty():
                opcode = buf.pop_uint8()

                if opcode == 200:
                    print("Connected to tagar server: %s:%d" % (addr, port))
                    sid = buf.pop_len_str8()
                    login_ok = True

                if opcode == 201:
                    print("[Tagar Server]: %s" % (buf.pop_len_str16(),))

            if not sid:
                print("Connection to team server rejected!")
                sock.close()
                return

            self.session = Session(sid, sock)
            self.player = Player(self.session)
            self.force_player_update = True

        except socket.error:
            print("Could not connect to tagar server: %s:%d" % (addr, port))