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 = ''
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= ''
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()
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()