Brian Warner
175fef2ab4
clean up wordlist handling
2017-04-06 12:22:44 -07:00
Brian Warner
ae95948c17
more tweaks
2017-04-06 12:22:44 -07:00
Brian Warner
4f1b352b2a
more work: allocator, input, shift responsibilities
2017-04-06 12:22:44 -07:00
Brian Warner
ae8652daf6
code: internal name changes
2017-04-06 12:22:44 -07:00
Brian Warner
0be5aba77d
begin worm on new Code machine
2017-04-06 12:22:44 -07:00
Brian Warner
e2c0f08216
minor renames for code-input helper stuff
2017-04-06 12:22:44 -07:00
Brian Warner
4bd9d3579c
go back to "input_code" instead of "type_code"
2017-04-06 12:22:44 -07:00
Brian Warner
276fdd3673
fix tests that exercise failure
2017-04-06 12:22:44 -07:00
Brian Warner
29f467e9d8
CLI: don't hide errors, fuss with verifier API
2017-04-06 12:22:44 -07:00
Brian Warner
921228a702
log errors better
2017-04-06 12:22:44 -07:00
Brian Warner
7c18fb81dd
only allow code to be set once
2017-04-06 12:22:44 -07:00
Brian Warner
2054e4c76b
test app versions
2017-04-06 12:22:44 -07:00
Brian Warner
5f9894ca63
API updates, make most tests pass, disable others
...
* finally wire up "application versions"
* remove when_verifier (which used to fire after key establishment, but
before the VERSION message was received or verified)
* fire when_verified and when_version at the same time (after VERSION is
verified), but with different args
2017-04-06 12:22:44 -07:00
Brian Warner
e518f2b799
throw KeyFormatError when given a code with spaces
2017-04-06 12:22:44 -07:00
Brian Warner
aebee61816
fix close behavior: Deferreds should errback once closed
2017-04-06 12:22:44 -07:00
Brian Warner
ddb83e9d59
wormhole: handle w.close() after error-induced closure
2017-04-06 12:21:00 -07:00
Brian Warner
2422ee0b88
disable NotWelcome test until signal_error is done
2017-04-06 12:21:00 -07:00
Brian Warner
9ca657a7c6
reenable TorManager
2017-04-06 12:21:00 -07:00
Brian Warner
4234e79161
test_wormhole: fix message-doubling test
2017-04-06 12:21:00 -07:00
Brian Warner
105d9cc59f
work on WelcomeHandler, still incomplete
2017-04-06 12:21:00 -07:00
Brian Warner
4c6cb1dddc
xfer_util: update to new API
2017-04-06 12:21:00 -07:00
Brian Warner
dfe9fd2395
RC: internal errors during ws_open should halt boss
2017-04-06 12:21:00 -07:00
Brian Warner
6ada8252b7
Code: handle being connected before being told what to do
2017-04-06 12:21:00 -07:00
Brian Warner
8ee342ad82
make cmd_send/cmd_receive basically work again
2017-04-06 12:21:00 -07:00
Brian Warner
e9f3107127
deliver app-versions up to Wormhole
2017-04-06 12:21:00 -07:00
Brian Warner
60a61c995b
implement w.derive_key()
2017-04-06 12:21:00 -07:00
Brian Warner
0474c39bab
tests: match API change
2017-04-06 12:21:00 -07:00
Brian Warner
c499fce9f5
change API (wormhole.create), start on serialization
2017-04-06 12:21:00 -07:00
Brian Warner
b7b8df17be
rename NameplateLister to Lister (unique prefix L)
2017-04-06 12:21:00 -07:00
Brian Warner
9a2d992815
reminder how ConnectionService should fail if first attempt fails
2017-04-06 12:21:00 -07:00
Brian Warner
88cb42f95b
test_machines: exercise state machines better
2017-04-06 12:21:00 -07:00
Brian Warner
2dcfb07ba1
Receive does not need access to Key
2017-04-06 12:21:00 -07:00
Brian Warner
db7b24086f
set no-cover on all state-definition lines, and set_trace
2017-04-06 12:21:00 -07:00
Brian Warner
610db612ba
improve error handling
...
errors raised while processing a received message will cause the Wormhole to
close-with-error, and any pending Deferreds will be errbacked
2017-04-06 12:21:00 -07:00
Brian Warner
fb92922918
terminator: renaming TODO note
2017-04-06 12:21:00 -07:00
Brian Warner
4222054903
nameplate: tolerate rx_claimed during shutdown
2017-04-06 12:21:00 -07:00
Brian Warner
4793208d4e
rewrite debug tracing, add to all machines
2017-04-06 12:21:00 -07:00
Brian Warner
b0c9c9bb4c
fix basic test
2017-04-06 12:21:00 -07:00
Brian Warner
1beae97ec4
fix things back to the previous point of not working
2017-04-06 12:21:00 -07:00
Brian Warner
26adaabe18
implement new split nameplate/mailbox/terminator
...
fails even worse than before, of course
2017-04-06 12:21:00 -07:00
Brian Warner
c8be988801
add some state-machine tracing
...
needs warner/automat/36-tracing branch
2017-04-06 12:21:00 -07:00
Brian Warner
97d1ff859b
logic bug: M.S4B.close() must not re-send RELEASE
2017-04-06 12:21:00 -07:00
Brian Warner
41b7bcfed5
working on fixes
2017-04-06 12:21:00 -07:00
Brian Warner
b7df5e21eb
more tests, still failing
2017-04-06 12:21:00 -07:00
Brian Warner
8a2810ba70
test basic code allocation
2017-04-06 12:21:00 -07:00
Brian Warner
ef1904bc52
get null test working (open and immediate close)
2017-04-06 12:21:00 -07:00
Brian Warner
c95b6d402c
Code: don't sent tx_allocate until we're connected
...
So Code needs connected/lost from the RendezvousConnector
2017-04-06 12:21:00 -07:00
Brian Warner
5d6989614b
work on top-level stuff
2017-04-06 12:21:00 -07:00
Brian Warner
7e7b43e910
start on top-level driver, wormhole.py
2017-04-06 12:21:00 -07:00
Brian Warner
88775d7f50
states.py: remove old file
2017-04-06 12:21:00 -07:00
Brian Warner
825370fdd2
cleanups, remove misc.py
2017-04-06 12:21:00 -07:00
Brian Warner
d4bedeafbf
general fixes
2017-04-06 12:21:00 -07:00
Brian Warner
20814a65f4
rename Wormhole (machine) to Boss, leave room for higher-level thing
2017-04-06 12:21:00 -07:00
Brian Warner
92f2b89d3e
journal: fix syntax
2017-04-06 12:21:00 -07:00
Brian Warner
a2ed35ceb8
remove old files, lots of type work
2017-04-06 12:21:00 -07:00
Brian Warner
3101ca51db
name cleanup
2017-04-06 12:21:00 -07:00
Brian Warner
80661392b6
build out all state machines
...
still early: automat is happy (they're syntactically valid), but the Outputs
are not implemented, and there are plenty of type mismatches
2017-04-06 12:21:00 -07:00
Brian Warner
9ae8091ec3
delete old files
2017-04-06 12:21:00 -07:00
Brian Warner
21cb62a4cf
move _c2.py out of the way, I might want it later
2017-04-06 12:21:00 -07:00
Brian Warner
b179e66d08
start on machine implementation: _key.py and _send.py
2017-04-06 12:21:00 -07:00
Brian Warner
40e0d6b663
more work, feels better now
2017-04-06 12:21:00 -07:00
Brian Warner
16c477424c
more demo work
2017-04-06 12:21:00 -07:00
Brian Warner
693e215d8b
sketching out a journal-based demo app
2017-04-06 12:21:00 -07:00
Brian Warner
20b80be342
remove stale machines
2017-04-06 12:21:00 -07:00
Brian Warner
3af375b173
finish Mailbox state machine, including close
2017-04-06 12:21:00 -07:00
Brian Warner
b934192f20
work on Mailbox machine
2017-04-06 12:21:00 -07:00
Brian Warner
11a80f0018
moving to separate machine class
2017-04-06 12:21:00 -07:00
Brian Warner
3bf762b4f7
try coding top-level WormholeMachine
2017-04-06 12:21:00 -07:00
Brian Warner
faab1e87d0
split _machine.py out
2017-04-06 12:21:00 -07:00
Brian Warner
17a90d87ac
tweaks
2017-04-06 12:21:00 -07:00
Brian Warner
35324a7911
my StateMachine can now render .dot
2017-04-06 12:21:00 -07:00
Brian Warner
0fe6cfd994
tweaks
2017-04-06 12:21:00 -07:00
Brian Warner
0b05c9ca5a
new experimental state-machine language
...
I think I want to express actions as transient states. _c2.py matches w4.dot
2017-04-06 12:21:00 -07:00
Brian Warner
057f616765
more experimentation
2017-04-06 12:21:00 -07:00
Brian Warner
18f7ab9308
more state-machine work
2017-04-06 12:21:00 -07:00
Brian Warner
63ae3c63fc
notes
2017-04-06 12:21:00 -07:00
Brian Warner
9e5bf452e3
rename
2017-04-06 12:21:00 -07:00
Brian Warner
3c9c0e58ab
move to _connection.py, add more state machines
...
Starting on defining manager state machines for nameplates, mailboxes, the
PAKE key-establishment process, and the bit that knows it can drop the
connection when both nameplates and mailboxes have been released.
2017-04-06 12:21:00 -07:00
Brian Warner
14c8e76364
onConnect, start manual tests, doesn't work yet
2017-04-06 12:21:00 -07:00
Brian Warner
b826e8c73c
hack args till they work, add ALLOW_CLOSE
...
the diagram is a lot simpler if the only way to shut things down is to
terminate the whole process
2017-04-06 12:21:00 -07:00
Brian Warner
d136028fa8
try adding args
2017-04-06 12:21:00 -07:00
Brian Warner
73f3d86107
state machine should be complete, I think
2017-04-06 12:21:00 -07:00
Brian Warner
94b1ed8739
starting to draw new state machines
2017-04-06 12:21:00 -07:00
Brian Warner
65db4729cd
rendezvous_websocket.py: add idempotency docs
2017-03-03 05:55:39 -08:00
Brian Warner
8d5770d8cc
tor_manager: allow port to be a 'long'
2017-03-03 05:49:36 -08:00
Brian Warner
b7ff5f05d5
transit: allow port to be a 'long'
2017-03-03 05:49:30 -08:00
Brian Warner
cf9053637c
test_util: free-space can be a 'long'
2017-03-03 05:49:25 -08:00
Brian Warner
71f34e4f5b
test/run_trial.py: protect run() with __name__
...
Without this, any import (e.g. when running "automat-visualize") caused the
tests to be run as a side-effect.
2017-02-22 18:03:33 -08:00
Brian Warner
6889ba088c
remove server/runner.py, no longer used
2017-02-22 17:52:14 -08:00
Shannon Mulloy
ffefb5ebdc
improve coverage with input mock
2017-02-05 15:42:49 -08:00
Shannon Mulloy
33526b2180
rx: _remove_existing after accept
2017-02-05 13:29:20 -08:00
Shannon Mulloy
56a0a1f584
rx: allow overwrite with --output-file= #73
2017-02-04 19:27:09 -08:00
Brian Warner
20619bcce7
send: set allowZip64=True, to handle large (>2GB) directories
...
refs #138
2017-02-02 11:40:24 -08:00
Brian Warner
ed674e5ffe
transit: increase connection timeout from 15s to 60s
...
I haven't seen any timeouts yet, but I'm thinking ahead to .onion connections
that might take longer than 15 seconds to establish.
2017-01-16 17:56:16 -05:00
Brian Warner
862820679c
don't hang when asked to send a zero-length file
...
closes #98
2017-01-16 17:29:40 -05:00
Brian Warner
f2704c6ce0
cli: oops, fix ssh args
...
wish there were some tests for this
2017-01-16 11:34:32 -05:00
Brian Warner
df62e16462
cli: handle tor args in 'ssh' subcommands
2017-01-16 11:29:20 -05:00
Brian Warner
47007273ec
rewrite Tor support (py2 only)
...
The new TorManager adds --launch-tor and --tor-control-port= arguments
(requiring the user to explicitly request a new Tor process, if that's what
they want). The default (when --tor is enabled) looks for a control port in
the usual places (/var/run/tor/control, localhost:9051, localhost:9151), then
falls back to hoping there's a SOCKS port in the usual
place (localhost:9050). (closes #64 )
The ssh utilities should now accept the same tor arguments as ordinary
send/receive commands. There are now full tests for TorManager, and basic
tests for how send/receive use it. (closes #97 )
Note that Tor is only supported on python2.7 for now, since txsocksx (and
therefore txtorcon) doesn't work on py3. You need to do "pip install
magic-wormhole[tor]" to get Tor support, and that will get you an inscrutable
error on py3 (referencing vcversioner, "install_requires must be a string or
list of strings", and "int object not iterable").
To run tests, you must install with the [dev] extra (to get "mock" and other
libraries). Our setup.py only includes "txtorcon" in the [dev] extra when on
py2, not on py3. Unit tests tolerate the lack of txtorcon (they mock out
everything txtorcon would provide), so they should provide the same coverage
on both py2 and py3.
2017-01-15 22:39:03 -05:00
Brian Warner
203216c0ff
cli: move TorArgs out to separate decorator
2017-01-15 22:21:29 -05:00
Brian Warner
aa772858f5
cli: print useful error when --tor is requested but unavailable
2017-01-15 17:35:46 -05:00
Brian Warner
33370bb1b3
transit: mention tor when describing connections that use it
2017-01-15 17:03:40 -05:00
Brian Warner
bcac0c74f3
codes: don't assume 'readline' has a __doc__
...
This fixes cygwin, which (for some reason) doesn't include docstrings in the
readline module.
closes #111
2017-01-14 17:56:49 -05:00
Brian Warner
b3763f9e78
show "you can use tabs" reminder if code was input without completion
...
refs #15
2017-01-12 16:14:42 -08:00
Brian Warner
62b069dea6
Wormhole: control stderr
2017-01-12 16:14:42 -08:00
Brian Warner
2e3a0d4a1d
change URL of public relay to new DNS names
...
These point to the same host (same IP address) as before, but the new names
are tied to the project's official domain (magic-wormhole.io), rather than my
personal one, so they can be managed independently.
2017-01-02 23:42:44 -05:00
Brian Warner
92f8c60b31
upgrade to versioneer-0.18
2017-01-01 14:10:57 -05:00
Brian Warner
7d995ca1d5
transit server: respect --blur-usage= by not logging connections
2017-01-01 13:00:35 -05:00
Brian Warner
b2fd899ac9
prioritize relay connections
...
closes #103
2016-12-31 00:33:00 -05:00
Brian Warner
8b864c3eae
parse/transmit/record hint priorities
...
Use --transit-helper=tcp:HOST:PORT:priority=1.3 to override the default 0.0 .
Larger (positive) priority numbers will be attempted first.
2016-12-31 00:32:42 -05:00
Brian Warner
bc17047983
test_transit: refactor, simplify
2016-12-31 00:31:23 -05:00
Brian Warner
1abe733a81
more coverage: parse_hint_argv
2016-12-31 00:25:15 -05:00
Brian Warner
fe6ff466d8
more coverage: parse_tcp_v1_hint
2016-12-31 00:21:34 -05:00
Brian Warner
511a73c491
improve coverage: Transit._endpoint_from_hint_obj
2016-12-31 00:09:58 -05:00
Brian Warner
7f54d810eb
remove unused+uncovered code
2016-12-31 00:08:26 -05:00
Brian Warner
e500f4a100
rx: tolerate duplicate peer messages
...
closes #121
2016-12-26 15:27:14 -05:00
Brian Warner
8b5d884636
add (failing/hanging) test of receiving duplicate messages
...
it's a pity this causes a hang, rather than a cleaner exception
2016-12-26 15:21:45 -05:00
Brian Warner
7ddf0d3c2d
server: forbid reclaiming previously-closed nameplates
...
at least by the same side. This forces the contour of claims (by any given
side) to be strictly unclaimed -> claimed -> released. The "claim"
action (unclaimed -> claimed) is idempotent and can be repeated arbitrarily,
as long as they happen on separate websocket connections. Likewise for the
"release" action (unclaimed -> released). But once a side releases a
nameplate, it should never roll so far back that it tries to claim it again,
especially because the first claim causes a mailbox to be allocated, and if
we manage to allocate two different mailboxes for a single nameplate, then
we've thrown idempotency out the window.
2016-12-25 20:09:55 -05:00
Brian Warner
3a4a3f544f
server: make close() idempotent
...
refs #118
2016-12-25 20:09:52 -05:00
Brian Warner
2c8d00e436
rendezvous_websocket.py: make release() idempotent
...
and make it possible to call release() even though you haven't called claim()
on that particular socket (releasing a claim that was made on some previous
websocket).
This should enable reconnecting clients, as well as intermittently-connected
"offline" clients.
refs #118
2016-12-25 20:09:48 -05:00
Brian Warner
b44fcf77da
test_server: improve debug message
2016-12-25 20:00:05 -05:00
Brian Warner
a746ca726a
test_server: factor out common utils
2016-12-25 19:13:00 -05:00
Brian Warner
3ad29379b5
server: fix comment
2016-12-25 14:36:50 -05:00
Brian Warner
9f72b72b76
split Transit out of test_server.py
2016-12-24 17:44:40 -05:00
Brian Warner
72dfb6eb1c
write progress/status messages to stderr, not stdout
...
This should leave stdout clean for use in `foo | wormhole send --text=-` and
`wormhole rx CODE >foo`, although the forms that want interactive code entry
probably won't work that way.
closes #99
2016-12-24 00:03:32 -05:00
Brian Warner
fde98b7c7e
more coverage
2016-12-23 22:22:39 -05:00
Brian Warner
db968900d9
test_server: improve coverage
2016-12-23 22:22:39 -05:00
Brian Warner
b8313b4595
dedup relays, include our own relay when connecting
...
* Previously, we only connected to the relay supplied by our partner, which
meant that if our relay differed from theirs, we'd never connect
* But we must de-duplicate the relays because when our relay *is* the same as
theirs, we'd have two copies, which means two connections. Now that we
deliver sided handshakes, we can tolerate that (previously, our two
connections would be matched with each other), but it's still wasteful.
This also fixes our handling of relay hints to accept multiple specific
endpoints in each RelayHint. The idea here is that we might know multiple
addresses for a single relay (maybe one IPv4, one IPv6, a Tor .onion, and an
I2P address). Any one connection is good enough, and the connections we can
try depend upon what local interfaces we discover. So a clever implementation
could refrain from making some of those connections when it knows the sibling
hints are just as good. However we might still have multiple relays entirely,
for which it is *not* sufficient to connect to just one.
The change is to create and process RelayV1Hint objects properly, and to set
the connection loop to try every endpoint inside each RelayV1Hint. This is
not "clever" (we could nominally make fewer connection attempts), but it's
plenty good for now.
refs #115
fix relay hints
2016-12-23 22:22:39 -05:00
Brian Warner
80ae9236df
make RelayV1Hint objects hashable/comparable
2016-12-23 22:22:39 -05:00
Brian Warner
e1546bf03f
Transit: send new (sided) handshakes
2016-12-23 22:22:39 -05:00
Brian Warner
5fcea701bb
transit server: accept both new (sided) and old (unsided) handshakes
2016-12-22 23:54:36 -05:00
Brian Warner
c7e4d57405
improve relay test
2016-12-22 23:53:29 -05:00
Brian Warner
f2e011bc9c
Add --appid to override the APPID, for subprocess-based wrappers.
...
Tools which use `wormhole send` under the hood should use a distinct
--appid= (setting the same URL-shaped value on both sides, starting with a
domain name related to the tool and/or its author), so wormhole codes used by
those tools won't compete for short channelids with other tools, or the
default text/file/directory-sending tool.
Closes #113
2016-12-22 15:44:13 -05:00
Brian Warner
57c0894774
cmd_send: flush args.stdout, in case it's different
2016-12-17 17:32:12 -08:00
Joey Hess
8bec79289a
send: flush stdout after displaying code
...
Fixes https://github.com/warner/magic-wormhole/issues/108
Apparently python defaults to buffering stdout when not outputting to
the terminal. It would be better IMHO if every line of stdout were
autoflushed, but based on
http://stackoverflow.com/questions/107705/disable-output-buffering
there's not a really good way to accomplish that in python.
2016-12-17 17:20:45 -04:00
Brian Warner
30af04d245
test_scripts: rename mode to be "slow-text"
2016-12-16 01:33:45 -08:00
Brian Warner
face9423dd
internals: ensure _API_establish_key is not called twice
2016-12-16 01:33:17 -08:00
laharah
2d1f474c60
rebased and fixed merge error
2016-12-16 01:06:21 -08:00
laharah
6bdaaf368c
Moved slow connection notification to stderr
...
added test for slow connection notifications
2016-12-16 01:06:21 -08:00
laharah
01318d1130
added notification to cmd_receive plus reactor cleanup
...
Added a try finally block around verify to ensure notification
deferreds are being cleaned out of the reactor
2016-12-16 01:03:01 -08:00
laharah
a2ab1863cf
added the new key waiter to be cleaned up on error in wormhole
...
Also, set new print statment to print to args.stdout
2016-12-16 01:03:01 -08:00
laharah
f786031f40
basic key established hook added to CLI send
2016-12-16 01:03:01 -08:00
laharah
680b01b3fc
added api hooks to get notification about key excange
...
added more coverage to establish key API hook
2016-12-16 01:03:01 -08:00
laharah
33fa6f6ede
tests for new establish_key wormhole hook
...
defered should behave similarly to the `verify` hook
2016-12-16 01:03:01 -08:00
Brian Warner
5c751eb3ed
fix tests on windows
2016-12-15 19:52:26 -08:00
Brian Warner
f3e1aab3a1
reject transfers when there isn't enough disk space available
...
closes #91
Also tweaks an error message: don't say "refusing to clobber pre-existing
file FOO" when we don't check that it's actually a file. Just say "..
pre-existing 'FOO'".
2016-12-15 19:52:26 -08:00
Brian Warner
b57928431a
add utility to estimate free disk space
2016-12-15 19:52:26 -08:00
Brian Warner
2596c58e4a
ipaddrs: import function from latest Tahoe
...
I'm hoping this will help with Cygwin (#13 ), by removing/bypassing the
assert(os.path.isabs) check.
2016-12-10 13:06:27 -08:00
Brian Warner
58f20d79a7
update to versioneer-0.17
...
This should fix the pyflakes error when running tox on an unpacked sdist.
2016-12-10 10:36:59 -08:00
Brian Warner
f0bfcd7ca4
fix some py2/py3-isms picked up by mypy
...
These happened to work, but it's probably best to get the types right.
2016-12-08 23:47:53 -08:00
Brian Warner
582cebfb5f
rx: don't reveal file-already-exists, just reject transfer
...
closes #74
2016-12-08 16:59:54 -08:00