summary refs log tree commit diff
path: root/synapse/http/matrixfederationclient.py (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Reduce federation logging on success (#7321)Michael Kaye2020-04-221-8/+14
| | | | Splitting based on the response code means we can avoid double logging here and identical information from line 164 while still logging at info if we don't get a good response and need to retry.
* Fix outbound federation request metrics (#6795)Erik Johnston2020-01-281-0/+4
|
* Replace instance variations of homeserver with correct case/spacingAndrew Morgan2019-11-121-1/+1
|
* Remove usage of deprecated logger.warn method from codebase (#6271)Andrew Morgan2019-10-311-5/+5
| | | Replace every instance of `logger.warn` with `logger.warning` as the former is deprecated.
* Trace how long it takes for the send trasaction to complete, including ↵Jorik Schellekens2019-09-051-1/+0
| | | | retrys (#5986)
* Opentracing misc (#5856)Jorik Schellekens2019-08-161-10/+13
| | | | | | | | | | | Add authenticated_entity and servlet_names tags. Functionally: - Add a tag for authenticated_entity - Add a tag for servlet_names Stylistically: Moved to importing methods directly from opentracing.
* Replace returnValue with return (#5736)Amber Brown2019-07-231-8/+8
|
* Add basic opentracing support (#5544)Jorik Schellekens2019-07-111-4/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Configure and initialise tracer Includes config options for the tracer and sets up JaegerClient. * Scope manager using LogContexts We piggy-back our tracer scopes by using log context. The current log context gives us the current scope. If new scope is created we create a stack of scopes in the context. * jaeger is a dependency now * Carrier inject and extraction for Twisted Headers * Trace federation requests on the way in and out. The span is created in _started_processing and closed in _finished_processing because we need a meaningful log context. * Create logcontext for new scope. Instead of having a stack of scopes in a logcontext we create a new context for a new scope if the current logcontext already has a scope. * Remove scope from logcontext if logcontext is top level * Disable tracer if not configured * typo * Remove dependence on jaeger internals * bools * Set service name * :Explicitely state that the tracer is disabled * Black is the new black * Newsfile * Code style * Use the new config setup. * Generate config. * Copyright * Rename config to opentracing * Remove user whitelisting * Empty whitelist by default * User ConfigError instead of RuntimeError * Use isinstance * Use tag constants for opentracing. * Remove debug comment and no need to explicitely record error * Two errors a "s(c)entry" * Docstrings! * Remove debugging brainslip * Homeserver Whitlisting * Better opentracing config comment * linting * Inclue worker name in service_name * Make opentracing an optional dependency * Neater config retreival * Clean up dummy tags * Instantiate tracing as object instead of global class * Inlcude opentracing as a homeserver member. * Thread opentracing to the request level * Reference opetnracing through hs * Instantiate dummy opentracin g for tests. * About to revert, just keeping the unfinished changes just in case * Revert back to global state, commit number: 9ce4a3d9067bf9889b86c360c05ac88618b85c4f * Use class level methods in tracerutils * Start and stop requests spans in a place where we have access to the authenticated entity * Seen it, isort it * Make sure to close the active span. * I'm getting black and blue from this. * Logger formatting Co-Authored-By: Erik Johnston <erik@matrix.org> * Outdated comment * Import opentracing at the top * Return a contextmanager * Start tracing client requests from the servlet * Return noop context manager if not tracing * Explicitely say that these are federation requests * Include servlet name in client requests * Use context manager * Move opentracing to logging/ * Seen it, isort it again! * Ignore twisted return exceptions on context exit * Escape the scope * Scopes should be entered to make them useful. * Nicer decorator names * Just one init, init? * Don't need to close something that isn't open * Docs make you smarter
* Move logging utilities out of the side drawer of util/ and into logging/ (#5606)Amber Brown2019-07-041-1/+1
|
* Run Black. (#5482)Amber Brown2019-06-201-121/+121
|
* Improve docstrings on MatrixFederationClient. (#5332)Richard van der Hoff2019-06-041-16/+55
|
* Remove spurious debug from MatrixFederationHttpClient.get_json (#5287) v0.99.5.1.dev0Richard van der Hoff2019-05-291-4/+0
| | | This is just unhelpful spam
* Add ability to blacklist ip ranges for federation traffic (#5043)Andrew Morgan2019-05-131-10/+38
|
* Make federation endpoints more tolerant of trailing slashes v2 (#4935)Andrew Morgan2019-03-261-0/+1
| | | Redo of https://github.com/matrix-org/synapse/pull/4840
* Clean up backoff_on_404 and metehod callsAndrew Morgan2019-03-211-9/+13
|
* kwargs doesn't like commas on calling funcs either. TILAndrew Morgan2019-03-201-2/+2
|
* lintAndrew Morgan2019-03-201-2/+6
|
* New test, fix issuesAndrew Morgan2019-03-201-49/+28
|
* Fix comments. v0.99.2 -> v0.99.3Andrew Morgan2019-03-201-5/+5
|
* Just return if not doing any trailing slash shennanigansAndrew Morgan2019-03-201-0/+2
|
* lintAndrew Morgan2019-03-181-1/+1
|
* Better exception handlingAndrew Morgan2019-03-181-16/+17
|
* Correct var nameAndrew Morgan2019-03-131-2/+2
|
* receiving a 400 caused an exception. handle itAndrew Morgan2019-03-131-5/+12
|
* is this what purgatory feels likeAndrew Morgan2019-03-131-3/+3
|
* i should have given up x2Andrew Morgan2019-03-131-18/+13
|
* i should have given upAndrew Morgan2019-03-131-1/+1
|
* there comes a time when you should give up. but you dontAndrew Morgan2019-03-131-1/+1
|
* as aboveAndrew Morgan2019-03-131-2/+4
|
* no kwargs todayAndrew Morgan2019-03-131-7/+12
|
* Or perhaps I was the one who was drunkAndrew Morgan2019-03-131-6/+3
|
* go home python, you're drunkAndrew Morgan2019-03-131-4/+2
|
* Syntax checker is borkAndrew Morgan2019-03-131-6/+5
|
* Destructure againAndrew Morgan2019-03-131-7/+8
|
* Are you happy nowAndrew Morgan2019-03-131-2/+2
|
* Syntax testAndrew Morgan2019-03-131-6/+5
|
* Remove testing codeAndrew Morgan2019-03-131-3/+0
|
* Add missing docstring detailAndrew Morgan2019-03-131-1/+1
|
* Fix syntax issuesAndrew Morgan2019-03-131-7/+10
|
* Switch to wrapper function around _send_requestAndrew Morgan2019-03-131-32/+71
|
* Retry on 400:M_UNRECOGNIZEDAndrew Morgan2019-03-131-6/+10
|
* Fix paranthesis indentAndrew Morgan2019-03-131-1/+2
|
* Add workaround noteAndrew Morgan2019-03-131-10/+4
|
* Cleaner way of implementing trailing slashesAndrew Morgan2019-03-121-63/+52
|
* Retry certain federation requests on 404Andrew Morgan2019-03-081-0/+45
|
* Fix TaskStopped exceptions when outbound requests time out (#4690)Richard van der Hoff2019-02-201-15/+2
|
* Move ClientTLSOptionsFactory init out of refresh_certificates (#4611)Richard van der Hoff2019-02-111-2/+2
| | | | | It's nothing to do with refreshing the certificates. No idea why it was here.
* Fix noisy "twisted.internet.task.TaskStopped" errors in logsRichard van der Hoff2019-02-011-2/+15
| | | | Fixes #4003
* Fix Host header sent by MatrixFederationAgent (#4468)Richard van der Hoff2019-01-251-1/+0
| | | | | | Move the Host header logic down here so that (a) it is used if we reuse the agent elsewhere, and (b) we can mess about with it with .well-known.
* Make MatrixFederationClient use MatrixFederationAgentRichard van der Hoff2019-01-221-27/+10
| | | | ... instead of the matrix_federation_endpoint
* Remove redundant WrappedConnection (#4409)Richard van der Hoff2019-01-181-15/+15
| | | | | | | | * Remove redundant WrappedConnection The matrix federation client uses an HTTP connection pool, which times out its idle HTTP connections, so there is no need for any of this business.
* sign_request -> build_auth_headers (#4408)Richard van der Hoff2019-01-171-12/+11
| | | | | Just got very confused about the fact that the headers are only an output, not an input.
* Fixup docstrings for matrixfederationclientErik Johnston2019-01-091-68/+73
|
* Use RequestSendFailed when fail to parse content type headersErik Johnston2019-01-081-5/+5
|
* Refactor request sending to have better excpetions (#4358)Erik Johnston2019-01-081-33/+72
| | | | | | | | | | | | | | * Correctly retry and back off if we get a HTTPerror response * Refactor request sending to have better excpetions MatrixFederationHttpClient blindly reraised exceptions to the caller without differentiating "expected" failures (e.g. connection timeouts etc) versus more severe problems (e.g. programming errors). This commit adds a RequestSendFailed exception that is raised when "expected" failures happen, allowing the TransactionQueue to log them as warnings while allowing us to log other exceptions as actual exceptions.
* Merge pull request #3969 from turt2live/travis/fix-federated-group-requestsTravis Ralston2018-10-231-6/+6
|\ | | | | Handle HttpResponseException more safely for federated groups
| * Fix exception documentation in matrixfederationclient.pyTravis Ralston2018-09-261-6/+6
| |
* | Various cleanups in the federation client code (#4031)Richard van der Hoff2018-10-161-38/+40
|/ | | | | | | | | | | | | | - Improve logging: log things in the right order, include destination and txids in all log lines, don't log successful responses twice - Fix the docstring on TransportLayerClient.send_transaction - Don't use treq.request, which is overcomplicated for our purposes: just use a twisted.web.client.Agent. - simplify the logic for setting up the bodyProducer - fix bytes/str confusions
* Update to use new timeout function everywhere.Erik Johnston2018-09-191-10/+15
| | | | | | | The existing deferred timeout helper function (and the one into twisted) suffer from a bug when a deferred's canceller throws an exception, #3842. The new helper function doesn't suffer from this problem.
* Destination is a stringTravis Ralston2018-09-181-4/+4
|
* Refactor matrixfederationclient to fix logging (#3906)Richard van der Hoff2018-09-181-149/+236
| | | | | | | | We want to wait until we have read the response body before we log the request as complete, otherwise a confusing thing happens where the request appears to have completed, but we later fail it. To do this, we factor the salient details of a request out to a separate object, which can then keep track of the txn_id, so that it can be logged.
* Fix some b'abcd' noise in logs and metricsRichard van der Hoff2018-09-171-1/+4
| | | | | Python 3 compatibility: make sure that we decode some byte sequences before we use them to create log lines and metrics labels.
* Add an awful secondary timeout to fix wedged requestsErik Johnston2018-09-141-0/+11
| | | | This is an attempt to mitigate #3842 by adding yet-another-timeout
* Merge pull request #3872 from matrix-org/hawkowl/timeouts-2Erik Johnston2018-09-141-1/+3
|\ | | | | timeouts 2: electric boogaloo
| * we do that higher upAmber Brown2018-09-141-0/+1
| |
| * buffer?Amber Brown2018-09-141-1/+2
| |
* | Measure outbound requestsErik Johnston2018-09-141-3/+6
|/
* Attempt to figure out what's going on with timeouts (#3857)Amber Brown2018-09-141-56/+42
|
* Log outbound requests when we retryErik Johnston2018-09-121-75/+74
|
* Timeout reading body for outbound HTTP requestsErik Johnston2018-09-121-7/+45
|
* Port http/ to Python 3 (#3771)Amber Brown2018-09-061-120/+84
|
* Fix bug when federation_domain_whitelist is an emtpy listErik Johnston2018-08-241-1/+1
| | | | | Outbound federation were incorrectly allowed when the config option was set to an empty list
* Rename async to async_helpers because `async` is a keyword on Python 3.7 (#3678)Amber Brown2018-08-101-1/+1
|
* Merge pull request #3439 from vojeroen/send_sni_for_federation_requestsRichard van der Hoff2018-08-101-2/+2
|\ | | | | send SNI for federation requests
| * Merge remote-tracking branch 'upstream/develop' into ↵Jeroen2018-07-141-24/+24
| |\ | | | | | | | | | | | | | | | | | | send_sni_for_federation_requests # Conflicts: # synapse/crypto/context_factory.py
| * \ Merge branch 'develop' into send_sni_for_federation_requestsJeroen2018-07-091-2/+1
| |\ \ | | | | | | | | | | | | | | | | # Conflicts: # synapse/http/endpoint.py
| * | | formatting changes for pep8Jeroen2018-06-251-1/+1
| | | |
| * | | send SNI for federation requestsJeroen2018-06-241-2/+2
| | | |
* | | | include known room versions in outgoing make_joinsRichard van der Hoff2018-08-061-2/+5
| |_|/ |/| |
* | | run isortAmber Brown2018-07-091-24/+24
| |/ |/|
* | Attempt to be more performant on PyPy (#3462)Amber Brown2018-06-281-2/+1
|/
* Pass around the reactor explicitly (#3385)Amber Brown2018-06-221-2/+3
|
* Merge pull request #3276 from matrix-org/dbkr/unbindDavid Baker2018-06-111-2/+23
|\ | | | | Remove email addresses / phone numbers from ID servers when they're removed from synapse
| * pep8David Baker2018-06-061-3/+3
| |
| * More doc fixesDavid Baker2018-06-061-2/+2
| |
| * fix pep8David Baker2018-06-051-3/+5
| |
| * doc fixesDavid Baker2018-06-051-6/+6
| |
| * DocstringDavid Baker2018-06-041-0/+14
| |
| * Merge remote-tracking branch 'origin/develop' into dbkr/unbindDavid Baker2018-05-241-3/+5
| |\
| * | Hit the 3pid unbind endpoint on deactivationDavid Baker2018-05-231-2/+7
| | |
* | | Merge remote-tracking branch 'origin/develop' into 3218-official-promAmber Brown2018-05-281-3/+5
|\ \ \ | | |/ | |/|
| * | Replace some more comparisons with sixAdrian Tschira2018-05-191-3/+5
| |/ | | | | | | | | | | plus a bonus b"" string I missed last time Signed-off-by: Adrian Tschira <nota@notafile.com>
* | cleanupAmber Brown2018-05-221-2/+4
| |
* | replacing portionsAmber Brown2018-05-211-10/+4
|/
* Merge pull request #3108 from NotAFile/py3-six-urlparseRichard van der Hoff2018-04-301-2/+1
|\ | | | | Use six.moves.urlparse
| * Use six.moves.urlparseAdrian Tschira2018-04-151-2/+1
| | | | | | | | | | | | The imports were shuffled around a bunch in py3 Signed-off-by: Adrian Tschira <nota@notafile.com>
* | Backport deferred.addTimeoutRichard van der Hoff2018-04-271-3/+4
| | | | | | | | Twisted 16.0 doesn't have addTimeout, so let's backport it.
* | Use deferred.addTimeout instead of time_bound_deferredRichard van der Hoff2018-04-231-17/+18
|/ | | | This doesn't feel like a wheel we need to reinvent.
* use PUT instead of POST for federating groups/m.join_policyKrombel2018-04-061-1/+5
|
* Add federation_domain_whitelist option (#2820)Matthew Hodgson2018-01-221-1/+27
| | | | | | Add federation_domain_whitelist gives a way to restrict which domains your HS is allowed to federate with. useful mainly for gracefully preventing a private but internet-connected HS from trying to federate to the wider public Matrix network
* replace 'except:' with 'except Exception:'Richard van der Hoff2017-10-231-1/+1
| | | | what could possibly go wrong
* Merge branch 'develop' into erikj/groups_mergedDavid Baker2017-10-021-7/+6
|\
| * Improve logging of failures in matrixfederationclientRichard van der Hoff2017-09-281-7/+6
| | | | | | | | | | | | * don't log exception types twice * not all exceptions have a meaningful 'message'. Use the repr rather than attempting to build a string ourselves.
* | Add DELETEErik Johnston2017-07-181-0/+46
| |
* | Add 'args' param to post_jsonErik Johnston2017-07-181-9/+15
|/
* Fix some lies, and other clarifications, in docstringsRichard van der Hoff2017-04-211-7/+14
| | | | | The documentation on get_json has been wrong ever since the very first commit to synapse...
* try not to drop context after federation requestsRichard van der Hoff2017-03-231-12/+16
| | | | | | | preserve_context_over_fn uses a ContextPreservingDeferred, which only restores context for the duration of its callbacks, which isn't really correct, and means that subsequent operations in the same request can end up without their logcontexts.
* Ignore backoff history for invites, aliases, and roomdirsRichard van der Hoff2017-03-231-7/+26
| | | | | Add a param to the federation client which lets us ignore historical backoff data for federation queries, and set it for a handful of operations.
* push federation retry limiter down to matrixfederationclientRichard van der Hoff2017-03-231-101/+127
| | | | | rather than having to instrument everywhere we make a federation call, make the MatrixFederationHttpClient manage the retry limiter.
* MatrixFederationHttpClient: clean upRichard van der Hoff2017-03-231-17/+24
| | | | | rename _create_request to _request, and push ascii-encoding of `destination` and `path` down into it
* Fix routing loop when fetching remote mediaRichard van der Hoff2017-03-131-3/+12
| | | | | | | | | | | When we proxy a media request to a remote server, add a query-param, which will tell the remote server to 404 if it doesn't recognise the server_name. This should fix a routing loop where the server keeps forwarding back to itself. Also improves the error handling on remote media fetches, so that we don't always return a rather obscure 502.
* Respect long_retries param and default to offErik Johnston2016-12-291-2/+2
|
* Clean upErik Johnston2016-12-291-5/+0
|
* Wrap connections in an N minute timeout to ensure they get reaped correctlyErik Johnston2016-12-291-1/+7
|
* More intelligent Content-Type parsingRichard van der Hoff2016-11-301-18/+30
| | | | | Content-Type is allowed to contain options (`; charset=utf-8`, for instance). We should allow that.
* Add a timeout parameter for end2end key queries.Mark Haines2016-09-121-2/+9
| | | | | | | | | | Add a timeout parameter for controlling how long synapse will wait for responses from remote servers. For servers that fail include how they failed to make it easier to debug. Fetch keys from different servers in parallel rather than in series. Set the default timeout to 10s.
* Clean up TransactionQueueErik Johnston2016-08-101-3/+1
|
* Fix flake8 warnings for new flake8Daniel Wagner-Hall2016-02-021-1/+1
|
* copyrightsMatthew Hodgson2016-01-071-1/+1
|
* Fix typoErik Johnston2015-11-201-2/+2
|
* Don't limit connections to perspective serversErik Johnston2015-11-201-1/+4
|
* Use min and not max to set an upper bound on retry intervalErik Johnston2015-11-201-2/+2
|
* Add commentErik Johnston2015-11-171-0/+2
|
* Only retry federation requests for a long time for background requestsErik Johnston2015-11-171-7/+19
|
* Implement required method 'resumeProducing'Erik Johnston2015-11-171-0/+3
|
* Slightly more aggressive retry timers at HTTP levelErik Johnston2015-11-171-2/+3
|
* Retry dead servers a lot less oftenErik Johnston2015-11-021-2/+8
|
* Allow configuration to ignore invalid SSL certsDaniel Wagner-Hall2015-09-091-2/+2
| | | | | This will be useful for sytest, and sytest only, hence the aggressive config key name.
* Remove syutil dependency in favour of smaller single-purpose librariesMark Haines2015-08-241-2/+2
|
* PEP8Erik Johnston2015-08-131-1/+0
|
* Merge branch 'develop' into markjh/twisted-15Mark Haines2015-08-121-68/+77
|\ | | | | | | | | Conflicts: synapse/http/matrixfederationclient.py
| * Fix log context when sending requestsErik Johnston2015-06-191-28/+30
| |
| * Remove stale debug linesErik Johnston2015-06-191-10/+0
| |
| * Add IDs to outbound transactionsErik Johnston2015-06-191-53/+71
| |
* | Use Twisted-15.2.1, Use Agent.usingEndpointFactory rather than implement our ↵Mark Haines2015-06-011-50/+25
|/ | | | own Agent
* Correctly pass connection pool parameterErik Johnston2015-05-281-1/+1
|
* Up maxPersistentPerHost countErik Johnston2015-05-281-0/+1
|
* Use connection pool for federation connectionsErik Johnston2015-05-281-2/+3
|
* Add doc stringsErik Johnston2015-05-221-0/+3
|
* Add a timeout param to get_eventErik Johnston2015-05-191-5/+8
|
* Change the way we do logging contexts so that they survive divergencesErik Johnston2015-05-081-16/+16
|
* Appease pep8Paul "LeoNerd" Evans2015-03-121-3/+7
|
* Use _ instead of . as a metric namespacing separator, for PrometheusPaul "LeoNerd" Evans2015-03-121-2/+2
|
* Rename Metrics' "keys" to "labels"Paul "LeoNerd" Evans2015-03-121-2/+2
|
* Add vector counters to HTTP clients and servers; count the requests by ↵Paul "LeoNerd" Evans2015-03-121-3/+25
| | | | method and responses by method and response code
* Merge branch 'develop' of github.com:matrix-org/synapse into release-v0.7.1Erik Johnston2015-02-181-2/+2
|\
| * Use git aware version string in User-Agent and Server headersErik Johnston2015-02-181-2/+2
| |
* | Don't convert DNSLookupError to a 4xx SynapseErrorErik Johnston2015-02-181-1/+1
|/
* Add .__name__ after type(e)Erik Johnston2015-02-181-2/+2
|
* Fix up ResponseNeverReceived to strErik Johnston2015-02-181-9/+11
|
* strings.join() expects iterable of stringsErik Johnston2015-02-181-1/+1
|
* Remove unused importErik Johnston2015-02-171-1/+0
|
* Make matrixfederationclient log more nicelyErik Johnston2015-02-171-11/+12
|
* Merge pull request #61 from matrix-org/timeout-federation-requestsErik Johnston2015-02-111-1/+7
|\ | | | | Timeout federation requests
| * Merge branch 'develop' of github.com:matrix-org/synapse into ↵Erik Johnston2015-02-111-5/+73
| |\ | | | | | | | | | timeout-federation-requests
| * | PEP8Erik Johnston2015-02-111-1/+0
| | |
| * | Move time_bound_deferred into ClockErik Johnston2015-02-111-3/+2
| | |
| * | Time out HTTP federation requestsErik Johnston2015-02-101-2/+9
| | |
* | | Blunty replace json with simplejsonErik Johnston2015-02-111-1/+1
| |/ |/|
* | Return body of response in HttpResponseExceptionErik Johnston2015-02-061-1/+2
| |
* | Apply sanity to the transport client interface. Convert 'make_join' and ↵Erik Johnston2015-02-041-6/+36
| | | | | | | | 'send_join' to accept iterables of destinations
* | Make post_json(...) actually send data.Erik Johnston2015-01-291-1/+1
| |
* | Add post_json(...) method to federation clientErik Johnston2015-01-291-0/+37
| |
* | Finish renaming "context" to "room_id" in federation codebaseMark Haines2015-01-161-1/+0
|/
* Update copyright noticesMark Haines2015-01-061-1/+1
|
* Include version in User-Agent and Server headersMark Haines2014-12-221-1/+3
|
* Limit the size of images that are thumbnailed serverside. Limit the size of ↵Mark Haines2014-12-111-6/+19
| | | | file that a server will download from a remote server
* Merge branch 'develop' into media_repositoryMark Haines2014-12-101-9/+26
|\
| * turn back on per-request transaction retries, so that every time we try to ↵Matthew Hodgson2014-12-101-4/+3
| | | | | | | | hit a dead server we actually end up hammering 5 times :|
| * Code style.Erik Johnston2014-12-101-8/+21
| |
| * add errbacks to enqueue_pdu deferreds; change logging for failed federation ↵Matthew Hodgson2014-12-101-2/+2
| | | | | | | | sends to warn rather than exception
| * squidge to 79 columns as per pep8Matthew Hodgson2014-12-101-3/+4
| |
| * track replication destination health, and perform exponential back-off when ↵Matthew Hodgson2014-12-071-6/+10
| | | | | | | | sending transactions. does *not* yet retry transactions, but drops them on the floor if waiting for a server to recover.
* | Implement download support for media_repositoryMark Haines2014-12-041-5/+68
|/
* Fix pep8 and pyflakes warningsMark Haines2014-11-201-3/+3
|
* Separate out the matrix http client completely because just about all of its ↵David Baker2014-11-201-0/+308
code it now separate from the simple case we need for standard HTTP(S)