1
1
Fork 0
mirror of https://github.com/oxen-io/lokinet synced 2023-12-14 06:53:00 +01:00
Commit graph

4679 commits

Author SHA1 Message Date
Jeff Becker aa251cdd01
make format 2018-06-18 18:05:02 -04:00
Jeff Becker 08c0318e82
initial path building stuff (broken) 2018-06-18 18:03:50 -04:00
Ryan Tharp 75f48aff32 correct pathfinder.cpp file 2018-06-18 01:44:15 -07:00
Ryan Tharp e88a1102e2 pathfinder interface design 2018-06-18 01:35:57 -07:00
Ryan Tharp 9e502a5beb added static constexpr back because I got it working and assuming it's preferred 2018-06-18 01:13:55 -07:00
Ryan Tharp f49bd89a42 Merge branch 'master' of https://github.com/neuroscr/llarp 2018-06-18 01:06:29 -07:00
Ryan Tharp 72800275cb fix llvm 3.8 linker error via https://stackoverflow.com/a/36670394/7697705 2018-06-18 01:01:42 -07:00
Ryan Tharp e00713687e fix debug messages 2018-06-18 00:55:55 -07:00
Ryan Tharp 7cd13b3f89 changed info message 2018-06-18 00:55:06 -07:00
Jeff Becker 54366c040c
make format 2018-06-17 11:26:00 -04:00
Jeff Becker aa53ab839a
fixes 2018-06-16 08:34:22 -04:00
Jeff Becker 9723a11195
clarify docs
post forwarding LRCM to logic thread
2018-06-15 10:33:38 -04:00
Jeff Becker 51c5cf8540
get rid of AF_PACKET for now 2018-06-14 16:42:30 -04:00
Jeff Becker 7da65fc1d7
don't send padding by default 2018-06-14 16:34:35 -04:00
Jeff Becker d3d14ba03a
fix infinite loop 2018-06-14 16:33:05 -04:00
Jeff 98f332f7a5 make it work on mac os with makefiles 2018-06-14 16:13:07 -04:00
Jeff Becker 22d4d5b3d0
make rcutil build 2018-06-14 15:28:27 -04:00
Jeff Becker 53eb3d0a59
default to c++11 2018-06-14 15:22:26 -04:00
Jeff 31c26d1a85
Merge pull request #5 from neuroscr/master
PATH_SEP, FS shim
2018-06-14 15:00:31 -04:00
Jeff Becker 0d85577fac
exponential backoff 2018-06-14 13:35:12 -04:00
Jeff Becker 11f9c3532b
default lookup job to not found 2018-06-14 11:46:45 -04:00
Jeff Becker 3dc5f3ddf6
be concise 2018-06-14 11:44:55 -04:00
Jeff Becker 1395cb8518
iterative search as well as recursive 2018-06-14 11:42:21 -04:00
Jeff Becker d645c07290
fix up dht 2018-06-14 11:39:54 -04:00
Jeff Becker 6e5ebd62bf
do dht lookup for unknown routers 2018-06-14 11:10:31 -04:00
Jeff Becker 1288148999
slightly better iwp session establish logic 2018-06-14 11:01:10 -04:00
Jeff Becker b3f1440b19
correct iwp session logic 2018-06-14 10:34:51 -04:00
Jeff Becker c28d17d2d5
verify rc sig in iwp 2018-06-14 10:27:28 -04:00
Jeff Becker 43bf2c3dbb
verify authenticity of iwp session (initial) 2018-06-14 10:26:03 -04:00
Jeff Becker ccf8574c03
make unit tests work 2018-06-14 10:04:42 -04:00
Ryan Tharp ce8d0f48b7 Merge branch 'master' of https://github.com/majestrate/llarp 2018-06-14 07:55:55 +00:00
Ryan Tharp 2b08fb1235 windows support 2018-06-14 00:49:56 -07:00
Ryan Tharp 72bc32dcf4 define PATH_SEP, llvm 3.8 fs shim 2018-06-14 00:48:42 -07:00
Jeff Becker d5fe7623fc
more dht stuff 2018-06-13 12:32:34 -04:00
Jeff Becker 9d66b3a1a6
xenial backport fix 2018-06-13 09:26:12 -04:00
Jeff Becker 09d6a46cad
correct encoding of aligned buffer 2018-06-13 09:18:18 -04:00
Jeff Becker c104abb9c2
make nodedb work 2018-06-13 09:09:19 -04:00
Jeff Becker 10ddc3da8a
async load rc 2018-06-13 08:58:51 -04:00
Ryan Tharp d8329b9955 Merge branch 'master' of https://github.com/majestrate/llarp 2018-06-13 11:53:18 +00:00
Ryan Tharp 7ad98cad9f was supposed to be in last commit, and context wasn't. Context just loads from disk now 2018-06-13 04:41:23 -07:00
Ryan Tharp 087f4c2f02 clean up llarp_nodedb_async_verify api, make setRC save to correct path 2018-06-13 04:40:49 -07:00
Jeff Becker 2ff92efea5
merge all 2018-06-13 07:37:44 -04:00
Jeff Becker 0d9025bc7d
Merge remote-tracking branch 'ryan/master' into dev 2018-06-13 07:31:34 -04:00
Ryan Tharp 1cf247e36e Merge branch 'master' of https://github.com/majestrate/llarp 2018-06-12 21:53:55 +00:00
Jeff Becker 4758bc119a
more onion routing code 2018-06-12 12:45:12 -04:00
Jeff Becker d2700f818b
comply with spec
update spec
2018-06-12 08:49:23 -04:00
Jeff Becker a8ab66f4f8
refactor to use AlignedBuffer for public key, shared secret, nonce, secret key etc 2018-06-12 07:57:14 -04:00
Jeff Becker f80cce26c6
encrypt in place 2018-06-11 09:44:49 -04:00
Jeff Becker 9d749d20ae
encrypted frames 2018-06-11 09:25:10 -04:00
Jeff Becker ec53cab169
more onion routing stuff 2018-06-10 10:05:48 -04:00
Jeff Becker a947806b57
start working on onion routing parts 2018-06-08 09:12:17 -04:00
Jeff Becker 3e293eed6c
lessen warning threshold for slow jobs 2018-06-07 12:30:54 -04:00
Jeff Becker 315798a0c4
* loopback test network
* fix various crashes and race conditions

* rename iwp-connect to connect in config

* rename iwp-links to bind in config

* always make a link just for outbound sessions even if no bind section is provided
2018-06-07 12:22:49 -04:00
Ryan Tharp 716f64634d compile fix and remove unneeded patterning 2018-06-07 02:40:06 -07:00
Ryan Tharp 70579e6846 finish implementing llarp_nodedb_async_verify, move context inside llarp_async_verify_rc 2018-06-07 02:36:30 -07:00
Ryan Tharp 373fbc58dc move struct so we can compile 2018-06-07 07:14:52 +00:00
Ryan Tharp 7b8ef635e4 Merge branch 'master' of https://github.com/majestrate/llarp 2018-06-07 06:49:57 +00:00
Jeff Becker a0f1d548f8
more shadow stuff 2018-06-06 17:23:57 -04:00
Jeff Becker 90611731a5
initial shadow test net 2018-06-06 13:02:57 -04:00
Jeff Becker e12bd9442f
expose multi process/single process option 2018-06-06 08:49:46 -04:00
Jeff Becker 0278ba559c
add single threaded mode for shadow 2018-06-06 08:46:26 -04:00
Jeff Becker 4fd0ef6984
timer fixes 2018-06-05 07:48:06 -04:00
Jeff Becker d3782cb3ab
update timer 2018-06-04 13:22:14 -04:00
Ryan Tharp d0196fdc65 comment and error output 2018-06-04 06:11:13 -07:00
Ryan Tharp a7abaa7f02 llvm 3.8 fixes 2018-06-04 06:10:19 -07:00
Ryan Tharp bbf9f2274c fix kqueue on OSX 2018-06-04 06:08:35 -07:00
Ryan Tharp b7fe7e465c llvm 3.8 compat 2018-06-04 06:07:31 -07:00
Ryan Tharp 6e1a0e1702 Merge branch 'master' of https://github.com/majestrate/llarp 2018-06-04 12:59:20 +00:00
Jeff Becker d5e232d7c5
advance iterator 2018-06-04 07:59:29 -04:00
Jeff Becker eae8a81e35
fix timer a bit more 2018-06-04 07:49:37 -04:00
Jeff Becker 98130d0dcd
fix up timer 2018-06-04 07:46:02 -04:00
Ryan Tharp 87c6571bc2 fixed context, change deletion method 2018-06-04 01:42:21 +00:00
Ryan Tharp 129605cc36 Merge branch 'master' of https://github.com/neuroscr/llarp 2018-06-04 00:43:11 +00:00
Ryan Tharp 56fcaaa567 Merge branch 'master' of https://github.com/majestrate/llarp 2018-06-03 22:49:04 +00:00
Jeff Becker 4ce92ae9d1
xenial 2018-06-03 11:41:41 -04:00
Jeff Becker c9fe6c374f
try fixing timer again 2018-06-03 11:40:12 -04:00
Jeff Becker f8be941bce
more timer fixing shit 2018-06-03 11:31:26 -04:00
Jeff Becker 1effcf88f8
try fixing timer 2018-06-03 11:27:22 -04:00
Jeff Becker c4fef111d2
add breaak 2018-06-03 11:04:46 -04:00
Jeff Becker 000658d7b0
fix hashing 2018-06-03 11:02:00 -04:00
Jeff Becker 5fb1953ee9
more checks 2018-06-03 10:41:59 -04:00
Jeff Becker 0416bda24f
reassemble in order 2018-06-03 10:34:00 -04:00
Jeff Becker 698cc0489e
logging 2018-06-03 10:28:22 -04:00
Jeff Becker 4231243931
more iwp tweaking 2018-06-03 10:06:56 -04:00
Jeff Becker 70d19621ee
immediate acknoledge xmit and then trasnmit frags 2018-06-03 09:49:12 -04:00
Jeff Becker adeb3ca837
xenial backport 2018-06-03 09:39:13 -04:00
Jeff Becker c2d76dce3a
inbound message fixes 2018-06-03 09:36:38 -04:00
Jeff Becker 2075f9a6b8
add discard message for testing 2018-06-03 09:04:51 -04:00
Jeff Becker 04628874cd
handle message fragmentation better 2018-06-03 08:35:50 -04:00
Jeff Becker 0d4baa924e
bounds check 2018-06-03 08:17:06 -04:00
Jeff Becker a3628f153a
fix 2018-06-02 10:44:26 -04:00
Jeff Becker 0acf142619
make it compile 2018-06-02 10:41:30 -04:00
Jeff Becker 840c7c4925
fix timeout issue 2018-06-02 10:40:41 -04:00
Jeff Becker 1c2155284e
only keepalive when established 2018-06-02 09:46:35 -04:00
Jeff Becker 7ea64305ab
keepalive every tick 2018-06-02 09:42:19 -04:00
Jeff Becker 3fd79f73c6
increment iterator 2018-06-02 09:36:59 -04:00
Jeff Becker 3ad3dbd29d
add debug 2018-06-02 09:34:06 -04:00
Jeff Becker c6b3a45eca
actually call session ticker 2018-06-02 09:22:08 -04:00
Jeff Becker 87aabefddc
some fixups on link layer
only add trusted routers to DHT
2018-06-02 09:18:11 -04:00
Ryan Tharp a6f3e09d8b remove debug 2018-06-01 15:41:10 -07:00
Ryan Tharp 34dca85780 fix BSD compile issue, added some debug, OSX compile fixes 2018-06-01 15:39:30 -07:00
Ryan Tharp 3f6a5c4ca5 Merge branch 'master' of https://github.com/majestrate/llarp 2018-06-01 21:55:48 +00:00
Jeff Becker fe7388bd69
make it work 2018-06-01 17:47:38 -04:00
Jeff Becker 620b9616a6
initial dht implementation 2018-06-01 17:35:17 -04:00
Jeff Becker 1a6a0755e3
fix compile warning 2018-06-01 14:05:40 -04:00
Jeff Becker 3db5bffbbd
fix xenial backport 2018-06-01 13:54:21 -04:00
Jeff Becker 9816fd65e9
* logging refactor to be concise
* don't inline bencode

* refactor initial start of dht code a bit
2018-06-01 13:47:37 -04:00
Jeff Becker 0724479eba
fix logging 2018-06-01 10:24:58 -04:00
Jeff Becker 5649d261ae
start fleshing out dht subsystem a bit 2018-06-01 10:08:54 -04:00
Ryan Tharp 40dedf7471 start of async version of verifying router contacts 2018-05-31 06:08:06 -07:00
Ryan Tharp ee28623dbf important threading note 2018-05-31 06:07:52 -07:00
Ryan Tharp 5f3c2b4499 implement missing llarp_alloc struct 2018-05-31 06:06:28 -07:00
Ryan Tharp 563f94773b Merge branch 'master' of https://github.com/majestrate/llarp 2018-05-31 09:32:38 +00:00
Jeff Becker fe19314484
more stuff 2018-05-30 16:56:47 -04:00
Ryan Tharp eebb36683c new getter/setter style API 2018-05-29 17:40:02 -07:00
Jeff Becker c45e9e9f0a
add frame counter 2018-05-29 14:56:00 -04:00
Jeff Becker 1b1969891e
make reused sessions alive again 2018-05-29 14:36:40 -04:00
Jeff Becker db48e82841
fix up naming 2018-05-29 14:32:47 -04:00
Jeff Becker ba87b1036a
initialize inner member 2018-05-29 14:17:28 -04:00
Jeff Becker 2bcb4d30fd
handle intro/introack better 2018-05-29 14:08:39 -04:00
Jeff Becker 3425e73a9c
try fixing race 2018-05-29 13:45:33 -04:00
Jeff Becker 052b53df69
use unorderd_map not map 2018-05-29 12:11:32 -04:00
Jeff Becker 21ed6de756
try fixing multi session 2018-05-29 12:01:28 -04:00
Jeff Becker 55be8ee6a3
handle frag messages in iwp 2018-05-29 11:47:10 -04:00
Jeff Becker 6ce74fe130
use emplace not try_emplace for backport 2018-05-29 10:57:13 -04:00
Jeff Becker 8351f19e9a
retry on session already made 2018-05-29 09:45:47 -04:00
Jeff Becker 31cbfd255e
ipv4 fixes 2018-05-29 09:40:26 -04:00
Ryan Tharp 9f2d7f717a Merge branch 'master' of https://github.com/majestrate/llarp 2018-05-29 12:21:50 +00:00
Ryan Tharp 3808ea1215 FreeBSD use specific FreeBSD pthread naming api 2018-05-29 05:16:44 -07:00
Ryan Tharp a57cffa481 AF_LINK support (AF_PACKET guard), fallback to ipv4 if ipv6 doesn't connect 2018-05-29 05:16:08 -07:00
Jeff Becker bee7c2b271
ipv4 fixes 2018-05-29 08:15:48 -04:00
Ryan Tharp d7672aa37a AF_PACKET guards 2018-05-29 05:15:34 -07:00
Ryan Tharp 5efbb00189 kqueue support 2018-05-29 05:14:50 -07:00
Ryan Tharp 78007425fd use FreeBSD API for setting thread names 2018-05-29 05:13:33 -07:00
Jeff Becker 57c39eeded
prevent double free 2018-05-28 16:58:10 -04:00
Jeff Becker a00a0622d1
more docs
more logging
2018-05-28 16:51:15 -04:00
Jeff Becker 56a0efd41d
remove logging 2018-05-28 10:28:26 -04:00
Jeff Becker 24caf1fc8c
docs 2018-05-28 10:26:16 -04:00
Jeff Becker 02d785d30c
add release targets to makefile for future
purge llarp_alloc

colored logging
2018-05-28 09:49:44 -04:00
Jeff Becker e58bd10b23
add python ffi example wrapper code 2018-05-27 15:13:25 -04:00
Jeff Becker 3f21cc5865
make c api for main 2018-05-27 14:03:10 -04:00
Jeff Becker 4a3a0fc556
make an application context to simplify the main function 2018-05-27 13:44:01 -04:00
Jeff Becker 956973cb84
use configurable number of net io threads 2018-05-27 12:45:04 -04:00
Jeff Becker bfaa837bce
refactor everything to use logger 2018-05-27 10:04:30 -04:00
Jeff Becker 39b1714f27
add minimal logger
move some printf to use logger

remove warnings from bencode.h
2018-05-27 09:42:55 -04:00
Jeff Becker 720452770b
* add removing timer jobs
* remove timer before session timeout

* don't reschedule timer right before timeout
2018-05-27 08:49:10 -04:00
Jeff Becker c51d29a0c6
add link level keepalive
remove debugging messages

start handling more messages
2018-05-26 14:31:45 -04:00
Jeff Becker 93f0e03958
handle inter node messages
currently only handling LIM
2018-05-25 13:52:10 -04:00
Jeff Becker c2ef57d9a2
Merge remote-tracking branch 'ryan/master' 2018-05-25 08:27:54 -04:00
Jeff Becker 7b7cc712d5
fix types 2018-05-25 08:24:31 -04:00
Jeff Becker dc92b98c9c
more protocol changes to make it saner.
iwp sessions now can derive session key
2018-05-24 12:04:34 -04:00
Jeff Becker 4929bf0da8
fix with gcc and use default c++ compiler 2018-05-24 09:03:11 -04:00
Jeff Becker b2a9605745
it does stuff :DDDDDDDD 2018-05-23 16:37:43 -04:00
Jeff Becker d426f9e65e
more 2018-05-23 09:49:00 -04:00
Ryan Tharp 4d911f94d6 remove debug 2018-05-22 23:54:42 +00:00
Ryan Tharp 9ea9a6b527 fix struct declaration to make gcc 7.3 happy 2018-05-22 23:17:37 +00:00
Jeff Becker d8631bb2b5
fix leaks 2018-05-22 15:19:06 -04:00
Jeff Becker 71c34231b2
Merge remote-tracking branch 'ryan/master' 2018-05-22 14:41:38 -04:00
Jeff Becker bc9e32d690
clang format and lots of stupid bug fixes 2018-05-22 11:54:19 -04:00
Jeff Becker ae5243cc95
add clang format but don't format YET 2018-05-21 10:28:15 -04:00
Ryan Tharp ea5f4ba2d5 Merge branch 'master' of https://github.com/majestrate/llarp 2018-05-21 13:22:02 +00:00
Jeff Becker 4e19ce8191
add buffer helper 2018-05-21 09:17:07 -04:00
Ryan Tharp 7495c2fc19 remove unneeded temporary variable per code review 2018-05-21 12:57:37 +00:00
Ryan Tharp 9e1d8bd943 u key (last updated), minor whitespace 2018-05-21 12:44:50 +00:00
Ryan Tharp fa49085e43 llarp_findOrCreateIdentity(), llarp_rc_write(), llarp_rc_clear(), llarp_rc_addr_list_iter(), llarp_rc_set_addrs(), llarp_rc_set_pubkey(), llarp_rc_sign(), minor whitespace cleanup 2018-05-21 12:43:32 +00:00
Jeff Becker cc97da29d4
named threadpool 2018-05-20 14:56:34 -04:00
Jeff Becker bffb4c3f3a
fixes 2018-05-20 13:55:54 -04:00
Jeff Becker 6cc469775f
implement rc signing 2018-05-20 13:45:47 -04:00
Jeff Becker 0f6c0d8a56
start fixing up main 2018-05-20 12:15:16 -04:00
Jeff Becker 87ae0aa972
make it nicer 2018-05-20 11:35:59 -04:00
Jeff Becker 14b795a384
refactor async crypto and remove old unneeded code 2018-05-20 10:54:52 -04:00
Jeff Becker a3a359de8e
update docs and make it compile 2018-05-20 09:43:42 -04:00
Jeff Becker d86c459cdb
more 2018-05-19 13:21:56 -04:00
Jeff Becker 0cc6d175cf
does not compile. update spec. 2018-05-19 09:36:42 -04:00
Jeff Becker 14d2de8edb
add initial iwp async crypto for intro 2018-05-18 16:08:57 -04:00
Jeff Becker 4939c7a5e3
fix threading and stopping 2018-05-18 14:27:13 -04:00
Jeff Becker e695906c0c
make timer work 2018-05-18 13:50:21 -04:00
Jeff Becker ce8e5088c4
more meat for iwp 2018-05-18 13:10:48 -04:00
Jeff Becker 3f675f0290
update iwp 2018-05-18 12:09:45 -04:00
Jeff Becker d6b5fc5224
update iwp 2018-05-18 12:08:47 -04:00
Jeff Becker 9deafe7ce8
more 2018-05-18 10:48:30 -04:00
Jeff Becker 8b8deb49ba
remove old file 2018-05-18 10:40:42 -04:00
Jeff Becker cb351ae9ff
refactor iwp, get rid of dtls 2018-05-18 10:40:06 -04:00
Jeff Becker cb53d66869
mbedtls 2018-05-18 09:54:15 -04:00
Jeff Becker 4959067af2
it binds 2018-05-18 09:17:58 -04:00
Jeff Becker 64d5265102
more 2018-05-18 08:39:17 -04:00
Jeff Becker f022a5bcdf
more 2018-05-17 16:00:58 -04:00
Jeff Becker 420f49a288
fix leak 2018-05-16 14:16:23 -04:00
Jeff Becker 91a9108300
refactor 2018-05-16 14:13:18 -04:00
Jeff Becker c0ff64868d
more meat 2018-05-16 12:41:20 -04:00
Jeff Becker 69498bd104
fix warnings 2018-05-16 11:53:28 -04:00
Jeff Becker 7b46e44859
more 2018-05-16 11:49:16 -04:00
Jeff Becker f7e52a1878
more 2018-05-16 11:30:05 -04:00
Jeff Becker e4005102ba
cleanup 2018-05-16 10:09:02 -04:00
Jeff Becker 63150549fc
start moving to cmake 2018-05-16 09:56:51 -04:00
Jeff Becker 45cd73b1c2
more gutts 2018-05-13 14:07:36 -04:00
Jeff Becker 76d885d39e
more 2018-05-10 19:32:46 -04:00
Jeff Becker 4cc5059cbe
format 2018-04-30 14:18:34 -04:00
Jeff Becker 8aa898aef8
more 2018-04-30 14:18:18 -04:00
Jeff Becker a5611e2206
format 2018-04-30 12:14:29 -04:00
Jeff Becker 8181670bf3
format 2018-04-30 12:14:20 -04:00
Jeff Becker a7703b0dbc
refactor threadpool 2018-04-30 10:57:13 -04:00
Jeff Becker d31391d856
start removing libuv 2018-04-30 09:18:57 -04:00
Jeff Becker 02dfb7c3a9
more 2018-04-08 08:18:16 -04:00
Jeff Becker 09be72b5b6
clang format 2018-04-05 10:43:16 -04:00
Jeff Becker 84ab8a792a
more 2018-04-05 10:38:22 -04:00
Jeff Becker 2687d9aeee
more 2018-04-05 10:23:14 -04:00
Jeff Becker 8c2bbbb2eb
more 2018-04-04 12:10:27 -04:00
Jeff Becker dcc5e6e348
more 2018-04-04 11:19:11 -04:00
Jeff Becker a449dffc09
more 2018-04-04 09:54:37 -04:00
Jeff Becker 6da13c876c
format 2018-02-20 19:11:26 -05:00
Jeff Becker 284c55f5aa
more optimizations 2018-02-18 13:45:06 -05:00
Jeff Becker 3bcc5604a6
don't use exp2 when allocating memory :D 2018-02-18 13:22:10 -05:00
Jeff Becker 3e4fe88b26
format 2018-02-18 13:15:45 -05:00
Jeff Becker b949e61752
omg optimize 2018-02-15 12:09:27 -05:00
Jeff 43f9be08c8 format 2018-02-01 17:34:04 -05:00
Jeff 8c3bd25825 fix on os x 2018-02-01 17:10:47 -05:00
Jeff Becker 212165500d
more 2018-02-01 17:04:58 -05:00
Jeff Becker 58247343bf
format 2018-02-01 12:07:01 -05:00
Jeff Becker 1fdfdc0244
more 2018-02-01 12:06:49 -05:00
Jeff Becker ae76b6b376
google format 2018-02-01 08:21:00 -05:00
Jeff Becker 4718281202
awe yeh 2018-01-31 14:59:26 -05:00
Jeff Becker de3ddbb93e
clang-format 2018-01-29 09:27:24 -05:00
Jeff Becker a704a28f34
make it compile and link 2018-01-29 09:19:00 -05:00
Jeff Becker f50a49b7cb
progress (does not compile) 2018-01-26 20:18:10 -05:00
Jeff Becker b7d4499f43
more 2018-01-26 09:17:51 -05:00
Jeff Becker 485e780552
sarp -> llarp 2018-01-25 11:24:33 -05:00
Jeff Becker 045a692522
more 2018-01-25 11:11:45 -05:00
Jeff Becker 62fb43a52c
refactor 2018-01-25 10:38:14 -05:00