def handle_response(self, eventmask): if eventmask & looping.POLLIN: # FIXME: this is basically a c/c from server.py's # HTTPClient's handle_read while True: tmp_buffer = helpers.handle_eagain(self.sock.recv, self.RESPONSE_MAX_SIZE - self.response_size) if tmp_buffer == None: # EAGAIN, we'll come back later break elif tmp_buffer == b'': raise HTTPError('Unexpected end of stream from %s, %s' % (self.url, (self.sock, self.address))) self.response_buffer = self.response_buffer + tmp_buffer self.response_size += len(tmp_buffer) self.response_parser.execute(self.response_buffer) if self.response_parser.has_error(): raise HTTPParseError('Invalid HTTP response from %s, %s' % (self.sock, self.address)) elif self.response_parser.is_finished(): # Transform this into the appropriate handler self.transform_response() break elif self.response_size >= self.RESPONSE_MAX_SIZE: raise HTTPParseError('Oversized HTTP response from %s, %s' % (self.sock, self.address))
def handle_response(self, eventmask): if eventmask & looping.POLLIN: # FIXME: this is basically a c/c from server.py's # HTTPClient's handle_read while True: tmp_buffer = helpers.handle_eagain( self.sock.recv, self.RESPONSE_MAX_SIZE - self.response_size) if tmp_buffer == None: # EAGAIN, we'll come back later break elif tmp_buffer == b'': raise HTTPError('Unexpected end of stream from %s, %s' % (self.url, (self.sock, self.address))) self.response_buffer = self.response_buffer + tmp_buffer self.response_size += len(tmp_buffer) self.response_parser.execute(self.response_buffer) if self.response_parser.has_error(): raise HTTPParseError('Invalid HTTP response from %s, %s' % (self.sock, self.address)) elif self.response_parser.is_finished(): # Transform this into the appropriate handler self.transform_response() break elif self.response_size >= self.RESPONSE_MAX_SIZE: raise HTTPParseError( 'Oversized HTTP response from %s, %s' % (self.sock, self.address))
def recv_packet(self, _buffer_size = None): # We ignore _buffer_size altogether here buffers = [bytearray(self.RECV_BUFFER_SIZE) for i in range(self.recv_buffer_count)] buffers = helpers.handle_eagain(recvmmsg, self.sock.fileno(), buffers) if buffers is None: return None if not buffers: return bytearray() # Automagically grow/shrink the buffer count as needed if len(buffers) >= self.recv_buffer_count: self.recv_buffer_count = min(self.recv_buffer_count * 2, self.RECV_BUFFER_COUNT_MAX) else: self.recv_buffer_count = max(len(buffers), self.RECV_BUFFER_COUNT_MIN) self.server.update_activity(self) return bytearray().join(buffers)
def recv_packet(self, buffer_size: int = -1) -> Optional[bytes]: # We ignore buffer_size altogether here recv_buffers = [bytearray(self.RECV_BUFFER_SIZE) for i in range(self.recv_buffer_count)] buffers = helpers.handle_eagain(recvmmsg, self.sock.fileno(), recv_buffers) if buffers is None: return None if not buffers: return b"" # Automagically grow/shrink the buffer count as needed if len(buffers) >= self.recv_buffer_count: self.recv_buffer_count = min(self.recv_buffer_count * 2, self.RECV_BUFFER_COUNT_MAX) else: self.recv_buffer_count = max(len(buffers), self.RECV_BUFFER_COUNT_MIN) self.server.update_activity(self) return b"".join(buffers)
def handle_event(self, eventmask): if eventmask & looping.POLLIN: while True: packet = helpers.handle_eagain(self.sock.recv, self.RECV_BUFFER_SIZE) if packet == None: # EAGAIN break elif packet == b'': # End of stream self.server.logger.warn('End of stream for %s, %s', self.path, (self.sock, self.address)) self.close() # FIXME: publish "EOS" packet break else: self.publish_packet(packet) else: self.server.logger.error('%s: unexpected eventmask %s', self, eventmask)
def handle_event(self, eventmask): if eventmask & looping.POLLIN: # FIXME: this is basically a c/c from server.py's # HTTPRequest's handle_read while True: tmp_buffer = helpers.handle_eagain(self.sock.recv, self.MIN_START_BUFFER) if tmp_buffer == None: # EAGAIN, we'll come back later break else: self.initial_buffer_data = self.initial_buffer_data + tmp_buffer if len(self.initial_buffer_data) >= self.MIN_START_BUFFER: # OK, this looks like a valid source (since there # is some socket activity) fake_response_parser = cyhttp11.HTTPClientParser() fake_response_parser.body = self.initial_buffer_data # FIXME: we're assuming an MPEG-TS source fake_response_parser.headers['Content-Type'] = 'video/MP2T' self.server.add_source(self.path, self.sock, self.udp_address, fake_response_parser, self.burst_size) break
def handle_read(self): while True: tmp_buffer = helpers.handle_eagain( self.sock.recv, self.REQUEST_MAX_SIZE - self.request_size) if tmp_buffer == None: # EAGAIN, we'll come back later break elif tmp_buffer == b'': raise HTTPError('Unexpected end of stream from %s, %s,' % (self.sock, self.address)) self.request_buffer = self.request_buffer + tmp_buffer self.request_size += len(tmp_buffer) self.request_parser.execute(self.request_buffer) if self.request_parser.has_error(): raise HTTPParseError('Invalid HTTP request from %s, %s' % (self.sock, self.address)) elif self.request_parser.is_finished(): # Transform this into the appropriate handler self.transform_request() break elif self.request_size >= self.REQUEST_MAX_SIZE: raise HTTPParseError('Oversized HTTP request from %s, %s' % (self.sock, self.address))
def handle_read(self): while True: tmp_buffer = helpers.handle_eagain(self.sock.recv, self.REQUEST_MAX_SIZE - self.request_size) if tmp_buffer == None: # EAGAIN, we'll come back later break elif tmp_buffer == b'': raise HTTPError('Unexpected end of stream from %s, %s,' % (self.sock, self.address)) self.request_buffer = self.request_buffer + tmp_buffer self.request_size += len(tmp_buffer) self.request_parser.execute(self.request_buffer) if self.request_parser.has_error(): raise HTTPParseError('Invalid HTTP request from %s, %s' % (self.sock, self.address)) elif self.request_parser.is_finished(): # Transform this into the appropriate handler self.transform_request() break elif self.request_size >= self.REQUEST_MAX_SIZE: raise HTTPParseError('Oversized HTTP request from %s, %s' % (self.sock, self.address))
def handle_read(self): # FIXME: this is basically a c/c from server.py's # HTTPRequest's handle_read while True: tmp_buffer = helpers.handle_eagain(self.sock.recv, self.MIN_START_BUFFER) if tmp_buffer == None: # EAGAIN, we'll come back later break else: self.initial_buffer_data = self.initial_buffer_data + tmp_buffer if len(self.initial_buffer_data) >= self.MIN_START_BUFFER: # OK, this looks like a valid source (since there # is some socket activity) fake_response_parser = cyhttp11.HTTPClientParser() fake_response_parser.body = self.initial_buffer_data # FIXME: we're assuming an MPEG-TS source udp_source = MPEGTSSource(self.server, self.sock, self.udp_address, b'video/MP2T', fake_response_parser, self.path, self.burst_size) self.server.register_source(udp_source) self.follow_up() break
def recv_packet(self, buffer_size = RECV_BUFFER_SIZE): packet = helpers.handle_eagain(self.sock.recv, buffer_size) if packet: self.server.update_activity(self) return packet
def recv_packet(self, buffer_size: int = RECV_BUFFER_SIZE) -> Optional[bytes]: packet = helpers.handle_eagain(self.sock.recv, buffer_size) if packet: self.server.update_activity(self) return packet