aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authordch <dch@FreeBSD.org>2018-10-24 06:32:09 +0800
committerdch <dch@FreeBSD.org>2018-10-24 06:32:09 +0800
commitc7738a6597895b0b3cdebb8760049200bb3ff144 (patch)
treed02dffcee9fe4ed84857d1c42a460d222331e9ac /net
parentf3d3945187d49cfddeb43e4d2a74fe4725e91d61 (diff)
downloadfreebsd-ports-gnome-c7738a6597895b0b3cdebb8760049200bb3ff144.tar.gz
freebsd-ports-gnome-c7738a6597895b0b3cdebb8760049200bb3ff144.tar.zst
freebsd-ports-gnome-c7738a6597895b0b3cdebb8760049200bb3ff144.zip
new port: net/rabbiteer: amqp/rabbitmq command-line tool
Send and receive messages via a RabbitMQ message broker Approved by: jrm (mentor) Differential Revision: https://reviews.freebsd.org/D17558
Diffstat (limited to 'net')
-rw-r--r--net/Makefile1
-rw-r--r--net/rabbiteer/Makefile103
-rw-r--r--net/rabbiteer/distinfo143
-rw-r--r--net/rabbiteer/files/patch-Cargo.lock282
-rw-r--r--net/rabbiteer/files/patch-Cargo.toml17
-rw-r--r--net/rabbiteer/files/patch-README.md20
-rw-r--r--net/rabbiteer/files/patch-src_client.rs266
-rw-r--r--net/rabbiteer/files/patch-src_error.rs71
-rw-r--r--net/rabbiteer/files/patch-src_main.rs171
-rw-r--r--net/rabbiteer/files/patch-src_output.rs173
-rw-r--r--net/rabbiteer/files/patch-src_publish.rs137
-rw-r--r--net/rabbiteer/files/patch-src_subscribe.rs147
-rw-r--r--net/rabbiteer/pkg-descr4
13 files changed, 1535 insertions, 0 deletions
diff --git a/net/Makefile b/net/Makefile
index 94e14b24cc38..eed6a78a773f 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -1185,6 +1185,7 @@
SUBDIR += queso
SUBDIR += quiterss
SUBDIR += quoted
+ SUBDIR += rabbiteer
SUBDIR += rabbitmq
SUBDIR += rabbitmq-c
SUBDIR += rabbitmq-c-devel
diff --git a/net/rabbiteer/Makefile b/net/rabbiteer/Makefile
new file mode 100644
index 000000000000..07b11e19dd2e
--- /dev/null
+++ b/net/rabbiteer/Makefile
@@ -0,0 +1,103 @@
+# $FreeBSD$
+
+PORTNAME= rabbiteer
+DISTVERSION= 1.4.1
+CATEGORIES= net
+
+MAINTAINER= dch@FreeBSD.org
+COMMENT= AMQP & RabbitMQ command-line tool
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENCE-MIT
+
+USES= cargo ssl
+USE_GITHUB= yes
+
+GH_ACCOUNT= algesten
+GH_PROJECT= ${PORTNAME}-rs
+GH_TAGNAME= c881238
+
+CARGO_CRATES= aho-corasick-0.5.3 \
+ amq-proto-0.1.0 \
+ amqp-0.1.1 \
+ ansi_term-0.11.0 \
+ atty-0.2.11 \
+ backtrace-0.3.9 \
+ backtrace-sys-0.1.24 \
+ bit-vec-0.4.4 \
+ bitflags-0.7.1 \
+ bitflags-1.0.4 \
+ byteorder-0.5.3 \
+ cc-1.0.24 \
+ cfg-if-0.1.5 \
+ clap-2.32.0 \
+ cloudabi-0.0.3 \
+ conduit-mime-types-0.7.3 \
+ enum_primitive-0.1.1 \
+ env_logger-0.3.5 \
+ error-chain-0.10.0 \
+ fuchsia-zircon-0.3.3 \
+ fuchsia-zircon-sys-0.3.3 \
+ gcc-0.3.55 \
+ gdi32-sys-0.2.0 \
+ idna-0.1.5 \
+ kernel32-sys-0.2.2 \
+ lazy_static-0.2.11 \
+ libc-0.2.43 \
+ libressl-pnacl-sys-2.1.6 \
+ log-0.3.9 \
+ log-0.4.5 \
+ matches-0.1.8 \
+ memchr-0.1.11 \
+ num-traits-0.1.43 \
+ num-traits-0.2.5 \
+ openssl-0.7.14 \
+ openssl-sys-0.7.17 \
+ openssl-sys-extras-0.7.14 \
+ percent-encoding-1.0.1 \
+ pkg-config-0.3.14 \
+ pnacl-build-helper-1.4.11 \
+ rand-0.4.3 \
+ rand-0.5.5 \
+ rand_core-0.2.1 \
+ redox_syscall-0.1.40 \
+ redox_termios-0.1.1 \
+ regex-0.1.80 \
+ regex-syntax-0.3.9 \
+ remove_dir_all-0.5.1 \
+ rustc-demangle-0.1.9 \
+ rustc-serialize-0.3.24 \
+ same-file-0.1.3 \
+ strsim-0.7.0 \
+ tempdir-0.3.7 \
+ termion-1.5.1 \
+ textwrap-0.10.0 \
+ thread-id-2.0.0 \
+ thread_local-0.2.7 \
+ unicode-bidi-0.3.4 \
+ unicode-normalization-0.1.7 \
+ unicode-width-0.1.5 \
+ url-1.7.1 \
+ user32-sys-0.2.0 \
+ utf8-ranges-0.1.3 \
+ vec_map-0.8.1 \
+ walkdir-1.0.7 \
+ winapi-0.2.8 \
+ winapi-0.3.5 \
+ winapi-build-0.1.1 \
+ winapi-i686-pc-windows-gnu-0.4.0 \
+ winapi-x86_64-pc-windows-gnu-0.4.0
+
+PLIST_FILES= bin/rabbiteer
+
+PORTDOCS= README.md
+
+OPTIONS_DEFINE= DOCS
+
+post-install:
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/rabbiteer
+
+post-install-DOCS-on:
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} README.md ${STAGEDIR}${DOCSDIR})
+
+.include <bsd.port.mk>
diff --git a/net/rabbiteer/distinfo b/net/rabbiteer/distinfo
new file mode 100644
index 000000000000..b5aefe39eff2
--- /dev/null
+++ b/net/rabbiteer/distinfo
@@ -0,0 +1,143 @@
+TIMESTAMP = 1539546799
+SHA256 (rust/crates/aho-corasick-0.5.3.tar.gz) = ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66
+SIZE (rust/crates/aho-corasick-0.5.3.tar.gz) = 252052
+SHA256 (rust/crates/amq-proto-0.1.0.tar.gz) = 66d79639b71f74c7006c12683cc2ff221615a51a741688fa7798ccd080dc54d3
+SIZE (rust/crates/amq-proto-0.1.0.tar.gz) = 14517
+SHA256 (rust/crates/amqp-0.1.1.tar.gz) = e1a60ccc700b6a79480c8ee0140f231db4a23b7b6ff18581f84f7091f6bbcce4
+SIZE (rust/crates/amqp-0.1.1.tar.gz) = 19709
+SHA256 (rust/crates/ansi_term-0.11.0.tar.gz) = ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b
+SIZE (rust/crates/ansi_term-0.11.0.tar.gz) = 17087
+SHA256 (rust/crates/atty-0.2.11.tar.gz) = 9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652
+SIZE (rust/crates/atty-0.2.11.tar.gz) = 5916
+SHA256 (rust/crates/backtrace-0.3.9.tar.gz) = 89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a
+SIZE (rust/crates/backtrace-0.3.9.tar.gz) = 31054
+SHA256 (rust/crates/backtrace-sys-0.1.24.tar.gz) = c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0
+SIZE (rust/crates/backtrace-sys-0.1.24.tar.gz) = 522332
+SHA256 (rust/crates/bit-vec-0.4.4.tar.gz) = 02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f
+SIZE (rust/crates/bit-vec-0.4.4.tar.gz) = 17895
+SHA256 (rust/crates/bitflags-0.7.1.tar.gz) = ab1c7dc97f39523ffa63f3096291612e630cf3ed75aa6b9fad436bac4c700274
+SIZE (rust/crates/bitflags-0.7.1.tar.gz) = 11121
+SHA256 (rust/crates/bitflags-1.0.4.tar.gz) = 228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12
+SIZE (rust/crates/bitflags-1.0.4.tar.gz) = 15282
+SHA256 (rust/crates/byteorder-0.5.3.tar.gz) = 0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855
+SIZE (rust/crates/byteorder-0.5.3.tar.gz) = 8643
+SHA256 (rust/crates/cc-1.0.24.tar.gz) = 70f2a88c2e69ceee91c209d8ef25b81fc1a65f42c7f14dfd59d1fed189e514d1
+SIZE (rust/crates/cc-1.0.24.tar.gz) = 43132
+SHA256 (rust/crates/cfg-if-0.1.5.tar.gz) = 0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3
+SIZE (rust/crates/cfg-if-0.1.5.tar.gz) = 7363
+SHA256 (rust/crates/clap-2.32.0.tar.gz) = b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e
+SIZE (rust/crates/clap-2.32.0.tar.gz) = 196073
+SHA256 (rust/crates/cloudabi-0.0.3.tar.gz) = ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f
+SIZE (rust/crates/cloudabi-0.0.3.tar.gz) = 22156
+SHA256 (rust/crates/conduit-mime-types-0.7.3.tar.gz) = 95ca30253581af809925ef68c2641cc140d6183f43e12e0af4992d53768bd7b8
+SIZE (rust/crates/conduit-mime-types-0.7.3.tar.gz) = 15889
+SHA256 (rust/crates/enum_primitive-0.1.1.tar.gz) = be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180
+SIZE (rust/crates/enum_primitive-0.1.1.tar.gz) = 4186
+SHA256 (rust/crates/env_logger-0.3.5.tar.gz) = 15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f
+SIZE (rust/crates/env_logger-0.3.5.tar.gz) = 5950
+SHA256 (rust/crates/error-chain-0.10.0.tar.gz) = d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8
+SIZE (rust/crates/error-chain-0.10.0.tar.gz) = 18432
+SHA256 (rust/crates/fuchsia-zircon-0.3.3.tar.gz) = 2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82
+SIZE (rust/crates/fuchsia-zircon-0.3.3.tar.gz) = 22565
+SHA256 (rust/crates/fuchsia-zircon-sys-0.3.3.tar.gz) = 3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7
+SIZE (rust/crates/fuchsia-zircon-sys-0.3.3.tar.gz) = 7191
+SHA256 (rust/crates/gcc-0.3.55.tar.gz) = 8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2
+SIZE (rust/crates/gcc-0.3.55.tar.gz) = 37262
+SHA256 (rust/crates/gdi32-sys-0.2.0.tar.gz) = 0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518
+SIZE (rust/crates/gdi32-sys-0.2.0.tar.gz) = 7643
+SHA256 (rust/crates/idna-0.1.5.tar.gz) = 38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e
+SIZE (rust/crates/idna-0.1.5.tar.gz) = 258735
+SHA256 (rust/crates/kernel32-sys-0.2.2.tar.gz) = 7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d
+SIZE (rust/crates/kernel32-sys-0.2.2.tar.gz) = 24537
+SHA256 (rust/crates/lazy_static-0.2.11.tar.gz) = 76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73
+SIZE (rust/crates/lazy_static-0.2.11.tar.gz) = 12361
+SHA256 (rust/crates/libc-0.2.43.tar.gz) = 76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d
+SIZE (rust/crates/libc-0.2.43.tar.gz) = 353810
+SHA256 (rust/crates/libressl-pnacl-sys-2.1.6.tar.gz) = cbc058951ab6a3ef35ca16462d7642c4867e6403520811f28537a4e2f2db3e71
+SIZE (rust/crates/libressl-pnacl-sys-2.1.6.tar.gz) = 2697179
+SHA256 (rust/crates/log-0.3.9.tar.gz) = e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b
+SIZE (rust/crates/log-0.3.9.tar.gz) = 16686
+SHA256 (rust/crates/log-0.4.5.tar.gz) = d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f
+SIZE (rust/crates/log-0.4.5.tar.gz) = 22221
+SHA256 (rust/crates/matches-0.1.8.tar.gz) = 7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08
+SIZE (rust/crates/matches-0.1.8.tar.gz) = 2216
+SHA256 (rust/crates/memchr-0.1.11.tar.gz) = d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20
+SIZE (rust/crates/memchr-0.1.11.tar.gz) = 6977
+SHA256 (rust/crates/num-traits-0.1.43.tar.gz) = 92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31
+SIZE (rust/crates/num-traits-0.1.43.tar.gz) = 7659
+SHA256 (rust/crates/num-traits-0.2.5.tar.gz) = 630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe
+SIZE (rust/crates/num-traits-0.2.5.tar.gz) = 39136
+SHA256 (rust/crates/openssl-0.7.14.tar.gz) = c4117b6244aac42ed0150a6019b4d953d28247c5dd6ae6f46ae469b5f2318733
+SIZE (rust/crates/openssl-0.7.14.tar.gz) = 63824
+SHA256 (rust/crates/openssl-sys-0.7.17.tar.gz) = 89c47ee94c352eea9ddaf8e364be7f978a3bb6d66d73176572484238dd5a5c3f
+SIZE (rust/crates/openssl-sys-0.7.17.tar.gz) = 12097
+SHA256 (rust/crates/openssl-sys-extras-0.7.14.tar.gz) = 11c5e1dba7d3d03d80f045bf0d60111dc69213b67651e7c889527a3badabb9fa
+SIZE (rust/crates/openssl-sys-extras-0.7.14.tar.gz) = 3871
+SHA256 (rust/crates/percent-encoding-1.0.1.tar.gz) = 31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831
+SIZE (rust/crates/percent-encoding-1.0.1.tar.gz) = 10057
+SHA256 (rust/crates/pkg-config-0.3.14.tar.gz) = 676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c
+SIZE (rust/crates/pkg-config-0.3.14.tar.gz) = 13565
+SHA256 (rust/crates/pnacl-build-helper-1.4.11.tar.gz) = dfbe13ee77c06fb633d71c72438bd983286bb3521863a753ade8e951c7efb090
+SIZE (rust/crates/pnacl-build-helper-1.4.11.tar.gz) = 5447
+SHA256 (rust/crates/rand-0.4.3.tar.gz) = 8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd
+SIZE (rust/crates/rand-0.4.3.tar.gz) = 76094
+SHA256 (rust/crates/rand-0.5.5.tar.gz) = e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c
+SIZE (rust/crates/rand-0.5.5.tar.gz) = 137359
+SHA256 (rust/crates/rand_core-0.2.1.tar.gz) = edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2
+SIZE (rust/crates/rand_core-0.2.1.tar.gz) = 19262
+SHA256 (rust/crates/redox_syscall-0.1.40.tar.gz) = c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1
+SIZE (rust/crates/redox_syscall-0.1.40.tar.gz) = 14745
+SHA256 (rust/crates/redox_termios-0.1.1.tar.gz) = 7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76
+SIZE (rust/crates/redox_termios-0.1.1.tar.gz) = 3227
+SHA256 (rust/crates/regex-0.1.80.tar.gz) = 4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f
+SIZE (rust/crates/regex-0.1.80.tar.gz) = 185806
+SHA256 (rust/crates/regex-syntax-0.3.9.tar.gz) = f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957
+SIZE (rust/crates/regex-syntax-0.3.9.tar.gz) = 117427
+SHA256 (rust/crates/remove_dir_all-0.5.1.tar.gz) = 3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5
+SIZE (rust/crates/remove_dir_all-0.5.1.tar.gz) = 8726
+SHA256 (rust/crates/rustc-demangle-0.1.9.tar.gz) = bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395
+SIZE (rust/crates/rustc-demangle-0.1.9.tar.gz) = 11463
+SHA256 (rust/crates/rustc-serialize-0.3.24.tar.gz) = dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda
+SIZE (rust/crates/rustc-serialize-0.3.24.tar.gz) = 45926
+SHA256 (rust/crates/same-file-0.1.3.tar.gz) = d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7
+SIZE (rust/crates/same-file-0.1.3.tar.gz) = 7078
+SHA256 (rust/crates/strsim-0.7.0.tar.gz) = bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550
+SIZE (rust/crates/strsim-0.7.0.tar.gz) = 8435
+SHA256 (rust/crates/tempdir-0.3.7.tar.gz) = 15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8
+SIZE (rust/crates/tempdir-0.3.7.tar.gz) = 11468
+SHA256 (rust/crates/termion-1.5.1.tar.gz) = 689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096
+SIZE (rust/crates/termion-1.5.1.tar.gz) = 20659
+SHA256 (rust/crates/textwrap-0.10.0.tar.gz) = 307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6
+SIZE (rust/crates/textwrap-0.10.0.tar.gz) = 15986
+SHA256 (rust/crates/thread-id-2.0.0.tar.gz) = a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03
+SIZE (rust/crates/thread-id-2.0.0.tar.gz) = 6108
+SHA256 (rust/crates/thread_local-0.2.7.tar.gz) = 8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5
+SIZE (rust/crates/thread_local-0.2.7.tar.gz) = 10954
+SHA256 (rust/crates/unicode-bidi-0.3.4.tar.gz) = 49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5
+SIZE (rust/crates/unicode-bidi-0.3.4.tar.gz) = 32228
+SHA256 (rust/crates/unicode-normalization-0.1.7.tar.gz) = 6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25
+SIZE (rust/crates/unicode-normalization-0.1.7.tar.gz) = 330545
+SHA256 (rust/crates/unicode-width-0.1.5.tar.gz) = 882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526
+SIZE (rust/crates/unicode-width-0.1.5.tar.gz) = 15761
+SHA256 (rust/crates/url-1.7.1.tar.gz) = 2a321979c09843d272956e73700d12c4e7d3d92b2ee112b31548aef0d4efc5a6
+SIZE (rust/crates/url-1.7.1.tar.gz) = 68266
+SHA256 (rust/crates/user32-sys-0.2.0.tar.gz) = 4ef4711d107b21b410a3a974b1204d9accc8b10dad75d8324b5d755de1617d47
+SIZE (rust/crates/user32-sys-0.2.0.tar.gz) = 10624
+SHA256 (rust/crates/utf8-ranges-0.1.3.tar.gz) = a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f
+SIZE (rust/crates/utf8-ranges-0.1.3.tar.gz) = 8422
+SHA256 (rust/crates/vec_map-0.8.1.tar.gz) = 05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a
+SIZE (rust/crates/vec_map-0.8.1.tar.gz) = 14959
+SHA256 (rust/crates/walkdir-1.0.7.tar.gz) = bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff
+SIZE (rust/crates/walkdir-1.0.7.tar.gz) = 17883
+SHA256 (rust/crates/winapi-0.2.8.tar.gz) = 167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a
+SIZE (rust/crates/winapi-0.2.8.tar.gz) = 455145
+SHA256 (rust/crates/winapi-0.3.5.tar.gz) = 773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd
+SIZE (rust/crates/winapi-0.3.5.tar.gz) = 997942
+SHA256 (rust/crates/winapi-build-0.1.1.tar.gz) = 2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc
+SIZE (rust/crates/winapi-build-0.1.1.tar.gz) = 669
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.tar.gz) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.tar.gz) = 2918815
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.tar.gz) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.tar.gz) = 2947998
+SHA256 (algesten-rabbiteer-rs-1.4.1-c881238_GH0.tar.gz) = 882450472ee00e5848c59c75c0eba1b07ffb2dc0d1ab494608930c474e457123
+SIZE (algesten-rabbiteer-rs-1.4.1-c881238_GH0.tar.gz) = 14909
diff --git a/net/rabbiteer/files/patch-Cargo.lock b/net/rabbiteer/files/patch-Cargo.lock
new file mode 100644
index 000000000000..23721d4e95d5
--- /dev/null
+++ b/net/rabbiteer/files/patch-Cargo.lock
@@ -0,0 +1,282 @@
+--- Cargo.lock.orig 2018-10-14 19:59:45 UTC
++++ Cargo.lock
+@@ -27,6 +27,7 @@ dependencies = [
+ "amq-proto 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "openssl 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ ]
+
+@@ -76,6 +77,11 @@ source = "registry+https://github.com/rust-lang/crates
+
+ [[package]]
+ name = "bitflags"
++version = "0.7.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "bitflags"
+ version = "1.0.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+
+@@ -164,6 +170,20 @@ version = "0.3.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+
+ [[package]]
++name = "gcc"
++version = "0.3.55"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "gdi32-sys"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
+ name = "idna"
+ version = "0.1.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -183,11 +203,24 @@ dependencies = [
+ ]
+
+ [[package]]
++name = "lazy_static"
++version = "0.2.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
+ name = "libc"
+ version = "0.2.43"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+
+ [[package]]
++name = "libressl-pnacl-sys"
++version = "2.1.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "pnacl-build-helper 1.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
+ name = "log"
+ version = "0.3.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -230,11 +263,60 @@ version = "0.2.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+
+ [[package]]
++name = "openssl"
++version = "0.7.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
++ "openssl-sys 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)",
++ "openssl-sys-extras 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "openssl-sys"
++version = "0.7.17"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libressl-pnacl-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
++ "user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "openssl-sys-extras"
++version = "0.7.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
++ "openssl-sys 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
+ name = "percent-encoding"
+ version = "1.0.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+
+ [[package]]
++name = "pkg-config"
++version = "0.3.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "pnacl-build-helper"
++version = "1.4.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
+ name = "rabbiteer"
+ version = "1.4.1"
+ dependencies = [
+@@ -248,6 +330,16 @@ dependencies = [
+
+ [[package]]
+ name = "rand"
++version = "0.4.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand"
+ version = "0.5.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ dependencies = [
+@@ -294,6 +386,14 @@ version = "0.3.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+
+ [[package]]
++name = "remove_dir_all"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
+ name = "rustc-demangle"
+ version = "0.1.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -304,11 +404,29 @@ version = "0.3.24"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+
+ [[package]]
++name = "same-file"
++version = "0.1.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
+ name = "strsim"
+ version = "0.7.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+
+ [[package]]
++name = "tempdir"
++version = "0.3.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
+ name = "termion"
+ version = "1.5.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -372,6 +490,15 @@ dependencies = [
+ ]
+
+ [[package]]
++name = "user32-sys"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
+ name = "utf8-ranges"
+ version = "0.1.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -382,6 +509,16 @@ version = "0.8.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+
+ [[package]]
++name = "walkdir"
++version = "1.0.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "same-file 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
+ name = "winapi"
+ version = "0.2.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -419,6 +556,7 @@ source = "registry+https://github.com/rust-lang/crates
+ "checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a"
+ "checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0"
+ "checksum bit-vec 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f"
++"checksum bitflags 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab1c7dc97f39523ffa63f3096291612e630cf3ed75aa6b9fad436bac4c700274"
+ "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
+ "checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855"
+ "checksum cc 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)" = "70f2a88c2e69ceee91c209d8ef25b81fc1a65f42c7f14dfd59d1fed189e514d1"
+@@ -431,25 +569,38 @@ source = "registry+https://github.com/rust-lang/crates
+ "checksum error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8"
+ "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+ "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
++"checksum gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)" = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
++"checksum gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518"
+ "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+ "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
++"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
+ "checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = "76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d"
++"checksum libressl-pnacl-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "cbc058951ab6a3ef35ca16462d7642c4867e6403520811f28537a4e2f2db3e71"
+ "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+ "checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f"
+ "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
+ "checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+ "checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
+ "checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe"
++"checksum openssl 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)" = "c4117b6244aac42ed0150a6019b4d953d28247c5dd6ae6f46ae469b5f2318733"
++"checksum openssl-sys 0.7.17 (registry+https://github.com/rust-lang/crates.io-index)" = "89c47ee94c352eea9ddaf8e364be7f978a3bb6d66d73176572484238dd5a5c3f"
++"checksum openssl-sys-extras 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)" = "11c5e1dba7d3d03d80f045bf0d60111dc69213b67651e7c889527a3badabb9fa"
+ "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
++"checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c"
++"checksum pnacl-build-helper 1.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dfbe13ee77c06fb633d71c72438bd983286bb3521863a753ade8e951c7efb090"
++"checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd"
+ "checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c"
+ "checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2"
+ "checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1"
+ "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
+ "checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+ "checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
++"checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5"
+ "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395"
+ "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
++"checksum same-file 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7"
+ "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
++"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+ "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
+ "checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6"
+ "checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+@@ -458,8 +609,10 @@ source = "registry+https://github.com/rust-lang/crates
+ "checksum unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25"
+ "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526"
+ "checksum url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2a321979c09843d272956e73700d12c4e7d3d92b2ee112b31548aef0d4efc5a6"
++"checksum user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ef4711d107b21b410a3a974b1204d9accc8b10dad75d8324b5d755de1617d47"
+ "checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+ "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
++"checksum walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff"
+ "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+ "checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd"
+ "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/net/rabbiteer/files/patch-Cargo.toml b/net/rabbiteer/files/patch-Cargo.toml
new file mode 100644
index 000000000000..1cf73bb57c27
--- /dev/null
+++ b/net/rabbiteer/files/patch-Cargo.toml
@@ -0,0 +1,17 @@
+--- Cargo.toml.orig 2018-10-14 19:59:53 UTC
++++ Cargo.toml
+@@ -1,6 +1,6 @@
+ [package]
+ name = "rabbiteer"
+-version = "1.4.1"
++version = "1.4.1"
+ authors = ["Martin Algesten <martin@algesten.se>"]
+ description = "AMQP/RabbitMQ input/output CLI tool"
+ repository = "https://github.com/algesten/rabbiteer-rs"
+@@ -20,4 +20,5 @@ url = "1"
+ #branch = "rabbiteer"
+ #path = "/Users/martin/dev/_dist/rust-amqp"
+ version = "0.1"
+-default-features = false
++# commented out so we have TLS-enabled AMQP via OpenSSL
++# default-features = false
diff --git a/net/rabbiteer/files/patch-README.md b/net/rabbiteer/files/patch-README.md
new file mode 100644
index 000000000000..3b9cf3741a08
--- /dev/null
+++ b/net/rabbiteer/files/patch-README.md
@@ -0,0 +1,20 @@
+--- README.md.orig 2018-10-14 19:59:57 UTC
++++ README.md
+@@ -77,7 +77,7 @@ Publishing pushes data from stdin or a file to an exch
+ OPTIONS:
+ -c, --content-type <content_type> Content type such as application/json. Inferred from filename if
+ possible.
+- -e, --exchange <exchange> Exchange to publish to [default ]
++ -e, --exchange <exchange> Exchange to publish to [default ""]
+ -f, --file <file> Filename (- is stdin) [default: -]
+ -H, --header <header>... Header on the form "My-Header: Value"
+ -r, --routing-key <routing_key> Routing key [default: ]
+@@ -120,7 +120,7 @@ stdout or as files to a directory.
+ FLAGS:
+ -i, --info Include delivery info (and headers).
+ OPTIONS:
+- -e, --exchange <exchange> Exchange to subscribe to
++ -e, --exchange <exchange> Exchange to subscribe to [default ""]
+ -o, --output <output> Output directory (- is stdout) [default: -]
+ -r, --routing-key <routing_key> Routing key [default: #]
+
diff --git a/net/rabbiteer/files/patch-src_client.rs b/net/rabbiteer/files/patch-src_client.rs
new file mode 100644
index 000000000000..7951ad581d21
--- /dev/null
+++ b/net/rabbiteer/files/patch-src_client.rs
@@ -0,0 +1,266 @@
+--- src/client.rs.orig 2018-10-14 20:00:28 UTC
++++ src/client.rs
+@@ -1,14 +1,14 @@
+-use std::io;
+-use error::RbtError;
+-use amqp::{self, Session, Options, Channel};
+-use amqp::protocol::basic::{Deliver, BasicProperties};
++use amqp::protocol::basic::{BasicProperties, Deliver};
+ use amqp::Basic;
++use amqp::{self, Channel, Options, Session};
+ use amqp::{Table, TableEntry};
++use error::RbtError;
++use std::io;
+
++use std::error::Error;
++use std::sync::mpsc;
+ use std::thread;
+ use std::time::Duration;
+-use std::sync::mpsc;
+-use std::error::Error;
+
+ pub struct Sendable {
+ pub exchange: String,
+@@ -18,21 +18,20 @@ pub struct Sendable {
+ pub file_name: String,
+ pub reader: Box<io::Read>,
+ pub priority: u8,
+- pub rpctimeout: u64
++ pub rpctimeout: u64,
+ }
+
+-pub type ReceiveCb = FnMut(&mut Channel, Deliver, BasicProperties, Vec<u8>) -> Result<(), RbtError> + Send;
++pub type ReceiveCb =
++ FnMut(&mut Channel, Deliver, BasicProperties, Vec<u8>) -> Result<(), RbtError> + Send;
+
+ pub struct Receiver {
+- pub exchange:String,
++ pub exchange: String,
+ pub routing_key: Option<String>,
+ pub auto_ack: bool,
+- pub callback:Box<ReceiveCb>,
++ pub callback: Box<ReceiveCb>,
+ }
+
+-
+-pub fn open_send(o:Options, s:Sendable, r:Option<Receiver>) -> Result<(),RbtError> {
+-
++pub fn open_send(o: Options, s: Sendable, r: Option<Receiver>) -> Result<(), RbtError> {
+ // open the channel
+ let (mut session, mut channel) = _open(o)?;
+
+@@ -49,7 +48,10 @@ pub fn open_send(o:Options, s:Sendable, r:Option<Recei
+
+ // put filename in headers if we read from file
+ if s.file_name != "-" && !headers.contains_key("fileName") {
+- headers.insert("fileName".to_owned(), TableEntry::LongString(String::from(s.file_name)));
++ headers.insert(
++ "fileName".to_owned(),
++ TableEntry::LongString(String::from(s.file_name)),
++ );
+ }
+
+ // send properties
+@@ -73,8 +75,8 @@ pub fn open_send(o:Options, s:Sendable, r:Option<Recei
+ props.correlation_id = Some("rabbiteer here".to_owned());
+
+ true
+- },
+- None => false
++ }
++ None => false,
+ };
+
+ // read input input buffer
+@@ -87,12 +89,14 @@ pub fn open_send(o:Options, s:Sendable, r:Option<Recei
+
+ if isrpc {
+ let (tx, rx) = mpsc::channel();
+- thread::Builder::new().name("consumer_thread".to_string()).spawn(move || {
+- channel.start_consuming();
+- tx.send(channel).unwrap();
+- }).unwrap();
++ thread::Builder::new()
++ .name("consumer_thread".to_string())
++ .spawn(move || {
++ channel.start_consuming();
++ tx.send(channel).unwrap();
++ })
++ .unwrap();
+
+-
+ let timeout = s.rpctimeout;
+ if timeout == 0 {
+ // Block forever until recieve
+@@ -103,7 +107,7 @@ pub fn open_send(o:Options, s:Sendable, r:Option<Recei
+ match res {
+ Ok(mut ch) => {
+ ch.close(200, "Bye")?;
+- }
++ }
+ Err(err) => {
+ if err.description() == "timed out waiting on channel".to_string() {
+ println!("Error timeout");
+@@ -121,10 +125,9 @@ pub fn open_send(o:Options, s:Sendable, r:Option<Recei
+ Ok(())
+ }
+
+-
+ // narrow the string to a TableEntry type by trying to parse to known
+ // JSON types: bool, double and fall back on string.
+-fn narrow(str:&str) -> TableEntry {
++fn narrow(str: &str) -> TableEntry {
+ let boolv = str.parse::<bool>();
+ if !boolv.is_err() {
+ TableEntry::Bool(boolv.unwrap())
+@@ -138,19 +141,22 @@ fn narrow(str:&str) -> TableEntry {
+ }
+ }
+
+-
+-fn _open(o:Options) -> Result<(Session, Channel),RbtError> {
+-// errln!("Connecting to amqp://{}:{}@{}:{}/{}",
+-// o.login, o.password, o.host, o.port, o.vhost);
++fn _open(o: Options) -> Result<(Session, Channel), RbtError> {
++ // errln!("Connecting to amqp://{}:{}@{}:{}/{}",
++ // o.login, o.password, o.host, o.port, o.vhost);
+ let mut session = Session::new(o)?;
+ let channel = session.open_channel(1)?;
+ Ok((session, channel))
+ }
+
+ impl amqp::Consumer for Receiver {
+- fn handle_delivery(&mut self, channel:&mut Channel, deliver:Deliver,
+- headers:BasicProperties, body:Vec<u8>){
+-
++ fn handle_delivery(
++ &mut self,
++ channel: &mut Channel,
++ deliver: Deliver,
++ headers: BasicProperties,
++ body: Vec<u8>,
++ ) {
+ let delivery_tag = deliver.delivery_tag.clone();
+
+ if self.auto_ack {
+@@ -160,12 +166,15 @@ impl amqp::Consumer for Receiver {
+
+ // and deliver to callback
+ ((self.callback)(channel, deliver, headers, body)).unwrap_or_else(::error::handle);
+-
+ }
+ }
+
+-pub fn open_receive(o:Options, q:Option<String>, force_declare: bool, r:Receiver) -> Result<(),RbtError> {
+-
++pub fn open_receive(
++ o: Options,
++ q: Option<String>,
++ force_declare: bool,
++ r: Receiver,
++) -> Result<(), RbtError> {
+ // open session/channel
+ let (_, mut channel) = _open(o)?;
+
+@@ -178,22 +187,33 @@ pub fn open_receive(o:Options, q:Option<String>, force
+ Ok(())
+ }
+
+-
+-fn do_open_receive(channel:&mut Channel, q:Option<String>, force_declare: bool, r:Receiver) -> Result<String,RbtError> {
+-
++fn do_open_receive(
++ channel: &mut Channel,
++ q: Option<String>,
++ force_declare: bool,
++ r: Receiver,
++) -> Result<String, RbtError> {
+ let mut auto_delete = false;
+ let mut bind_routing_key = r.routing_key.clone();
+-
++
+ let queue_name = match q {
+ Some(q) => {
+ // Force the declaration of this queue
+ if force_declare {
+ // queue, passive, durable, exclusive, auto_delete, nowait, arguments
+- let queue_declare = channel.queue_declare(q, false, false, auto_delete, auto_delete, false, Table::new())?;
++ let queue_declare = channel.queue_declare(
++ q,
++ false,
++ false,
++ auto_delete,
++ auto_delete,
++ false,
++ Table::new(),
++ )?;
+
+ // name is auto generated
+ queue_declare.queue
+- }else{
++ } else {
+ q
+ }
+ }
+@@ -205,25 +225,33 @@ fn do_open_receive(channel:&mut Channel, q:Option<Stri
+ }
+
+ // queue, passive, durable, exclusive, auto_delete, nowait, arguments
+- let queue_declare =
+- channel.queue_declare(
+- q.clone().unwrap_or("".to_owned()) ,
+- false, false,
+- auto_delete, auto_delete, false, Table::new())?;
++ let queue_declare = channel.queue_declare(
++ q.clone().unwrap_or("".to_owned()),
++ false,
++ false,
++ auto_delete,
++ auto_delete,
++ false,
++ Table::new(),
++ )?;
+
+ // name is auto generated
+ queue_declare.queue
+-
+ }
+ };
+
+ // Only bind if we have a routing key - May be an existing queue
+ if let Some(routing_key) = bind_routing_key {
+ // bind queue to the exchange, which already must be declared.
+-
++
+ if r.exchange != "" {
+- channel.queue_bind(queue_name.clone(), r.exchange.clone(), routing_key.clone(),
+- false, Table::new())?;
++ channel.queue_bind(
++ queue_name.clone(),
++ r.exchange.clone(),
++ routing_key.clone(),
++ false,
++ Table::new(),
++ )?;
+ }
+ }
+
+@@ -232,8 +260,16 @@ fn do_open_receive(channel:&mut Channel, q:Option<Stri
+
+ // start consuming the queue.
+ // callback, queue, consumer_tag, no_local, no_ack, exclusive, nowait, arguments
+- channel.basic_consume(r, queue_name.clone(), consumer_tag, false,
+- false, false, false, Table::new())?;
++ channel.basic_consume(
++ r,
++ queue_name.clone(),
++ consumer_tag,
++ false,
++ false,
++ false,
++ false,
++ Table::new(),
++ )?;
+
+ Ok(queue_name)
+ }
diff --git a/net/rabbiteer/files/patch-src_error.rs b/net/rabbiteer/files/patch-src_error.rs
new file mode 100644
index 000000000000..7ed75cd906a5
--- /dev/null
+++ b/net/rabbiteer/files/patch-src_error.rs
@@ -0,0 +1,71 @@
+--- src/error.rs.orig 2018-10-14 20:00:28 UTC
++++ src/error.rs
+@@ -1,10 +1,10 @@
++use amqp::AMQPError;
++use clap;
++use rustc_serialize::json;
++use std::convert::From;
+ use std::fmt;
+ use std::io;
+-use std::convert::From;
+-use amqp::AMQPError;
+ use std::string::FromUtf8Error;
+-use rustc_serialize::json;
+-use clap;
+
+ #[macro_export]
+ macro_rules! errln(
+@@ -21,9 +21,8 @@ macro_rules! rbterr(
+ }}
+ );
+
+-
+ pub enum RbtError {
+- Message(String), // Plain error message
++ Message(String), // Plain error message
+ AMQP(AMQPError),
+ IO(io::Error),
+ UTF8(FromUtf8Error),
+@@ -31,27 +30,24 @@ pub enum RbtError {
+ Clap(clap::Error),
+ }
+
+-
+ impl fmt::Display for RbtError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match *self {
+ RbtError::Message(ref s) => write!(f, "Error: {}", s),
+- RbtError::AMQP(ref e) => write!(f, "{}", e),
+- RbtError::IO(ref e) => write!(f, "{}", e),
+- RbtError::UTF8(ref e) => write!(f, "{}", e),
+- RbtError::JSON(ref e) => write!(f, "{}", e),
+- RbtError::Clap(ref e) => write!(f, "{}", e),
++ RbtError::AMQP(ref e) => write!(f, "{}", e),
++ RbtError::IO(ref e) => write!(f, "{}", e),
++ RbtError::UTF8(ref e) => write!(f, "{}", e),
++ RbtError::JSON(ref e) => write!(f, "{}", e),
++ RbtError::Clap(ref e) => write!(f, "{}", e),
+ }
+ }
+ }
+
+-
+-pub fn handle(e:RbtError) {
++pub fn handle(e: RbtError) {
+ errln!("{}", e);
+ ::std::process::exit(1);
+ }
+
+-
+ macro_rules! from(
+ ($t:ty, $p:tt) => {
+ impl From<$t> for RbtError {
+@@ -70,7 +66,7 @@ from!(clap::Error, Clap);
+ from!(String, Message);
+
+ impl From<&'static str> for RbtError {
+- fn from(s:&str) -> RbtError {
++ fn from(s: &str) -> RbtError {
+ RbtError::Message(String::from(s))
+ }
+ }
diff --git a/net/rabbiteer/files/patch-src_main.rs b/net/rabbiteer/files/patch-src_main.rs
new file mode 100644
index 000000000000..032c42f464f9
--- /dev/null
+++ b/net/rabbiteer/files/patch-src_main.rs
@@ -0,0 +1,171 @@
+--- src/main.rs.orig 2018-10-14 20:00:28 UTC
++++ src/main.rs
+@@ -1,36 +1,41 @@
+-extern crate rustc_serialize;
+ extern crate amqp;
+-extern crate rand;
+ extern crate conduit_mime_types as mime;
++extern crate rand;
++extern crate rustc_serialize;
+ extern crate url;
+-#[macro_use] extern crate clap;
++#[macro_use]
++extern crate clap;
+
+-#[macro_use] mod error;
++#[macro_use]
++mod error;
+ mod client;
+ mod output;
+ mod publish;
+ mod subscribe;
+
++use clap::{App, Arg, SubCommand};
++use error::RbtError;
++use rustc_serialize::json::Json;
+ use std::env;
+ use std::fs;
+-use clap::{Arg, App, SubCommand};
++use std::panic;
+ use url::Url;
+-use rustc_serialize::json::Json;
+-use error::RbtError;
+
+-
+ fn main() {
++ panic::set_hook(Box::new(|_panic| {
++ // chill
++ }));
++
+ _main().unwrap_or_else(error::handle);
+ }
+
+-static HOST:&'static str = "127.0.0.1";
+-static PORT:&'static str = "5672";
+-static USER:&'static str = "guest";
+-static PASS:&'static str = "guest";
+-static VHST:&'static str = "";
++static HOST: &'static str = "127.0.0.1";
++static PORT: &'static str = "5672";
++static USER: &'static str = "guest";
++static PASS: &'static str = "guest";
++static VHST: &'static str = "";
+
+-fn _main() -> Result<(),RbtError> {
+-
++fn _main() -> Result<(), RbtError> {
+ let matches = App::new("Rabbiteer")
+ .version(crate_version!())
+ .author("Martin Algesten <martin@algesten.se>")
+@@ -124,7 +129,7 @@ fn _main() -> Result<(),RbtError> {
+ .short("e")
+ .long("exchange")
+ .takes_value(true)
+- .required(true))
++ .default_value(""))
+ .arg(Arg::with_name("routing_key")
+ .help("Routing key")
+ .short("r")
+@@ -167,11 +172,11 @@ fn _main() -> Result<(),RbtError> {
+
+ // start with defaults.
+ let mut opts = amqp::Options {
+- host: value_t!(matches, "host", String)?,
+- port: value_t!(matches, "port", u16)?,
+- login: value_t!(matches, "user", String)?,
++ host: value_t!(matches, "host", String)?,
++ port: value_t!(matches, "port", u16)?,
++ login: value_t!(matches, "user", String)?,
+ password: value_t!(matches, "password", String)?,
+- vhost: value_t!(matches, "vhost", String)?,
++ vhost: value_t!(matches, "vhost", String)?,
+ ..Default::default()
+ };
+
+@@ -183,7 +188,7 @@ fn _main() -> Result<(),RbtError> {
+ parse_url(&mut opts, urlstr)?;
+ }
+
+- fn if_differs(opt:Option<&str>, def:&str, set:&mut FnMut(String) -> ()) {
++ fn if_differs(opt: Option<&str>, def: &str, set: &mut FnMut(String) -> ()) {
+ if let Some(v) = opt {
+ if v != def {
+ set(v.to_string());
+@@ -191,44 +196,46 @@ fn _main() -> Result<(),RbtError> {
+ }
+ }
+
+- if_differs(matches.value_of("host"), HOST, &mut|v|{ opts.host = v });
+- if_differs(matches.value_of("port"), PORT, &mut|v|{ opts.port = v.parse::<u16>().unwrap() });
+- if_differs(matches.value_of("user"), USER, &mut|v|{ opts.login = v });
+- if_differs(matches.value_of("password"), PASS, &mut|v|{ opts.password = v });
+- if_differs(matches.value_of("vhost"), VHST, &mut|v|{ opts.vhost = v });
++ if_differs(matches.value_of("host"), HOST, &mut |v| {
++ opts.host = v
++ });
++ if_differs(matches.value_of("port"), PORT, &mut |v| {
++ opts.port = v.parse::<u16>().unwrap()
++ });
++ if_differs(matches.value_of("user"), USER, &mut |v| {
++ opts.login = v
++ });
++ if_differs(matches.value_of("password"), PASS, &mut |v| {
++ opts.password = v
++ });
++ if_differs(matches.value_of("vhost"), VHST, &mut |v| {
++ opts.vhost = v
++ });
+
+ // depending on subcommand, we do one or the other
+ match matches.subcommand_name() {
+-
+ // execute publish command
+ Some("publish") => {
+-
+ // the args after the "publish command
+ let subm = matches.subcommand_matches("publish").unwrap();
+
+ publish::do_publish(opts, subm)
++ }
+
+- },
+-
+ // execute subscribe command
+ Some("subscribe") => {
+-
+ // the args after the "subscribe" command
+ let subm = matches.subcommand_matches("subscribe").unwrap();
+
+ subscribe::do_subscribe(opts, subm)
++ }
+
+- },
+-
+ _ => rbterr!("Need subcommand. Try --help"),
+ }
+-
+ }
+
+-
+-
+ // update the opts object with the given url
+-fn parse_url(opts:&mut amqp::Options, urlstr:String) -> Result<(),RbtError> {
++fn parse_url(opts: &mut amqp::Options, urlstr: String) -> Result<(), RbtError> {
+ if let Ok(url) = Url::parse(urlstr.as_ref()) {
+ if url.scheme() != "amqp" {
+ rbterr!("Unknown scheme: {}", url);
+@@ -256,12 +263,9 @@ fn parse_url(opts:&mut amqp::Options, urlstr:String) -
+ }
+ }
+
+-
+-
+ // update the opts object with the conf
+-fn parse_conf(opts:&mut amqp::Options) -> bool {
+-
+- let mut update = |connopt:Option<&Json>| -> bool {
++fn parse_conf(opts: &mut amqp::Options) -> bool {
++ let mut update = |connopt: Option<&Json>| -> bool {
+ if let Some(conn) = connopt {
+ if conn.is_object() {
+ if let Json::String(ref v) = conn["host"] {
diff --git a/net/rabbiteer/files/patch-src_output.rs b/net/rabbiteer/files/patch-src_output.rs
new file mode 100644
index 000000000000..8755a4ce04b3
--- /dev/null
+++ b/net/rabbiteer/files/patch-src_output.rs
@@ -0,0 +1,173 @@
+--- src/output.rs.orig 2018-10-14 20:00:28 UTC
++++ src/output.rs
+@@ -1,10 +1,9 @@
+-use rustc_serialize::json::{self, Json, Object};
+-use rustc_serialize::base64::{self, ToBase64};
+-use amqp::protocol::basic::{Deliver, BasicProperties};
++use amqp::protocol::basic::{BasicProperties, Deliver};
+ use amqp::{Table, TableEntry};
+ use error::RbtError;
++use rustc_serialize::base64::{self, ToBase64};
++use rustc_serialize::json::{self, Json, Object};
+
+-
+ #[derive(RustcEncodable)]
+ struct MsgDeliver {
+ consumer_tag: String,
+@@ -27,24 +26,27 @@ struct Msg {
+ data: Json,
+ }
+
+-pub fn build_output(info:bool, deliver:&Deliver,
+- props:&BasicProperties, body:Vec<u8>) -> Result<Vec<u8>,RbtError> {
++pub fn build_output(
++ info: bool,
++ deliver: &Deliver,
++ props: &BasicProperties,
++ body: Vec<u8>,
++) -> Result<Vec<u8>, RbtError> {
+ if info {
+-
+ // delivery info
+ let mdel = MsgDeliver {
+- consumer_tag:deliver.consumer_tag.clone(),
+- delivery_tag:deliver.delivery_tag.clone(),
+- redelivered:deliver.redelivered.clone(),
+- exchange:deliver.exchange.clone(),
+- routing_key:deliver.routing_key.clone(),
++ consumer_tag: deliver.consumer_tag.clone(),
++ delivery_tag: deliver.delivery_tag.clone(),
++ redelivered: deliver.redelivered.clone(),
++ exchange: deliver.exchange.clone(),
++ routing_key: deliver.routing_key.clone(),
+ };
+
+ let content_type = props.content_type.clone().unwrap_or(String::from(""));
+
+ // properties
+ let mut mprops = MsgProps {
+- content_type:content_type.clone(),
++ content_type: content_type.clone(),
+ headers: Object::new(),
+ };
+
+@@ -57,9 +59,9 @@ pub fn build_output(info:bool, deliver:&Deliver,
+
+ // and put it together
+ let msg = Msg {
+- deliver:mdel,
+- props:mprops,
+- data:data,
++ deliver: mdel,
++ props: mprops,
++ data: data,
+ };
+
+ // encode
+@@ -67,9 +69,7 @@ pub fn build_output(info:bool, deliver:&Deliver,
+
+ // convert to bytes
+ Ok(js.to_string().as_bytes().to_owned())
+-
+ } else {
+-
+ let content_type = props.content_type.clone().unwrap_or(String::from(""));
+
+ match content_type.as_ref() {
+@@ -82,32 +82,26 @@ pub fn build_output(info:bool, deliver:&Deliver,
+
+ // convert to bytes
+ Ok(js.to_string().as_bytes().to_owned())
+- },
++ }
+
+ // just return untranslated bytes
+- _ => Ok(body)
++ _ => Ok(body),
+ }
+-
+ }
+ }
+
+-
+-fn figure_out_body(content_type:String, body:Vec<u8>) -> Result<Json,RbtError> {
+-
++fn figure_out_body(content_type: String, body: Vec<u8>) -> Result<Json, RbtError> {
+ // depending on content type, do something
+ match content_type.as_ref() {
+ "application/json" => Ok(Json::from_str(&String::from_utf8(body)?)?),
+ _ => Ok(match content_type.find("text/") {
+ Some(_) => Json::String(String::from_utf8(body)?),
+- _ => Json::String(body.to_base64(base64::STANDARD))
+- })
++ _ => Json::String(body.to_base64(base64::STANDARD)),
++ }),
+ }
+-
+ }
+
+-
+-
+-fn table_to_json(table:&Table) -> Object {
++fn table_to_json(table: &Table) -> Object {
+ let mut ret = Object::new();
+ for (skey, entry) in table {
+ ret.insert(skey.clone().to_string(), entry_to_json(&entry));
+@@ -115,33 +109,35 @@ fn table_to_json(table:&Table) -> Object {
+ ret
+ }
+
+-fn entry_to_json(entry:&TableEntry) -> Json {
++fn entry_to_json(entry: &TableEntry) -> Json {
+ match *entry {
+- TableEntry::Bool(v) => Json::Boolean(v),
+- TableEntry::ShortShortInt(v) => Json::I64(v as i64),
+- TableEntry::ShortShortUint(v) => Json::U64(v as u64),
+- TableEntry::ShortInt(v) => Json::I64(v as i64),
+- TableEntry::ShortUint(v) => Json::U64(v as u64),
+- TableEntry::LongInt(v) => Json::I64(v as i64),
+- TableEntry::LongUint(v) => Json::U64(v as u64),
+- TableEntry::LongLongInt(v) => Json::I64(v),
+- TableEntry::LongLongUint(v) => Json::U64(v),
+- TableEntry::Float(v) => Json::F64(v as f64),
+- TableEntry::Double(v) => Json::F64(v),
+- TableEntry::LongString(ref v) => Json::String(v.clone()),
+- TableEntry::Void => Json::Null,
+- TableEntry::FieldTable(ref v) => Json::Object(table_to_json(&v)),
+- TableEntry::Timestamp(v) => Json::U64(v as u64), // maybe string date?
++ TableEntry::Bool(v) => Json::Boolean(v),
++ TableEntry::ShortShortInt(v) => Json::I64(v as i64),
++ TableEntry::ShortShortUint(v) => Json::U64(v as u64),
++ TableEntry::ShortInt(v) => Json::I64(v as i64),
++ TableEntry::ShortUint(v) => Json::U64(v as u64),
++ TableEntry::LongInt(v) => Json::I64(v as i64),
++ TableEntry::LongUint(v) => Json::U64(v as u64),
++ TableEntry::LongLongInt(v) => Json::I64(v),
++ TableEntry::LongLongUint(v) => Json::U64(v),
++ TableEntry::Float(v) => Json::F64(v as f64),
++ TableEntry::Double(v) => Json::F64(v),
++ TableEntry::LongString(ref v) => Json::String(v.clone()),
++ TableEntry::Void => Json::Null,
++ TableEntry::FieldTable(ref v) => Json::Object(table_to_json(&v)),
++ TableEntry::Timestamp(v) => Json::U64(v as u64), // maybe string date?
+ TableEntry::FieldArray(ref vs) => {
+- let mut ret:Vec<Json> = Vec::new();
+- for v in vs { ret.push(entry_to_json(v)) }
++ let mut ret: Vec<Json> = Vec::new();
++ for v in vs {
++ ret.push(entry_to_json(v))
++ }
+ Json::Array(ret)
+- },
++ }
+ TableEntry::DecimalValue(decimals, v) => {
+- let ten:f64 = (10 as u64).pow(decimals as u32) as f64;
+- let dec:f64 = (v as f64) / ten;
++ let ten: f64 = (10 as u64).pow(decimals as u32) as f64;
++ let dec: f64 = (v as f64) / ten;
+ Json::F64(dec)
+- },
++ }
+ //_ => Err(format!("Cant translate {:?}", entry)),
+ // TableEntry::ShortString(ref v) => Ok(Json::String(v.clone())),
+ }
diff --git a/net/rabbiteer/files/patch-src_publish.rs b/net/rabbiteer/files/patch-src_publish.rs
new file mode 100644
index 000000000000..62f55785ff8b
--- /dev/null
+++ b/net/rabbiteer/files/patch-src_publish.rs
@@ -0,0 +1,137 @@
+--- src/publish.rs.orig 2018-10-14 20:00:28 UTC
++++ src/publish.rs
+@@ -1,41 +1,38 @@
+-use std::io::{self, Write};
+ use amqp;
+-use amqp::protocol::basic::{Deliver, BasicProperties};
++use amqp::protocol::basic::{BasicProperties, Deliver};
++use amqp::Channel;
+ use clap::ArgMatches;
+-use std::fs;
+-use std::path::Path;
+-use mime;
+ use client;
+ use error::RbtError;
++use mime;
+ use output;
+-use amqp::{Channel};
++use std::fs;
++use std::io::{self, Write};
+ use std::panic;
++use std::path::Path;
+
+-
+ // helper function to turn a filename
+ // into a mime-type
+-fn type_from_file(file:&String) -> Result<String,RbtError> {
++fn type_from_file(file: &String) -> Result<String, RbtError> {
+ let t = mime::Types::new().or(Err("Failed to read mime types"))?;
+ let path = Path::new(&file);
+ let mime = t.mime_for_path(&path);
+ Ok(mime.to_owned())
+ }
+
+-
+-pub fn do_publish(opts:amqp::Options, matches:&ArgMatches) -> Result<(),RbtError> {
+-
++pub fn do_publish(opts: amqp::Options, matches: &ArgMatches) -> Result<(), RbtError> {
+ // either stdin or a file
+ let file = value_t!(matches, "file", String)?;
+- let rpc = matches.is_present("rpc");
++ let rpc = matches.is_present("rpc");
+ let reader: Box<io::Read> = match file.as_ref() {
+ "-" => Box::new(io::stdin()),
+- _ => Box::new(fs::File::open(&file)?),
++ _ => Box::new(fs::File::open(&file)?),
+ };
+
+ // either - or the name of the file
+- let file_name:&str = match file.as_ref() {
++ let file_name: &str = match file.as_ref() {
+ "-" => "-",
+- _ => {
++ _ => {
+ // XXX fix unwrapping
+ let ostr = Path::new(&file).file_name().unwrap();
+ ostr.to_str().unwrap()
+@@ -48,51 +45,49 @@ pub fn do_publish(opts:amqp::Options, matches:&ArgMatc
+ let c = matches.value_of("content_type").unwrap_or("-").to_string();
+ match c.as_ref() {
+ "-" => type_from_file(&file)?,
+- _ => c,
++ _ => c,
+ }
+ };
+
+-
+ // the sendable wraps up the parsed parts
+ let sendable = client::Sendable {
+- exchange: value_t!(matches, "exchange", String)?,
+- routing_key: value_t!(matches, "routing_key", String)?,
++ exchange: value_t!(matches, "exchange", String)?,
++ routing_key: value_t!(matches, "routing_key", String)?,
+ content_type: content_type,
+- headers: values_t!(matches, "header", String).unwrap_or(vec![]),
+- file_name: file_name.to_owned(),
+- reader: reader,
+- priority: value_t!(matches, "priority", u8).unwrap_or(0),
+- rpctimeout: value_t!(matches, "rpctimeout", u64).unwrap_or(0)
++ headers: values_t!(matches, "header", String).unwrap_or(vec![]),
++ file_name: file_name.to_owned(),
++ reader: reader,
++ priority: value_t!(matches, "priority", u8).unwrap_or(0),
++ rpctimeout: value_t!(matches, "rpctimeout", u64).unwrap_or(0),
+ };
+
+ // if we are doing an rpc with replyTo/correlationId, we set up a receiver
+ let rpc_receive = match rpc {
+ false => None,
+- true => {
+- let receive =
+- move |channel: &mut Channel, deliver:Deliver, props:BasicProperties, body:Vec<u8>| ->
+- Result<(),RbtError> {
+- let msg = output::build_output(false, &deliver, &props, body)?;
++ true => {
++ let receive = move |channel: &mut Channel,
++ deliver: Deliver,
++ props: BasicProperties,
++ body: Vec<u8>|
++ -> Result<(), RbtError> {
++ let msg = output::build_output(false, &deliver, &props, body)?;
+
+- // just write to stdout
+- let stdout = io::stdout();
++ // just write to stdout
++ let stdout = io::stdout();
+
+- // lock until end of scope
+- let mut handle = stdout.lock();
++ // lock until end of scope
++ let mut handle = stdout.lock();
+
+- handle.write(&msg)?;
+- handle.write(b"\n")?;
+- handle.flush()?;
+-
+- // closing the channel
+- channel.close(200, "Bye")?;
+- panic::set_hook(Box::new(|_| {
+- }));
+- // Until amqp library finds a way to exit consumer, terminate consumer_thread here.
+- panic!();
+-
+-
+- };
++ handle.write(&msg)?;
++ handle.write(b"\n")?;
++ handle.flush()?;
++
++ // closing the channel
++ channel.close(200, "Bye")?;
++ panic::set_hook(Box::new(|_| {}));
++ // Until amqp library finds a way to exit consumer, terminate consumer_thread here.
++ panic!();
++ };
+
+ let receiver = client::Receiver {
+ exchange: "".to_owned(),
diff --git a/net/rabbiteer/files/patch-src_subscribe.rs b/net/rabbiteer/files/patch-src_subscribe.rs
new file mode 100644
index 000000000000..a0c11a159813
--- /dev/null
+++ b/net/rabbiteer/files/patch-src_subscribe.rs
@@ -0,0 +1,147 @@
+--- src/subscribe.rs.orig 2018-10-14 20:00:28 UTC
++++ src/subscribe.rs
+@@ -1,23 +1,21 @@
+-use std::io::{self, Write};
+-use rand::{thread_rng, Rng, distributions::Alphanumeric};
+-use amqp::protocol::basic::{Deliver, BasicProperties};
+-use amqp::{self, TableEntry, Channel};
++use amqp::protocol::basic::{BasicProperties, Deliver};
++use amqp::{self, Channel, TableEntry};
+ use clap::ArgMatches;
+-use std::fs;
+-use std::path::Path;
+-use mime;
+ use client;
+-use output;
+ use error::RbtError;
++use mime;
++use output;
++use rand::{distributions::Alphanumeric, thread_rng, Rng};
++use std::fs;
++use std::io::{self, Write};
+ use std::panic;
++use std::path::Path;
+
+-
+-pub fn do_subscribe(opts:amqp::Options, matches:&ArgMatches) -> Result<(),RbtError> {
+-
++pub fn do_subscribe(opts: amqp::Options, matches: &ArgMatches) -> Result<(), RbtError> {
+ let output = value_t!(matches, "output", String)?;
+- let queue : Option<String> = matches.value_of("queue").map(str::to_owned);
+- let force_declare : bool = matches.is_present("declare");
+- let info = matches.is_present("info");
++ let queue: Option<String> = matches.value_of("queue").map(str::to_owned);
++ let force_declare: bool = matches.is_present("declare");
++ let info = matches.is_present("info");
+ let single = matches.is_present("single");
+
+ // type lookup map
+@@ -33,14 +31,15 @@ pub fn do_subscribe(opts:amqp::Options, matches:&ArgMa
+ }
+ }
+
+- let receive = move |channel: &mut Channel, deliver:Deliver, props:BasicProperties, body:Vec<u8>| ->
+- Result<(),RbtError> {
+-
++ let receive = move |channel: &mut Channel,
++ deliver: Deliver,
++ props: BasicProperties,
++ body: Vec<u8>|
++ -> Result<(), RbtError> {
+ let msg = output::build_output(info, &deliver, &props, body)?;
+
+ match output.as_ref() {
+ "-" => {
+-
+ // just write to stdout
+ let stdout = io::stdout();
+
+@@ -50,10 +49,8 @@ pub fn do_subscribe(opts:amqp::Options, matches:&ArgMa
+ handle.write(&msg)?;
+ handle.write(b"\n")?;
+ handle.flush()?;
+-
+- },
+- _ => {
+-
++ }
++ _ => {
+ // extract file name from headers, or fall back on random
+ let file_name = file_name_of(&props, &types);
+
+@@ -70,60 +67,60 @@ pub fn do_subscribe(opts:amqp::Options, matches:&ArgMa
+
+ let mut f = fs::File::create(path)?;
+ f.write_all(&msg)?;
+-
+ }
+-
+ }
+
+ // maybe end here?
+ if single {
+ // closing the channel
+ channel.close(200, "Bye")?;
+- panic::set_hook(Box::new(|_| {
+- }));
++ panic::set_hook(Box::new(|_| {}));
+ // Until amqp library finds a way to exit consumer, terminate consumer_thread here.
+ panic!();
+ }
+
+ Ok(())
+-
+ };
+
+ let receiver = client::Receiver {
+ exchange: value_t!(matches, "exchange", String)?,
+ routing_key: matches.value_of("routing_key").map(str::to_owned),
+- auto_ack: ! matches.is_present("noack"),
++ auto_ack: !matches.is_present("noack"),
+ callback: Box::new(receive),
+ };
+
+ client::open_receive(opts, queue, force_declare, receiver)
+ }
+
+-fn file_name_of(props:&BasicProperties, types:&mime::Types) -> String {
++fn file_name_of(props: &BasicProperties, types: &mime::Types) -> String {
++ let content_type = props
++ .content_type
++ .clone()
++ .unwrap_or("application/octet-stream".to_owned());
+
+- let content_type =
+- props.content_type.clone().unwrap_or("application/octet-stream".to_owned());
+-
+ // figure out a good extension for this content type
+- let ext = types.get_extension(&content_type)
++ let ext = types
++ .get_extension(&content_type)
+ .and_then(|x| Some(x[0].clone()))
+ .or_else(|| Some("bin".to_owned()))
+ .unwrap();
+
+ // prefer a fileName from headers, but fall back on
+ // a random name.
+- props.headers.clone()
++ props
++ .headers
++ .clone()
+ .and_then(|x| match x.get("fileName") {
+ Some(&TableEntry::LongString(ref f)) => Some((*f).clone()),
+- _ => None
++ _ => None,
+ })
+ .or_else(|| Some(gen_rand_name(ext)))
+ .unwrap()
+ }
+
+-fn gen_rand_name(ext:String) -> String {
++fn gen_rand_name(ext: String) -> String {
+ // generate 16 ascii chars
+- let mut rand:String = thread_rng().sample_iter(&Alphanumeric).take(16).collect();
++ let mut rand: String = thread_rng().sample_iter(&Alphanumeric).take(16).collect();
+ rand.push_str(".");
+ rand.push_str(&ext);
+ rand
diff --git a/net/rabbiteer/pkg-descr b/net/rabbiteer/pkg-descr
new file mode 100644
index 000000000000..535bd05afce7
--- /dev/null
+++ b/net/rabbiteer/pkg-descr
@@ -0,0 +1,4 @@
+Command-line tool for publishing and subscribing to RabbitMQ, including
+support for publish, subscribe, and RabbitMQ-style rpc calls.
+
+WWW: https://github.com/algesten/rabbiteer