Commit Graph

1532 Commits

Author SHA1 Message Date
Brian Warner
dc26157906 Merge branch '366-fixtest' 2019-12-20 17:25:51 -08:00
Brian Warner
a1420a0a34 manager.py: fix typo in comments 2019-12-20 17:06:30 -08:00
Brian Warner
6be50a4f0a dilate/test_manager: tolerate Mock endpoints
This test was incorrectly exercising a member of the endpoint record returned
by `Manager.get_endpoints()`. In the test environment, the `.listen` Endpoint
is actually a Mock, so calling e.g. `listen()` on `endpoints.listen` returns
another Mock instead of a Deferred. Twisted's `assertNoResult` used to
tolerate this silently, but as of Twisted-19.10 it throws an error, causing
the test to fail.

The fix is to assert that the record has attributes with the right names, but
not assume they behave like normal Endpoints, and not call `.listen()` on
them.

closes #366
2019-12-20 17:03:00 -08:00
Brian Warner
dd520677fe Merge branch 'pr365'
closes #365
2019-11-08 10:42:16 -08:00
Jürgen Gmach
9a976c10a1 Remove deprecated keyword "sudo" from travis config.
modified:   .travis.yml
2019-11-08 10:42:10 -08:00
Brian Warner
6c8caa5f89 Merge branch 'pr361'
closes #361
2019-11-08 10:41:54 -08:00
Adam Spiers
aa16441c8a Add installation instructions for openSUSE
magic-wormhole has been included in openSUSE since Leap 15.1, and is
also available in Tumbleweed:

https://software.opensuse.org/package/python-magic-wormhole

So document this explicitly.
2019-11-08 10:41:47 -08:00
Brian Warner
048a9e392a README: add repology.org packaged-versions table 2019-11-08 10:34:33 -08:00
Brian Warner
7e30b70e2f docs: update install instructions 2019-08-28 10:33:26 -07:00
Brian Warner
d7e244740c tests: cover --verify too, at least for --text 2019-08-17 17:06:22 -07:00
Brian Warner
fd867a9cd6 send: stall the --verify input() long enough to send the Verifier
Specifically, this lets the `wormhole tx` side send the VERSIONS message
before input() happens, allowing the `wormhole rx` side to compute and
display the Verifier. This only matters when the receiver sends both PAKE and
VERSIONS in the same turn, which only happens when tab-completion allowed
them to learn the Nameplate early and thus receive the sender's PAKE early.
In the other cases, the receiver sends PAKE and VERSIONS on separate turns,
so the sender doesn't get into this situation.

The bug this fixes is when both sides use --verify, and the receiver uses
tab-completion, then the sender shows the Verifier and waits for
confirmation, but the receiver doesn't show the Verifier until *after* the
sender confirms. So the two users don't have enough information to compare.

Many thanks to Jacek Politowski (@jpolnetpl) for the catch and initial
investigation.

closes #349
2019-08-17 15:24:13 -07:00
Brian Warner
ab5fe65c3b Merge commit 'dilate-half-close'
Add half-close to dilation API. Fix several bugs exposed by application-level
testing.

refs #344 but doesn't close it yet: I want to call `p.connectionLost()` after
both directions have been closed down
2019-08-11 22:22:45 -07:00
Brian Warner
854f0d6e01 ignore ConnectionRefusedError too 2019-08-11 22:20:49 -07:00
Brian Warner
2e2120f327 manager: handle mismatched code during WAITING too 2019-08-11 22:20:49 -07:00
Brian Warner
a489f5da2b suppress misleading DNSLookupError on cancelled connections
This should be removed after Twisted's ticket
https://twistedmatrix.com/trac/ticket/9696 is fixed (and we increase our
dependency to require a version with the fix).

refs #347
2019-08-11 22:20:49 -07:00
Brian Warner
49c36b0277 dilation side needs to be 16-chars to match transit relay 2019-08-11 22:20:49 -07:00
Brian Warner
840dfa603b w.dilate(): accept transit_relay_location=, pass through to manager 2019-08-11 22:20:49 -07:00
Brian Warner
1219fd08ca subchannel: enforce separation between half-close and full-close API 2019-08-11 22:20:49 -07:00
Brian Warner
1c8c2997c7 subchannel: tolerate multiple pre-open inbound DATA messages 2019-08-11 22:20:49 -07:00
Brian Warner
327e72e6ac update subchannel state machine for half-close
also handle open-but-not-yet-connected subchannels better
2019-08-11 15:24:39 -07:00
Brian Warner
b233763082 subchannel: deliver queued connectionMade before any data
The previous implementation would call the control/receiving Protocol
completely backwards: dataReceived first, then connectionLost, then finally
connectionMade. Which didn't work at all, of course.
2019-08-11 14:20:33 -07:00
Brian Warner
4d57465444 oops, fix test_describe on py2 2019-08-11 14:19:25 -07:00
Brian Warner
16b6245f44 test describe_inbound, format IPv6 better 2019-08-11 14:10:29 -07:00
Brian Warner
d0c27552cf tox.ini: remove py3.4 from envlist
We removed py3.4 support back in July, but I forgot to remote it from the tox
config too.
2019-08-09 10:41:31 -07:00
Brian Warner
c068bfdfdd transit key is derived from the wrong APPID, bummer
When I made it possible to override APPID with a CLI argument (issue #113), I
forgot to also change this w.derive_key() (issue #339). We don't really need
to include APPID in that purpose string at all (the ideal code would be just
`w.derive_key("transit-key", length)`), but we're stuck with it now. Both
sides must use the same derivation process, and it would be pretty
expensive/complicated to negotiate the process ahead of time (and this code
is scheduled to be obsoleted by Dilation anyways).

I added a note to the two sites that use it, and put a local copy of the
APPID there. We should treat that copy as an arbitrary magic string that must
be included for compatibility with existing deployments (potential
file-transfer peers), which is coincidentally similar to the default `APPID`.

closes #339
2019-07-24 11:11:48 -07:00
Brian Warner
20496e3976 Merge branch '335-buffer-1'
closes #335
2019-07-13 19:48:58 -07:00
Brian Warner
b633602a02 update test_manager to match 2019-07-13 19:25:50 -07:00
Brian Warner
85cb003498 WIP: rewrite w.dilate API to return endpoints synchronously
test_manager still needs rewriting
2019-07-12 00:01:55 -07:00
Brian Warner
75fad02a28 subchannel: queue pending opens with a deque(), not a list
slightly cleaner
2019-07-08 01:15:13 -07:00
Brian Warner
443d248972 manager: call inbound.set_listener_endpoint() before start()
This should fix the immediate issue of the remote side opening a
subchannel (and sending data on it) before the local side even sees the
Endpoints, so before it can register a listening factory to receive the OPEN.

We were already buffering early OPENs in the SubchannelListenerEndpoint, but
this makes sure that endpoint is available (for the manager's Inbound half to
deliver) them as soon as the dilation connection is established.

The downside to buffering OPENs (and all data written to inbound subchannels)
is that the application has no way to reject or pause them, until it
registers the listening factory. If the application never calls
`listen_ep.listen()`, we'll buffer this data forever (or until the wormhole
is closed). The upside is that we don't lose a roundtrip waiting for an ack
on the OPEN. See ticket #335 for more details.

refs #335
2019-07-08 01:12:39 -07:00
Brian Warner
575cf5d789 subchannel: check MAX_FRAME_LENGTH, 2**32 minus headers
Anyone sending 4GB in a single `transport.write()` is in for a surprise, but
at least we'll surprise them with an assertion *before* spending the time and
memory encrypting that monster.
2019-07-07 23:59:54 -07:00
Brian Warner
d1aefa815d fix subchannel open/close, add test
I think I just managed to forget that inbound_close requires we respond with
a close ourselves. Also outbound open means we must add the subchannel to the
inbound table, so we can receive any data on it at all.
2019-07-06 01:50:29 -07:00
Brian Warner
8043e508fa make SubChannel IDs integers, not 4-bytes
I'm sure I had a good reason for avoiding integers, but it makes logging and
testing more difficult, and both sides are using integers to generate them
anyways (so one side can pick the odd ones, and the other can pick the even
ones).
2019-07-06 01:10:34 -07:00
Brian Warner
a74cc99e6a dilate: test sending data while the connection is offline 2019-07-05 23:16:25 -07:00
Brian Warner
3a4b9a3b67 Merge branch 'dilation-testing' 2019-07-05 16:02:53 -07:00
Brian Warner
c9d36888bb docs: add dilation state machines diagram 2019-07-05 15:56:13 -07:00
Brian Warner
ee8c1acffa dilate/test_full: test reconnection 2019-07-05 15:54:19 -07:00
Brian Warner
98cce7fab7 connector: tidy Factory reprs 2019-07-05 15:54:19 -07:00
Brian Warner
8cfdc4c9bc README: drop python3.4 support
Python3.4 is no longer maintained (PEP 429 says March 2019 was the EOL date),
and the current version of pip (19.1) is the last to support it, so it's time
to let go.

* remove py34 from .travis.yml so PRs don't fail spuriously (there's some
  problem with txtorcon and twisted that only happens on py3.4)
2019-07-05 15:50:00 -07:00
Miro Hrončok
f2d5084761
Fedora has magic-wormhole in all versions 2019-06-04 20:57:01 +02:00
Brian Warner
ab00f8e876 Merge branch 'pr331'
closes #330
2019-05-29 23:33:55 -07:00
Brian Warner
58cf584fb0 cmd_receive: treat 'quit' or other non- yes/no answers as "no"
So "yes" or "Yes" or "y" or "Y" or anything else that starts with y/Y means
yes, and a bare newline means yes, but anything else means no.
2019-05-29 23:32:02 -07:00
morrieinmaas
e2c678930c Closes #330 Changed default choice from No to Yes for wormhole receive 2019-05-18 15:57:03 -04:00
Brian Warner
293893ec01 Merge branch 'dilation-fixes' 2019-05-07 11:45:49 -07:00
Brian Warner
38f512e4cc open sc0 early, since messages can arrive attached to the KCM
Without this, the Follower would see data for subchannel 0 before it had a
chance to create the SubChannel object that could accept it. We already have
a mechanism for inbound data to be queued inside the SubChannel until the
endpoint has had a chance to create the Protocol object: we rely on that
mechanism here. We just need to create the SubChannel before telling the
Manager to start, even though we don't reveal the SubChannel to the
caller (via the control endpoint) until the connection is known to succeed.

This helps a manual test get data from one side to the other without throwing
exceptions.
2019-05-07 11:41:30 -07:00
Brian Warner
d612b58dd8 connection: tolerate merged KCM and first record
When the follower's connection is accepted, they'll observe a single
dataReceived chunk containing both the leader's KCM and the leader's first
actual data record. The state machine considers the KCM for an eventual-turn
before selecting the connection, so the data record will arrive while the
connection isn't quite ready for it (if consider() were immediate, this
wouldn't be a problem, but Automat doesn't deal with reentrant calls very
well). So we queue any records that arrive before we're selected.
2019-05-07 11:41:30 -07:00
Brian Warner
55056bd324 make no_listen= an argument to w.dilate() rather than create()
It wasn't exposed in create(), and I need it for more tests. This might not
be the best approach, I'll have to play with it a bit to tell.
2019-05-07 11:41:30 -07:00
Brian Warner
7eb1201379 connection: improve comments about protocol flow 2019-05-07 11:41:30 -07:00
Brian Warner
c933c5cc06 dilation-protocol.md: clarify a few things 2019-05-07 11:41:30 -07:00
Brian Warner
d9284cd4cb hints: avoid DNS lookups for all-numeric ipv4/ipv6 hints
This improves offline behavior for some tests, if we get spurious DNS lookup
errors.
2019-05-07 11:41:29 -07:00