'Takes a request and a start_response callable and does the normal WSGI
thing with them. Returns an iterator suitable for sending up the WSGI
chain.
:param req: swob.Request object; is a GET or HEAD request aimed at
what may be a static large object manifest (or may not).
:param start_response: WSGI start_response callable'

def handle_slo_get_or_head(self, req, start_response):

    if (req.params.get('multipart-manifest') != 'get'):
        update_etag_is_at_header(req, SYSMETA_SLO_ETAG)
    resp_iter = self._app_call(req.environ)
    slo_marker = slo_etag = slo_size = None
    for (header, value) in self._response_headers:
        header = header.lower()
        if (header == SYSMETA_SLO_ETAG):
            slo_etag = value
        elif (header == SYSMETA_SLO_SIZE):
            slo_size = value
        elif ((header == 'x-static-large-object') and config_true_value(value)):
            slo_marker = value
        if (slo_marker and slo_etag and slo_size):
            break
    if (not slo_marker):
        start_response(self._response_status, self._response_headers, self._response_exc_info)
        return resp_iter
    if (req.params.get('multipart-manifest') == 'get'):
        if (req.params.get('format') == 'raw'):
            resp_iter = self.convert_segment_listing(self._response_headers, resp_iter)
        else:
            new_headers = []
            for (header, value) in self._response_headers:
                if (header.lower() == 'content-type'):
                    new_headers.append(('Content-Type', 'application/json;    charset=utf-8'))
                else:
                    new_headers.append((header, value))
            self._response_headers = new_headers
        start_response(self._response_status, self._response_headers, self._response_exc_info)
        return resp_iter
    is_conditional = (self._response_status.startswith(('304', '412')) and (req.if_match or req.if_none_match))
    if (slo_etag and slo_size and ((req.method == 'HEAD') or is_conditional)):
        for (i, (header, _value)) in enumerate(self._response_headers):
            lheader = header.lower()
            if (lheader == 'etag'):
                self._response_headers[i] = (header, ('"%s"' % slo_etag))
            elif ((lheader == 'content-length') and (not is_conditional)):
                self._response_headers[i] = (header, slo_size)
        start_response(self._response_status, self._response_headers, self._response_exc_info)
        return resp_iter
    if self._need_to_refetch_manifest(req):
        req.environ['swift.non_client_disconnect'] = True
        close_if_possible(resp_iter)
        del req.environ['swift.non_client_disconnect']
        get_req = make_subrequest(req.environ, method='GET', headers={'x-auth-token': req.headers.get('x-auth-token')}, agent='%(orig)s    SLO    MultipartGET', swift_source='SLO')
        resp_iter = self._app_call(get_req.environ)
    resp_headers = [(h, v) for (h, v) in self._response_headers if (not (h.lower() == 'content-range'))]
    response = self.get_or_head_response(req, resp_headers, resp_iter)
    return response(req.environ, start_response)
