Пример #1
0
 def connection_made(self, transport: asyncio.BaseTransport) -> None:
     """Called when a connection is established with the auto-trader."""
     sock = transport.get_extra_info("socket")
     peername = transport.get_extra_info("peername")
     if sock is not None:
         self.file_number = sock.fileno()
     self.logger.info("fd=%d accepted a new connection: peer=%s:%d",
                      self.file_number, *(peername or ("unknown", 0)))
     self.transport = transport
Пример #2
0
 def connection_made(self, transport: asyncio.BaseTransport) -> None:
     """Just logging for now."""
     self.transport = transport
     log.debug("connected")
     sock = transport.get_extra_info("socket")
     if self.keepalive is not None and socket is not None:
         log.debug(
             "applying TCP KEEPALIVE settings: IDLE={}/INTVL={}/CNT={}".
             format(
                 self.keepalive,
                 DEFAULT_TCP_KEEPALIVE_INTERVAL,
                 DEFAULT_TCP_KEEPALIVE_COUNT,
             ))
         if hasattr(socket, "SO_KEEPALIVE"):
             sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
         if hasattr(socket, "TCP_KEEPIDLE"):
             sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE,
                             self.keepalive)
         if hasattr(socket, "TCP_KEEPINTVL"):
             sock.setsockopt(
                 socket.IPPROTO_TCP,
                 socket.TCP_KEEPINTVL,
                 DEFAULT_TCP_KEEPALIVE_INTERVAL,
             )
         if hasattr(socket, "TCP_KEEPCNT"):
             sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT,
                             DEFAULT_TCP_KEEPALIVE_COUNT)
Пример #3
0
        def connection_made(self, peerTransport: asyncio.BaseTransport):
            self.peerTransport = peerTransport
            peername = peerTransport.get_extra_info('peername')
            sockname = peerTransport.get_extra_info('sockname')
            peerAddress = peername[0] + ':' + str(peername[1])
            self.lport = str(sockname[1])
            listenAddress = sockname[0] + ':' + self.lport
            self.peerAddress = peerAddress
            self.listenAddress = listenAddress

            # Connected callback
            def cbConnected(future: asyncio.Future):
                # Handle exception
                exc = future.exception()
                if exc is None:
                    print(peerAddress, 'connected to', listenAddress)
                else:
                    print("Error: Redirecting connection from " + peerAddress +
                          ' to ' + listenAddress + " was failed!",
                          file=sys.stderr)
                    # Close client connection
                    peerTransport.close()

            # Create connection to redirector server
            ctask = asyncio.ensure_future(
                Client.loop.create_connection(
                    lambda: Client.RedirectorClient(self),
                    Client.redirectorServerHost, Client.redirectorServerPort))
            ctask.add_done_callback(cbConnected)
Пример #4
0
    def connection_made(self, transport: BaseTransport) -> None:
        sock = transport.get_extra_info('socket')
        if sock is not None:
            _set_nodelay(sock)

        h2_conn = H2Connection(config=self.h2_config)
        h2_conn.initiate_connection()

        initial = h2_conn.local_settings.initial_window_size
        conn_delta = self.config.http2_connection_window_size - initial
        stream_delta = self.config.http2_stream_window_size - initial
        if conn_delta:
            h2_conn.increment_flow_control_window(conn_delta)
        if stream_delta:
            h2_conn.update_settings({
                SettingCodes.INITIAL_WINDOW_SIZE:
                self.config.http2_stream_window_size,
            })

        self.connection = Connection(
            h2_conn,
            cast(Transport, transport),
            config=self.config,
        )
        self.connection.flush()
        self.connection.initialize()

        self.processor = EventsProcessor(self.handler, self.connection)
Пример #5
0
 def connection_made(self, transport: asyncio.BaseTransport) -> None:
     """ React to a new connection being made """
     self.remote_addr = transport.get_extra_info("peername")
     self.transport = transport
     self.buf = bytearray()
     logger.debug("SBSProtocol connected to {}".format(self.remote_addr))
     self.wait_connected.set_result(None)
Пример #6
0
    def connection_made(self, transport: asyncio.BaseTransport) -> None:
        ssl_object = transport.get_extra_info('ssl_object')
        if ssl_object is not None:
            self._ssl_enabled = True
            protocol = ssl_object.selected_alpn_protocol()
        else:
            protocol = 'http/1.1'

        if protocol == 'h2':
            self._server = H2Server(
                self.app,
                self.loop,
                transport,
                self.logger,
                self.access_log_format,
                self.timeout,
            )
        else:
            self._server = H11Server(
                self.app,
                self.loop,
                transport,
                self.logger,
                self.access_log_format,
                self.timeout,
                max_incomplete_size=self.h11_max_incomplete_size,
            )
Пример #7
0
 def connection_made(self, transport: asyncio.BaseTransport) -> None:
     """Capture the new transport and set the connected event."""
     # NB - this will return a 4-part tuple in some cases
     server, port = transport.get_extra_info('peername')[:2]
     self.logger.info('connected to statsd %s:%s', server, port)
     self.transport = transport
     self.transport.set_protocol(self)
     self.connected.set()
Пример #8
0
 def connection_made(self, transport: asyncio.BaseTransport) -> None:
     """Called when the datagram endpoint is created."""
     sock: socket.socket = transport.get_extra_info("socket")
     if sock is not None:
         self.__file_number = sock.fileno()
     self.__logger.info("fd=%d information channel established",
                        self.__file_number)
     self.__transport = transport
Пример #9
0
def get_client_ip(transport: asyncio.BaseTransport) -> Tuple[str, None]:
    """ Helper function to return the IP of the client connecting to us.
    Returns None on error.
    """
    peername = transport.get_extra_info("peername")
    if peername:
        return peername[0]
    return None
Пример #10
0
 def data_received(self, transport: asyncio.BaseTransport,
                   data: bytes) -> None:
     self.peername = transport.get_extra_info('peername')
     for m in self.reader.data_received(data):
         try:
             f = getattr(self, '_m_{}'.format(m[0].lower()))
             f(*m[1:])
         except Exception as ex:
             self.logger.error(ex)
Пример #11
0
 def connection_made(self, transport: asyncio.BaseTransport) -> None:
     """Called twice, when the execution connection and the information channel are established."""
     if transport.get_extra_info("peername") is not None:
         Connection.connection_made(self, transport)
         self.send_message(MessageType.LOGIN,
                           LOGIN_MESSAGE.pack(self.team_name, self.secret),
                           LOGIN_MESSAGE_SIZE)
     else:
         Subscription.connection_made(self, transport)
    def connection_made(self, transport: BaseTransport) -> None:
        self.transport = typing.cast(Transport, transport)

        sock = transport.get_extra_info("socket")
        self.file_no = sock.fileno()
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

        if self._node.opts.enable_tcp_quickack:
            self.enable_tcp_quickack()

        if self.direction == NetworkDirection.INBOUND:
            self.endpoint = IpEndpoint(*transport.get_extra_info("peername"))
            logger.debug("[{}] - accepted connection.", self)
        self._node.on_connection_added(self)
        self.state = SocketConnectionStates.INITIALIZED
        self.can_send = True
        self.send()
        logger.debug("[{}] - connection established successfully.", self)
Пример #13
0
    def connection_made(self, transport: asyncio.BaseTransport) -> None:
        """Accept an incoming TCP connection.

        Args:
            transport: Passed in asyncio.Transport
        """
        peername = transport.get_extra_info('peername')
        logger.debug(f"Connection made with: {peername}")
        self.transport = cast(asyncio.Transport, transport)
Пример #14
0
    def connection_made(self, transport: asyncio.BaseTransport) -> None:
        self.transport = cast(asyncio.Transport, transport)
        self._over_ssl = transport.get_extra_info("sslcontext") is not None
        self._response_waiter = self._loop.create_future()
        self._command_lock = asyncio.Lock(loop=self._loop)

        if self._connection_lost_callback is not None:
            self._connection_lost_waiter = self._loop.create_future()
            self._connection_lost_waiter.add_done_callback(
                self._connection_lost_callback)
Пример #15
0
	def data_received(self, transport: asyncio.BaseTransport, data: bytes) -> None:
		self.peername = transport.get_extra_info('peername')
		for y in self.decoder.data_received(data):
			try:
				# check version and vendorId
				if y[1] > 16 or y[2] not in (0, 100):
					return
				f = getattr(self, '_y_{}'.format(binascii.hexlify(struct.pack('!H', y[0])).decode()))
				f(*y[1:])
			except Exception as ex:
				self.logger.error(ex)
Пример #16
0
    def connection_made(self, transport: asyncio.BaseTransport) -> None:
        ssl_object = transport.get_extra_info('ssl_object')
        if ssl_object is not None:
            protocol = ssl_object.selected_alpn_protocol()
        else:
            protocol = 'http/1.1'

        if protocol == 'h2':
            self._http_server = H2Server(self.app, self.loop, transport)
        else:
            self._http_server = H11Server(self.app, self.loop, transport)
Пример #17
0
    def connection_made(self, transport: asyncio.BaseTransport) -> None:
        ssl_object = transport.get_extra_info("ssl_object")
        if ssl_object is not None:
            self._ssl_enabled = True
            protocol = ssl_object.selected_alpn_protocol()
        else:
            protocol = "http/1.1"

        if protocol == "h2":
            self._server = H2Server(self.app, self.loop, self.config, transport)
        else:
            self._server = H11Server(self.app, self.loop, self.config, transport)
Пример #18
0
    def connection_made(self, transport: BaseTransport) -> None:
        sock = transport.get_extra_info('socket')
        if sock is not None:
            _set_nodelay(sock)

        h2_conn = H2Connection(config=self.config)
        h2_conn.initiate_connection()

        self.connection = Connection(h2_conn,
                                     cast(Transport, transport),
                                     loop=self.loop)
        self.connection.flush()

        self.processor = EventsProcessor(self.handler, self.connection)
Пример #19
0
    def connection_made(self, transport: asyncio.BaseTransport) -> None:
        self.request_start = clock_ns()
        print('connection made')
        self.connections.add(self)

        self.transport = transport
        self.flow = FlowControl(transport)

        sn_info = pn_info = None # sockname, peername

        t_sock = transport.get_extra_info('socket')
        if t_sock is not None:
            t_sock: socket.socket
            # INET: (host, port)
            # INET6: ???
            # UNIX: path

            sn_info = t_sock.getsockname()
            if not sn_info:
                sn_info = transport.get_extra_info('sockname')

            if sn_info:
                self.server = sn_info

            pn_info = t_sock.getpeername()
            if not pn_info:
                pn_info = transport.get_extra_info('peername')

            if pn_info:
                self.client = pn_info
        else:
            print('couldnt get socket from transport')
            breakpoint()

        is_ssl = bool(transport.get_extra_info('sslcontext'))
        self.scheme = 'https' if is_ssl else 'http'
Пример #20
0
    def connection_made(self, transport: asyncio.BaseTransport) -> None:
        """
        Modified ``connection_made`` that supports upgrading our transport in
        place using STARTTLS.

        The only difference here from StreamReaderProtocol's version is we
        are setting the _transport directly on the StreamReader, rather than
        calling set_transport (which will raise an AssertionError on upgrade).
        """
        self._stream_reader._transport = transport  # type: ignore
        self._over_ssl = transport.get_extra_info('sslcontext') is not None
        if self._client_connected_cb is not None:  # type: ignore
            self._stream_writer = asyncio.StreamWriter(
                transport, self, self._stream_reader, self._loop)
            res = self._client_connected_cb(  # type: ignore
                self._stream_reader, self._stream_writer)
            if asyncio.iscoroutine(res):
                self._loop.create_task(res)
Пример #21
0
    def connection_made(self, transport: asyncio.BaseTransport) -> None:
        """
        Modified ``connection_made`` that supports upgrading our transport in
        place using STARTTLS.

        We set the _transport directly on the StreamReader, rather than calling
        set_transport (which will raise an AssertionError on upgrade).
        """
        if self._stream_reader is None:
            raise SMTPServerDisconnected("Client not connected")

        self._stream_reader._transport = transport  # type: ignore
        self._over_ssl = transport.get_extra_info("sslcontext") is not None
        self._stream_writer = asyncio.StreamWriter(transport, self,
                                                   self._stream_reader,
                                                   self._loop)
        self._client_connected_cb(  # type: ignore
            self._stream_reader, self._stream_writer)
Пример #22
0
    def connection_made(self, transport: BaseTransport) -> None:
        transport = typing.cast(Transport, transport)

        if self._endpoint is None:
            self._endpoint = IpEndpoint(*transport.get_extra_info("peername"))

        endpoint = self._endpoint
        assert endpoint is not None

        if self._is_server:
            try:
                cert = self.get_peer_certificate(transport)
                key = extensions_factory.get_node_id(cert)
                if key is None:
                    key = endpoint.ip_address
            except TypeError:
                key = endpoint.ip_address
            attempts = self._node.report_connection_attempt(key)
            if attempts >= constants.MAX_HIGH_RECONNECT_ATTEMPTS_ALLOWED:
                logger.debug(
                    "Rejecting connection attempt from {} / {}. Too many attempts: {}",
                    self._endpoint, key, attempts)
                # transport.abort()
                # return

        if sys.version.startswith("3.6."):
            protocol_cls = SocketConnectionProtocolPy36
        else:
            from bxcommon.network.socket_connection_protocol import SocketConnectionProtocol
            protocol_cls = SocketConnectionProtocol

        if self._is_server:
            endpoint = None
        delegate_protocol = protocol_cls(self._node, endpoint, self.is_ssl)
        delegate_protocol.connection_made(transport)
        self._delegate_protocol = delegate_protocol
Пример #23
0
 def connection_made(self, transport: asyncio.BaseTransport) -> None:
     super().connection_made(transport)
     sock = transport.get_extra_info('socket')
     sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
Пример #24
0
 def connection_made(self, transport: asyncio.BaseTransport) -> None:
     self.transport = transport
     self.peer = transport.get_extra_info(
         "peername")  # type: Tuple[str, int]
     logger.debug(f"{self.__class__.__name__} connected to {self.peer}")
     self.server.register_protocol(self.peer, self)