Exemple #1
0
def recv_headers(sock, maxlen=1048576):
    head = ''.join(
        greennet.recv_until_maxlen(sock, '\r\n\r\n', maxlen,
                                   HeadersTooLargeError))
    if head == '\r\n\r\n':
        return {}
    return headers.wsgi_headers(head[:-2])
Exemple #2
0
def recv_requests(sock, maxlen=8192):
    while True:
        req = '\r\n'
        while req == '\r\n':
            req = ''.join(
                greennet.recv_until_maxlen(sock, '\r\n', maxlen,
                                           RequestTooLargeError))
        env = message.parse_request(req)
        if env['webskewer.http_version'] > (0,9):
            env.update(recv_headers(sock))
            env['wsgi.input'] = IterFile(recv_entity(sock, env))
        else:
            env['wsgi.input'] = DummyFile()
        yield env
Exemple #3
0
def recv_chunked(sock):
    while True:
        chunk_size = '\r\n'
        while chunk_size == '\r\n':
            chunk_size = ''.join(
                greennet.recv_until_maxlen(sock, '\r\n\r\n', 258,
                                           ChunkTooLargeError))
        m = http_grammar.chunk_size.match(chunk_size)
        if not m:
            raise BadChunkSizeError()
        chunk_size = int(chunk_size, 16)
        if chunk_size == 0:
            break
        for data in greennet.recv_bytes(sock, chunk_size):
            yield data
    raise StopIteration(recv_headers(sock))