aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Barksdale <amatus@amatus.name>2014-12-14 01:13:23 -0600
committerDavid Barksdale <amatus@amatus.name>2014-12-14 01:13:23 -0600
commitb3057c8873c06919f7b69ddbc712ff5f09a9e871 (patch)
tree6164f60f5485caa97d5075694ffd06ab9bf09ece
parent8531340a4f1c209b4a2817ffe7f28370febeb353 (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.c51
-rw-r--r--gnunet-build/packages/gnunet/gnunet/files/client-lib.exports1
-rw-r--r--src/cljs/gnunet_web/transport.cljs49
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)))