diff options
author | David Barksdale <amatus@amatus.name> | 2014-12-14 01:13:23 -0600 |
---|---|---|
committer | David Barksdale <amatus@amatus.name> | 2014-12-14 01:13:23 -0600 |
commit | b3057c8873c06919f7b69ddbc712ff5f09a9e871 (patch) | |
tree | 6164f60f5485caa97d5075694ffd06ab9bf09ece | |
parent | 8531340a4f1c209b4a2817ffe7f28370febeb353 (diff) |
Stop using GNUNET_TRANSPORT_address_to_string
It was returning some weird stuff and it just seems so wasteful to
connect to the transport service every time you want to do this simple
conversion.
-rw-r--r-- | gnunet-build/packages/gnunet/gnunet/files/client-lib.c | 51 | ||||
-rw-r--r-- | gnunet-build/packages/gnunet/gnunet/files/client-lib.exports | 1 | ||||
-rw-r--r-- | src/cljs/gnunet_web/transport.cljs | 49 |
3 files changed, 52 insertions, 49 deletions
diff --git a/gnunet-build/packages/gnunet/gnunet/files/client-lib.c b/gnunet-build/packages/gnunet/gnunet/files/client-lib.c index 2fe47c4..92d3299 100644 --- a/gnunet-build/packages/gnunet/gnunet/files/client-lib.c +++ b/gnunet-build/packages/gnunet/gnunet/files/client-lib.c @@ -150,23 +150,50 @@ GNUNET_FS_download_start_simple(struct GNUNET_FS_Handle *h, anonymity, 0, cctx, NULL); } +struct monitor_peers_cls { + void (*cb)(void *cls, + const struct GNUNET_PeerIdentity *peer, + enum GNUNET_TRANSPORT_PeerState state, + const char *transport_name, + const void *address, + size_t address_length); + void *cb_cls; +}; + +static void +monitor_peers_callback(void *cls, + const struct GNUNET_PeerIdentity *peer, + const struct GNUNET_HELLO_Address *address, + enum GNUNET_TRANSPORT_PeerState state, + struct GNUNET_TIME_Absolute state_timeout) +{ + struct monitor_peers_cls *mpc = cls; + + if (!peer) { + free(cls); + return; + } + if (!address) { + mpc->cb(mpc->cb_cls, peer, state, NULL, NULL, 0); + return; + } + mpc->cb(mpc->cb_cls, peer, state, address->transport_name, address->address, + address->address_length); +} + struct GNUNET_TRANSPORT_PeerMonitoringContext * GNUNET_TRANSPORT_monitor_peers_simple( - GNUNET_TRANSPORT_PeerIterateCallback peer_callback, + void *peer_callback, void *peer_callback_cls) { - return GNUNET_TRANSPORT_monitor_peers(NULL, NULL, GNUNET_NO, - GNUNET_TIME_UNIT_FOREVER_REL, peer_callback, peer_callback_cls); -} + struct monitor_peers_cls *mpc = malloc(sizeof(struct monitor_peers_cls)); -struct GNUNET_TRANSPORT_AddressToStringContext * -GNUNET_TRANSPORT_address_to_string_simple( - const struct GNUNET_HELLO_Address *address, - GNUNET_TRANSPORT_AddressToStringCallback aluc, - void *aluc_cls) -{ - return GNUNET_TRANSPORT_address_to_string(NULL, address, GNUNET_YES, - GNUNET_TIME_UNIT_FOREVER_REL, aluc, aluc_cls); + if (!mpc) + return NULL; + mpc->cb = peer_callback; + mpc->cb_cls = peer_callback_cls; + return GNUNET_TRANSPORT_monitor_peers(NULL, NULL, GNUNET_NO, + GNUNET_TIME_UNIT_FOREVER_REL, monitor_peers_callback, mpc); } /* vim: set expandtab ts=2 sw=2: */ diff --git a/gnunet-build/packages/gnunet/gnunet/files/client-lib.exports b/gnunet-build/packages/gnunet/gnunet/files/client-lib.exports index fa8dada..b654242 100644 --- a/gnunet-build/packages/gnunet/gnunet/files/client-lib.exports +++ b/gnunet-build/packages/gnunet/gnunet/files/client-lib.exports @@ -38,7 +38,6 @@ "_GNUNET_FS_uri_parse", "_GNUNET_FS_uri_to_string", "_GNUNET_HELLO_get_id", -"_GNUNET_TRANSPORT_address_to_string_simple", "_GNUNET_TRANSPORT_connect", "_GNUNET_TRANSPORT_get_hello", "_GNUNET_TRANSPORT_get_hello_cancel", diff --git a/src/cljs/gnunet_web/transport.cljs b/src/cljs/gnunet_web/transport.cljs index 07f97c2..2956b62 100644 --- a/src/cljs/gnunet_web/transport.cljs +++ b/src/cljs/gnunet_web/transport.cljs @@ -19,7 +19,8 @@ [gnunet-web.hello :refer [encode-hello]] [gnunet-web.service :as service] ;; leave this here [gnunet-web.util :refer [get-object read-memory register-object - unregister-object]]) + unregister-object]] + [goog.crypt :refer [utf8ByteArrayToString]]) (:require-macros [cljs.core.async.macros :refer [go go-loop]] [fence.core :refer [+++]])) @@ -83,42 +84,18 @@ get-hello-callback-pointer closure-key)))) -(defn address->string-callback - [cls string-pointer res] - (let [ch (get-object cls)] - (if (zero? string-pointer) - (do - (unregister-object cls) - (close! ch)) - (when (= 1 res) - (go (>! ch (js/Pointer_stringify string-pointer))))))) - -(def address->string-callback-pointer - (+++ (.addFunction js/Runtime address->string-callback))) - -(defn address->string - [address-pointer] - (let [ch (chan 1) - ch-key (register-object ch)] - (js/_GNUNET_TRANSPORT_address_to_string_simple - address-pointer - address->string-callback-pointer - ch-key) - ch)) - (defn monitor-callback - [cls peer-pointer address-pointer state state-timeout] - (when-not (zero? peer-pointer) - (let [callback (get-object cls) - peer (vec (read-memory peer-pointer 32))] - (if (zero? address-pointer) - (callback {:state state - :peer peer}) - (let [ch (address->string address-pointer)] - (go (callback {:state state - :peer peer - :address (<! ch)}) - (close! ch))))))) + [cls peer-pointer state transport-pointer address-pointer address-length] + (let [callback (get-object cls) + peer (vec (read-memory peer-pointer 32))] + (callback + {:state state + :peer peer + :address (when-not (zero? transport-pointer) + (let [transport (js/Pointer_stringify transport-pointer) + address (read-memory address-pointer address-length)] + (when (= "http_client" transport) + (utf8ByteArrayToString (to-array (drop 8 address))))))}))) (def monitor-callback-pointer (+++ (.addFunction js/Runtime monitor-callback))) |