def _response_done(self, trailers): "Finish anaylsing the response, handling any parse errors." state = self.state state.res_complete = True state.res_done_ts = thor.time() state.transfer_length = self.exchange.input_transfer_length state.header_length = self.exchange.input_header_length # TODO: check trailers if self.status_cb and state.type: self.status_cb("fetched %s (%s)" % (state.uri, state.type)) state.res_body_md5 = self._md5_processor.digest() state.res_body_post_md5 = self._md5_post_processor.digest() checkCaching(state) if state.method not in ['HEAD'] and state.res_status not in ['304']: # check payload basics if state.parsed_hdrs.has_key('content-length'): if state.res_body_len == state.parsed_hdrs['content-length']: state.set_message('header-content-length', rs.CL_CORRECT) else: state.set_message('header-content-length', rs.CL_INCORRECT, body_length=f_num(state.res_body_len) ) if state.parsed_hdrs.has_key('content-md5'): c_md5_calc = base64.encodestring(state.res_body_md5)[:-1] if state.parsed_hdrs['content-md5'] == c_md5_calc: state.set_message('header-content-md5', rs.CMD5_CORRECT) else: state.set_message('header-content-md5', rs.CMD5_INCORRECT, calc_md5=c_md5_calc) self.done() self.finish_task()
def _response_done(self, trailers): "Finish anaylsing the response, handling any parse errors." state = self.state state.res_complete = True state.res_done_ts = thor.time() state.transfer_length = self.exchange.input_transfer_length state.header_length = self.exchange.input_header_length # TODO: check trailers if self.status_cb and state.type: self.status_cb("fetched %s (%s)" % (state.uri, state.type)) state.res_body_md5 = self._md5_processor.digest() state.res_body_post_md5 = self._md5_post_processor.digest() checkCaching(state) if state.method not in ['HEAD'] and state.res_status not in ['304']: # check payload basics if state.parsed_hdrs.has_key('content-length'): if state.res_body_len == state.parsed_hdrs['content-length']: state.set_message('header-content-length', rs.CL_CORRECT) else: state.set_message('header-content-length', rs.CL_INCORRECT, body_length=f_num(state.res_body_len)) if state.parsed_hdrs.has_key('content-md5'): c_md5_calc = base64.encodestring(state.res_body_md5)[:-1] if state.parsed_hdrs['content-md5'] == c_md5_calc: state.set_message('header-content-md5', rs.CMD5_CORRECT) else: state.set_message('header-content-md5', rs.CMD5_INCORRECT, calc_md5=c_md5_calc) self.done() self.finish_task()
def _response_done(self, err): "Finish anaylsing the response, handling any parse errors." state = self.state state.res_complete = True state.res_done_ts = nbhttp.now() state.transfer_length = self.client.input_transfer_length state.header_length = self.client.input_header_length self.client = None state.res_error = err if self.status_cb and state.type: self.status_cb("fetched %s (%s)" % (state.uri, state.type)) state.res_body_md5 = self._md5_processor.digest() state.res_body_post_md5 = self._md5_post_processor.digest() if err == None: pass elif err['desc'] == nbhttp.error.ERR_BODY_FORBIDDEN['desc']: state.setMessage('header-none', rs.BODY_NOT_ALLOWED) elif err['desc'] == nbhttp.error.ERR_EXTRA_DATA['desc']: state.res_body_len += len(err.get('detail', '')) elif err['desc'] == nbhttp.error.ERR_CHUNK['desc']: state.setMessage('header-transfer-encoding', rs.BAD_CHUNK, chunk_sample=e( err.get('detail', '')[:20].encode('string_escape') ) ) elif err['desc'] == nbhttp.error.ERR_CONNECT['desc']: state.res_complete = False elif err['desc'] == nbhttp.error.ERR_LEN_REQ['desc']: pass # TODO: length required elif err['desc'] == nbhttp.error.ERR_URL['desc']: state.res_complete = False elif err['desc'] == nbhttp.error.ERR_READ_TIMEOUT['desc']: state.res_complete = False elif err['desc'] == nbhttp.error.ERR_HTTP_VERSION['desc']: state.res_complete = False else: raise AssertionError, "Unknown response error: %s" % err if state.res_complete: checkCaching(state) if state.res_complete \ and state.method not in ['HEAD'] \ and state.res_status not in ['304']: # check payload basics if state.parsed_hdrs.has_key('content-length'): if state.res_body_len == state.parsed_hdrs['content-length']: state.setMessage('header-content-length', rs.CL_CORRECT) else: state.setMessage('header-content-length', rs.CL_INCORRECT, body_length=f_num(state.res_body_len) ) if state.parsed_hdrs.has_key('content-md5'): c_md5_calc = base64.encodestring(state.res_body_md5)[:-1] if state.parsed_hdrs['content-md5'] == c_md5_calc: state.setMessage('header-content-md5', rs.CMD5_CORRECT) else: state.setMessage('header-content-md5', rs.CMD5_INCORRECT, calc_md5=c_md5_calc) self.done() self.finish_task()