Пример #1
0
def feedChunks(handler):
    handler.next()
    while True:
        chunkSizeLine = yield readRe(REGEXP.CHUNK_SIZE_LINE, MAXREQUESTSIZE)
        size = int(chunkSizeLine['ChunkSize'], 16)
        if size == 0:
            yield handler.throw(StopIteration())
            break
        yield copyBytes(size, handler)
        yield readRe(REGEXP.CRLF, 2)
    for partialResponse in handler:
        yield partialResponse
Пример #2
0
 def testReadReEndOfStream(self):
     x = readRe(compile('.*'), 10)
     x.next()
     try:
         x.send(None)
         self.fail('must raise Exception')
     except Exception, e:
         self.assertEquals("no match at eof: ''", str(e))
Пример #3
0
 def testReadRe(self):
     x = readRe(compile('(?P<ape>xyz)'))
     x.next()
     try:
         x.send('xyz') # fail
         self.fail('must not come here')
     except StopIteration, s:
         self.assertEquals(({'ape': 'xyz'},), s.args)
Пример #4
0
 def testReadReWithMaximumBytes(self):
     x = readRe(compile('xyz'), 5)
     x.next()
     x.send('abc')
     try:
         x.send('abc') # fail
         self.fail('must not come here')
     except OverflowError, e:
         self.assertEquals('no match after 6 bytes', str(e))
Пример #5
0
 def processConnection(self):
     while True:
         try:
             with HttpProtocol.Timer(REQUESTTIMEOUT):
                 reqArgs = yield readRe(REGEXP.REQUEST, MAXREQUESTSIZE)
         except OverflowError:
             yield requestEntityTooLarge()
             yield HTTP.CRLF
             return
         except TimeoutException, e:
             yield requestTimeout()
             yield HTTP.CRLF
             return
         #except Exception:
         #    yield badRequest()
         #    yield HTTP.CRLF
         #    return
         headers = parseHeaders(reqArgs)
         scheme, netloc, path, query, fragment = urlsplit(reqArgs['RequestURI'])
         netloc = tuple(netloc.split(':'))
         query = parse_qs(query)
         if 'content-length' in headers:
             length = int(headers['content-length'].keys()[0])
             reqArgs['ContentLength'] = length
         chunked = 'transfer-encoding' in headers and headers['transfer-encoding'].keys()[0] == 'chunked'
         try:
             handler = self.any.processRequest(
                 scheme=scheme, netloc=netloc, path=path, query=query, fragment=fragment, **reqArgs)
         except AttributeError:
             if 'expect' in headers:
                 yield expectationFailed()
             else:
                 yield notImplemented()
         else:
             if 'expect' in headers:
                 yield hundredContinue()
             if chunked:
                 handler = feedChunks(handler)
             yield handler
         if 'close' in headers['connection'] or reqArgs['HTTPVersion'] == '1.0':
             break