MCPcopy
hub / github.com/brightio/penelope / handle

Method handle

penelope.py:4096–4155  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

4094
4095 class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
4096 def handle(self):
4097
4098 self.request.setblocking(False)
4099 stdin_stream = session.new_streamID
4100 stdout_stream = session.new_streamID
4101 stderr_stream = session.new_streamID
4102
4103 if not all([stdin_stream, stdout_stream, stderr_stream]):
4104 return
4105
4106 code = rf"""
4107 import socket
4108 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
4109 frlist = [stdin_stream]
4110 connected = False
4111 while True:
4112 readables, _, _ = select(frlist, [], [])
4113
4114 for readable in readables:
4115 if readable is stdin_stream:
4116 data = stdin_stream.read({options.network_buffer_size})
4117 if not connected:
4118 client.connect(("{rhost}", {rport}))
4119 client.setblocking(False)
4120 frlist.append(client)
4121 connected = True
4122 try:
4123 client.sendall(data)
4124 except OSError:
4125 break
4126 if not data:
4127 frlist.remove(stdin_stream)
4128 break
4129 if readable is client:
4130 try:
4131 data = client.recv({options.network_buffer_size})
4132 stdout_stream.write(data)
4133 if not data:
4134 frlist.remove(client) # TEMP
4135 break
4136 except OSError:
4137 frlist.remove(client) # TEMP
4138 break
4139 else:
4140 continue
4141 break
4142 #client.shutdown(socket.SHUT_RDWR)
4143 client.close()
4144 """
4145 session.exec(
4146 code,
4147 python=True,
4148 stdin_stream=stdin_stream,
4149 stdout_stream=stdout_stream,
4150 stderr_stream=stderr_stream,
4151 stdin_src=self.request,
4152 stdout_dst=self.request,
4153 agent_control=control

Callers

nothing calls this directly

Calls 2

execMethod · 0.80
closeMethod · 0.45

Tested by

no test coverage detected