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
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 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""
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)
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""