Exemplo n.º 1
0
        class OPCUAProtocol(asyncio.Protocol):

            """
            instanciated for every connection
            defined as internal class since it needs access
            to the internal server object
            FIXME: find another solution
            """

            iserver = self.iserver
            loop = self.loop
            logger = self.logger

            def connection_made(self, transport):
                self.peername = transport.get_extra_info('peername')
                self.logger.info('New connection from %s', self.peername)
                self.transport = transport
                self.processor = UAProcessor(self.iserver, self.transport)
                self.data = b""

            def connection_lost(self, ex):
                self.logger.info('Lost connection from %s, %s', self.peername, ex)
                self.transport.close()
                self.processor.close()

            def data_received(self, data):
                logger.debug("received %s bytes from socket", len(data))
                if self.data:
                    data = self.data + data
                    self.data = b""
                self._process_data(data)

            def _process_data(self, data):
                while True:
                    try:
                        buf = ua.utils.Buffer(data[:])
                        hdr = ua.Header.from_string(buf)
                        if len(buf) < hdr.body_size:
                            logger.warning("We did not receive enough data from server, waiting for more")
                            self.data = data
                            return
                        ret = self.processor.process(hdr, buf)
                        if not ret:
                            logger.warning("processor returned False, we close connection from %s", self.peername)
                            self.transport.close()
                            return
                        if len(data) <= hdr.packet_size:
                            return
                        data = data[hdr.packet_size:]
                    except ua.utils.NotEnoughData:
                        logger.warning("Not a complete packet in data from client, waiting for more data")
                        self.data = buf.data
                        break
                    except Exception:
                        logger.exception("Exception raised while parsing message from client, closing")
                        self.transport.close()
                        break
Exemplo n.º 2
0
 def handle(self):
     sock = ua.utils.SocketWrapper(self.request)
     processor = UAProcessor(self.server.internal_server, sock, self.client_address)
     try:
         while True:
             hdr = ua.Header.from_string(sock)
             body = sock.read(hdr.body_size)
             ret = processor.process(hdr, ua.utils.Buffer(body))
             if not ret:
                 break
     except ua.utils.SocketClosedException:
         logger.warning("Server has closed connection")
     except Exception:
         logger.exception("Exception raised while parsing message from client, closing")
Exemplo n.º 3
0
 def handle(self):
     sock = ua.utils.SocketWrapper(self.request)
     processor = UAProcessor(self.server.internal_server, sock,
                             self.client_address)
     try:
         while True:
             hdr = ua.Header.from_string(sock)
             body = sock.read(hdr.body_size)
             ret = processor.process(hdr, ua.utils.Buffer(body))
             if not ret:
                 break
     except ua.utils.SocketClosedException:
         logger.warning("Server has closed connection")
     except Exception:
         logger.exception(
             "Exception raised while parsing message from client, closing")
 def connection_made(self, transport):
     self.peername = transport.get_extra_info('peername')
     print('New connection from {}'.format(self.peername))
     self.transport = transport
     self.processor = UAProcessor(self.iserver, self.transport)
     self.data = b""
Exemplo n.º 5
0
 def connection_made(self, transport):
     self.peername = transport.get_extra_info('peername')
     print('New connection from {}'.format(self.peername))
     self.transport = transport
     self.processor = UAProcessor(self.iserver, self.transport)
     self.data = b""
Exemplo n.º 6
0
 def handle(self):
     processor = UAProcessor(self.server.internal_server, self.request, self.client_address)
     try:
         processor.loop()
     except ua.SocketClosedException as ex:
         logger.warning("Client has closed connection: %s", ex)
Exemplo n.º 7
0
 def connection_made(self, transport):
     self.peername = transport.get_extra_info('peername')
     self.logger.info('New connection from %s', self.peername)
     self.transport = transport
     self.processor = UAProcessor(self.iserver, self.transport)
     self.data = b""
 def connection_made(self, transport):
     self.peername = transport.get_extra_info('peername')
     self.logger.info('New connection from %s', self.peername)
     self.transport = transport
     self.processor = UAProcessor(self.iserver, self.transport)
     self.data = b""