Пример #1
0
    def _readMultiForm(self, boundary):
        # TS: Compression & chunked mode not supported yet
        self._tempfile.write(self._dataBuffer)

        self._window += self._dataBuffer
        self._window = self._window[-2 * self._recvSize:]

        if self._window.endswith("\r\n--%s--\r\n" % boundary):
            self._tempfile.seek(0)

            form = {}
            for msg in parse_mime_message(self._tempfile).get_payload():
                cType, pDict = parseHeader(msg['Content-Disposition'])
                contentType = msg.get_content_type()
                fieldName = pDict['name'][1:-1]
                if not fieldName in form:
                    form[fieldName] = []

                if 'filename' in pDict:
                    filename = self._processFilename(pDict['filename'][1:-1])
                    form[fieldName].append(
                        (filename, contentType, msg.get_payload()))
                else:
                    form[fieldName].append(msg.get_payload())

            self.request['Form'] = form
            self._tempfile.close()
            self.finalize()
            return

        self._dataBuffer = ''
Пример #2
0
    def _readMultiForm(self, boundary):
        # TS: Compression & chunked mode not supported yet
        self._tempfile.write(self._dataBuffer)

        self._window += self._dataBuffer
        self._window = self._window[-2*self._recvSize:]

        if self._window.endswith("\r\n--%s--\r\n" % boundary):
            self._tempfile.seek(0)

            form = {}
            for msg in parse_mime_message(self._tempfile).get_payload():
                cType, pDict = parseHeader(msg['Content-Disposition'])
                contentType = msg.get_content_type()
                fieldName = pDict['name'][1:-1]
                if not fieldName in form:
                    form[fieldName] = []

                if 'filename' in pDict:
                    filename = self._processFilename(pDict['filename'][1:-1])
                    form[fieldName].append((filename, contentType, msg.get_payload()))
                else:
                    form[fieldName].append(msg.get_payload())

            self.request['Form'] = form
            self._tempfile.close()
            self.finalize()
            return

        self._dataBuffer= ''
Пример #3
0
    def _readHeaders(self):
        match = REGEXP.REQUEST.match(self._dataBuffer)
        if not match:
            return  # for more data
        self.request = match.groupdict()
        self.request['Body'] = ''
        self.request['Headers'] = parseHeaders(self.request['_headers'])
        matchEnd = match.end()
        self._dataBuffer = self._dataBuffer[matchEnd:]
        if 'Content-Type' in self.request['Headers']:
            cType, pDict = parseHeader(self.request['Headers']['Content-Type'])
            if cType.startswith('multipart/form-data'):
                self._tempfile = TemporaryFile('w+b')
                #self._tempfile = open('/tmp/mimetest', 'w+b')
                self._tempfile.write('Content-Type: %s\r\n\r\n' %
                                     self.request['Headers']['Content-Type'])
                self.setCallDealer(
                    lambda: self._readMultiForm(pDict['boundary']))
                return
        if 'Expect' in self.request['Headers']:
            self._sok.send('HTTP/1.1 100 Continue\r\n\r\n')

        if self._reactor.getOpenConnections() > self._maxConnections:
            self.request['ResponseCode'] = 503
            return self._finalize(self._errorHandler)
        if self.request['Method'] in ['POST', 'PUT']:
            self.setCallDealer(self._readBody)
        else:
            self.finalize()
Пример #4
0
    def _readHeaders(self):
        match = REGEXP.REQUEST.match(self._dataBuffer)
        if not match:
            return # for more data
        self.request = match.groupdict()
        self.request['Body'] = ''
        self.request['Headers'] = parseHeaders(self.request['_headers'])
        matchEnd = match.end()
        self._dataBuffer = self._dataBuffer[matchEnd:]
        if 'Content-Type' in self.request['Headers']:
            cType, pDict = parseHeader(self.request['Headers']['Content-Type'])
            if cType.startswith('multipart/form-data'):
                self._tempfile = TemporaryFile('w+b')
                #self._tempfile = open('/tmp/mimetest', 'w+b')
                self._tempfile.write('Content-Type: %s\r\n\r\n' % self.request['Headers']['Content-Type'])
                self.setCallDealer(lambda: self._readMultiForm(pDict['boundary']))
                return
        if 'Expect' in self.request['Headers']:
            self._sok.send('HTTP/1.1 100 Continue\r\n\r\n')

        if self._reactor.getOpenConnections() > self._maxConnections:
            self.request['ResponseCode'] = 503
            return self._finalize(self._errorHandler)
        if self.request['Method'] in ['POST', 'PUT']:
            self.setCallDealer(self._readBody)
        else:
            self.finalize()