コード例 #1
0
ファイル: core.py プロジェクト: PeterSurda/PyBitmessage
 def test_version(self):
     """check encoding/decoding of the version message"""
     # with single stream
     msg = protocol.assembleVersionMessage('127.0.0.1', 8444, [1])
     decoded = self._decode_msg(msg, "IQQiiQlsLv")
     peer, _, ua, streams = self._decode_msg(msg, "IQQiiQlsLv")[4:]
     self.assertEqual(peer, Node(3, '127.0.0.1', 8444))
     self.assertEqual(ua, '/PyBitmessage:' + softwareVersion + '/')
     self.assertEqual(streams, [1])
     # with multiple streams
     msg = protocol.assembleVersionMessage('127.0.0.1', 8444, [1, 2, 3])
     decoded = self._decode_msg(msg, "IQQiiQlslv")
     peer, _, ua = decoded[4:7]
     streams = decoded[7:]
     self.assertEqual(streams, [1, 2, 3])
コード例 #2
0
 def state_proxy_handshake_done(self):
     Socks4aConnection.state_proxy_handshake_done(self)
     self.nodeid = randomBytes(8)
     self.append_write_buf(protocol.assembleVersionMessage(self.destination.host, self.destination.port, \
             network.connectionpool.BMConnectionPool().streams, False, nodeid=self.nodeid))
     self.set_state("bm_header", expectBytes=protocol.Header.size)
     return True
コード例 #3
0
 def sendversion(self):
     logger.debug('Sending version message')
     self.sendDataThreadQueue.put((0, 'sendRawData',
                                   protocol.assembleVersionMessage(
                                       self.peer.host, self.peer.port,
                                       state.streamsInWhichIAmParticipating,
                                       not self.initiatedConnection)))
コード例 #4
0
ファイル: bmproto.py プロジェクト: Zyx-A/PyBitmessage
 def bm_command_version(self):
     self.remoteProtocolVersion, self.services, self.timestamp, self.sockNode, self.peerNode, self.nonce, \
         self.userAgent, self.streams = self.decode_payload_content("IQQiiQlsLv")
     self.nonce = struct.pack('>Q', self.nonce)
     self.timeOffset = self.timestamp - int(time.time())
     logger.debug("remoteProtocolVersion: %i", self.remoteProtocolVersion)
     logger.debug("services: 0x%08X", self.services)
     logger.debug("time offset: %i", self.timestamp - int(time.time()))
     logger.debug("my external IP: %s", self.sockNode.host)
     logger.debug("remote node incoming address: %s:%i", self.destination.host, self.peerNode.port)
     logger.debug("user agent: %s", self.userAgent)
     logger.debug("streams: [%s]", ",".join(map(str,self.streams)))
     if not self.peerValidityChecks():
         # TODO ABORT
         return True
     #shared.connectedHostsList[self.destination] = self.streams[0]
     self.append_write_buf(protocol.CreatePacket('verack'))
     self.verackSent = True
     if not self.isOutbound:
         self.append_write_buf(protocol.assembleVersionMessage(self.destination.host, self.destination.port, \
                 network.connectionpool.BMConnectionPool().streams, True, nodeid=self.nodeid))
         #print "%s:%i: Sending version"  % (self.destination.host, self.destination.port)
     if ((self.services & protocol.NODE_SSL == protocol.NODE_SSL) and
             protocol.haveSSL(not self.isOutbound)):
         self.isSSL = True
     if self.verackReceived:
         if self.isSSL:
             self.set_state("tls_init", length=self.payloadLength, expectBytes=0)
             return False
         self.set_state("connection_fully_established", length=self.payloadLength, expectBytes=0)
         return False
     return True
コード例 #5
0
ファイル: tcp.py プロジェクト: ViperGeek/PyBitmessage
 def state_proxy_handshake_done(self):
     Socks4aConnection.state_proxy_handshake_done(self)
     self.nodeid = randomBytes(8)
     self.append_write_buf(protocol.assembleVersionMessage(self.destination.host, self.destination.port, \
             network.connectionpool.BMConnectionPool().streams, False, nodeid=self.nodeid))
     self.set_state("bm_header", expectBytes=protocol.Header.size)
     return True
コード例 #6
0
 def bm_command_version(self):
     self.remoteProtocolVersion, self.services, self.timestamp, self.sockNode, self.peerNode, self.nonce, \
         self.userAgent, self.streams = self.decode_payload_content("IQQiiQlsLv")
     self.nonce = struct.pack('>Q', self.nonce)
     self.timeOffset = self.timestamp - int(time.time())
     logger.debug("remoteProtocolVersion: %i", self.remoteProtocolVersion)
     logger.debug("services: 0x%08X", self.services)
     logger.debug("time offset: %i", self.timestamp - int(time.time()))
     logger.debug("my external IP: %s", self.sockNode.host)
     logger.debug("remote node incoming address: %s:%i", self.destination.host, self.peerNode.port)
     logger.debug("user agent: %s", self.userAgent)
     logger.debug("streams: [%s]", ",".join(map(str,self.streams)))
     if not self.peerValidityChecks():
         # TODO ABORT
         return True
     #shared.connectedHostsList[self.destination] = self.streams[0]
     self.append_write_buf(protocol.CreatePacket('verack'))
     self.verackSent = True
     if not self.isOutbound:
         self.append_write_buf(protocol.assembleVersionMessage(self.destination.host, self.destination.port, \
                 network.connectionpool.BMConnectionPool().streams, True, nodeid=self.nodeid))
         #print "%s:%i: Sending version"  % (self.destination.host, self.destination.port)
     if ((self.services & protocol.NODE_SSL == protocol.NODE_SSL) and
             protocol.haveSSL(not self.isOutbound)):
         self.isSSL = True
     if self.verackReceived:
         if self.isSSL:
             self.set_state("tls_init", length=self.payloadLength, expectBytes=0)
             return False
         self.set_state("connection_fully_established", length=self.payloadLength, expectBytes=0)
         return False
     return True
コード例 #7
0
 def handle_connect(self):
     try:
         AdvancedDispatcher.handle_connect(self)
     except socket.error as e:
         if e.errno in asyncore._DISCONNECTED:
             logger.debug("%s:%i: Connection failed: %s" % (self.destination.host, self.destination.port, str(e)))
             return
     self.nodeid = randomBytes(8)
     self.append_write_buf(protocol.assembleVersionMessage(self.destination.host, self.destination.port, \
             network.connectionpool.BMConnectionPool().streams, False, nodeid=self.nodeid))
     #print "%s:%i: Sending version"  % (self.destination.host, self.destination.port)
     self.connectedAt = time.time()
     receiveDataQueue.put(self.destination)
コード例 #8
0
    def sendVersionMessage(self):
        datatosend = protocol.assembleVersionMessage(
            self.peer.host, self.peer.port, state.streamsInWhichIAmParticipating, not self.initiatedConnection)  # the IP and port of the remote host, and my streamNumber.

        logger.debug('Sending version packet: ' + repr(datatosend))

        try:
            self.sendBytes(datatosend)
        except Exception as err:
            # if not 'Bad file descriptor' in err:
            logger.error('sock.sendall error: %s\n' % err)
            
        self.versionSent = 1
コード例 #9
0
 def state_proxy_handshake_done(self):
     """State when SOCKS4a connection succeeds, we need to send a Bitmessage handshake to peer."""
     Socks4aConnection.state_proxy_handshake_done(self)
     self.nodeid = randomBytes(8)
     self.append_write_buf(
         protocol.assembleVersionMessage(
             self.destination.host,
             self.destination.port,
             network.connectionpool.BMConnectionPool().streams,
             False,
             nodeid=self.nodeid))
     self.set_state("bm_header", expectBytes=protocol.Header.size)
     return True
コード例 #10
0
    def sendVersionMessage(self):
        datatosend = protocol.assembleVersionMessage(
            self.peer.host, self.peer.port,
            state.streamsInWhichIAmParticipating, not self.initiatedConnection
        )  # the IP and port of the remote host, and my streamNumber.

        logger.debug('Sending version packet: ' + repr(datatosend))

        try:
            self.sendBytes(datatosend)
        except Exception as err:
            # if not 'Bad file descriptor' in err:
            logger.error('sock.sendall error: %s\n' % err)
コード例 #11
0
ファイル: tcp.py プロジェクト: ViperGeek/PyBitmessage
 def handle_connect(self):
     try:
         AdvancedDispatcher.handle_connect(self)
     except socket.error as e:
         if e.errno in asyncore._DISCONNECTED:
             logger.debug("%s:%i: Connection failed: %s" % (self.destination.host, self.destination.port, str(e)))
             return
     self.nodeid = randomBytes(8)
     self.append_write_buf(protocol.assembleVersionMessage(self.destination.host, self.destination.port, \
             network.connectionpool.BMConnectionPool().streams, False, nodeid=self.nodeid))
     #print "%s:%i: Sending version"  % (self.destination.host, self.destination.port)
     self.connectedAt = time.time()
     receiveDataQueue.put(self.destination)
コード例 #12
0
 def bm_command_version(self):
     """
     Incoming version.
     Parse and log, remember important things, like streams, bitfields, etc.
     """
     decoded = self.decode_payload_content("IQQiiQlslv")
     (self.remoteProtocolVersion, self.services, self.timestamp,
      self.sockNode, self.peerNode, self.nonce,
      self.userAgent) = decoded[:7]
     self.streams = decoded[7:]
     self.nonce = struct.pack('>Q', self.nonce)
     self.timeOffset = self.timestamp - int(time.time())
     logger.debug('remoteProtocolVersion: %i', self.remoteProtocolVersion)
     logger.debug('services: 0x%08X', self.services)
     logger.debug('time offset: %i', self.timeOffset)
     logger.debug('my external IP: %s', self.sockNode.host)
     logger.debug('remote node incoming address: %s:%i',
                  self.destination.host, self.peerNode.port)
     logger.debug('user agent: %s', self.userAgent)
     logger.debug('streams: [%s]', ','.join(map(str, self.streams)))
     if not self.peerValidityChecks():
         # ABORT afterwards
         return True
     self.append_write_buf(protocol.CreatePacket('verack'))
     self.verackSent = True
     if not self.isOutbound:
         self.append_write_buf(
             protocol.assembleVersionMessage(
                 self.destination.host,
                 self.destination.port,
                 connectionpool.BMConnectionPool().streams,
                 True,
                 nodeid=self.nodeid))
         logger.debug('%(host)s:%(port)i sending version',
                      self.destination._asdict())
     if ((self.services & protocol.NODE_SSL == protocol.NODE_SSL)
             and protocol.haveSSL(not self.isOutbound)):
         self.isSSL = True
     if not self.verackReceived:
         return True
     self.set_state(
         "tls_init" if self.isSSL else "connection_fully_established",
         length=self.payloadLength,
         expectBytes=0)
     return False
コード例 #13
0
 def handle_connect(self):
     """Callback for TCP connection being established."""
     try:
         AdvancedDispatcher.handle_connect(self)
     except socket.error as e:
         # pylint: disable=protected-access
         if e.errno in asyncore._DISCONNECTED:
             logger.debug(
                 '%s:%i: Connection failed: %s',
                 self.destination.host, self.destination.port, e)
             return
     self.nodeid = randomBytes(8)
     self.append_write_buf(
         protocol.assembleVersionMessage(
             self.destination.host, self.destination.port,
             connectionpool.BMConnectionPool().streams,
             False, nodeid=self.nodeid))
     self.connectedAt = time.time()
     receiveDataQueue.put(self.destination)
コード例 #14
0
 def sendversion(self):
     logger.debug('Sending version message')
     self.sendDataThreadQueue.put((0, 'sendRawData', protocol.assembleVersionMessage(
             self.peer.host, self.peer.port, state.streamsInWhichIAmParticipating, not self.initiatedConnection)))