Esempio n. 1
0
 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))
Esempio n. 2
0
 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))
Esempio n. 3
0
        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)
Esempio n. 4
0
        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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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
Esempio n. 8
0
 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))
Esempio n. 9
0
 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))
Esempio n. 10
0
 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
Esempio n. 11
0
 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
Esempio n. 12
0
 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