def paste_proxy_patched_call(self, environ, start_response):
    if (self.allowed_request_methods and
        environ['REQUEST_METHOD'].lower() not in self.allowed_request_methods):
        return httpexceptions.HTTPBadRequest("Disallowed")(environ, start_response)

    if self.scheme == 'http':
        ConnClass = httplib.HTTPConnection
    elif self.scheme == 'https':
        ConnClass = httplib.HTTPSConnection
    else:
        raise ValueError(
            "Unknown scheme for %r: %r" % (self.address, self.scheme))
    conn = ConnClass(self.host)
    headers = {}
    for key, value in environ.items():
        if key.startswith('HTTP_'):
            key = key[5:].lower().replace('_', '-')
            if key == 'host' or key in self.suppress_http_headers:
                continue
            headers[key] = value
    headers['host'] = self.host
    if 'REMOTE_ADDR' in environ:
        headers['x-forwarded-for'] = environ['REMOTE_ADDR']
    # synthese modification
    if 'HTTP_HOST' in environ:
        headers['x-forwarded-host'] = environ['HTTP_HOST']
    # end of synthese modification
    if environ.get('CONTENT_TYPE'):
        headers['content-type'] = environ['CONTENT_TYPE']
    if environ.get('CONTENT_LENGTH'):
        if environ['CONTENT_LENGTH'] == '-1':
            # This is a special case, where the content length is basically undetermined
            body = environ['wsgi.input'].read(-1)
            headers['content-length'] = str(len(body))
        else:
            headers['content-length'] = environ['CONTENT_LENGTH']
            length = int(environ['CONTENT_LENGTH'])
            body = environ['wsgi.input'].read(length)
    else:
        body = ''

    path_info = urllib.quote(environ['PATH_INFO'])
    if self.path:
        request_path = path_info
        if request_path and request_path[0] == '/':
            request_path = request_path[1:]

        path = urlparse.urljoin(self.path, request_path)
    else:
        path = path_info
    if environ.get('QUERY_STRING'):
        path += '?' + environ['QUERY_STRING']

    conn.request(environ['REQUEST_METHOD'],
                 path,
                 body, headers)
    res = conn.getresponse()
    headers_out = parse_headers(res.msg)

    status = '%s %s' % (res.status, res.reason)
    start_response(status, headers_out)
    # @@: Default?
    length = res.getheader('content-length')
    if length is not None:
        body = res.read(int(length))
    else:
        body = res.read()
    conn.close()
    return [body]