diff options
author | David Barksdale <amatus.amongus@gmail.com> | 2010-09-29 22:38:12 -0700 |
---|---|---|
committer | David Barksdale <amatus.amongus@gmail.com> | 2010-09-29 22:38:12 -0700 |
commit | 6ee3a243f49da5c91711bb39f8cd5c3a7b1105c0 (patch) | |
tree | 500f8b0919ef3a82c89bc67a5bb89b13b6b8042a | |
parent | ed0d80ab6cbba5b4fed1df409ef355ffa1e3dfce (diff) |
More work on network transport support. Switching gears to add UDP support first.
-rw-r--r-- | src/org/gnu/clojure/gnunet/hostlist.clj | 2 | ||||
-rw-r--r-- | src/org/gnu/clojure/gnunet/inet.clj | 6 | ||||
-rw-r--r-- | src/org/gnu/clojure/gnunet/transport.clj | 21 | ||||
-rw-r--r-- | src/org/gnu/clojure/gnunet/udp.clj | 14 |
4 files changed, 42 insertions, 1 deletions
diff --git a/src/org/gnu/clojure/gnunet/hostlist.clj b/src/org/gnu/clojure/gnunet/hostlist.clj index 2edf064..eab79f3 100644 --- a/src/org/gnu/clojure/gnunet/hostlist.clj +++ b/src/org/gnu/clojure/gnunet/hostlist.clj @@ -39,4 +39,4 @@ peer." [peer url] (proxy [java.util.TimerTask] [] - (run [] (download-hostlist (partial admit-hello! peer) url))))
\ No newline at end of file + (run [] (download-hostlist! (partial admit-hello! peer) url)))) diff --git a/src/org/gnu/clojure/gnunet/inet.clj b/src/org/gnu/clojure/gnunet/inet.clj index 8d34a23..5b48d7b 100644 --- a/src/org/gnu/clojure/gnunet/inet.clj +++ b/src/org/gnu/clojure/gnunet/inet.clj @@ -17,3 +17,9 @@ (domonad parser-m [addr (items 4) port parse-uint16] (InetSocketAddress. (InetAddress/getByAddress (byte-array addr)) port)))) + +(defn is-unicast-address + [address] + (and + (not (.isAnyLocalAddress address)) + (not (.isMulticastAddress address)))) diff --git a/src/org/gnu/clojure/gnunet/transport.clj b/src/org/gnu/clojure/gnunet/transport.clj new file mode 100644 index 0000000..6428e74 --- /dev/null +++ b/src/org/gnu/clojure/gnunet/transport.clj @@ -0,0 +1,21 @@ +(ns org.gnu.clojure.gnunet.transport + (:use (org.gnu.clojure.gnunet udp hello)) + (:import java.util.Date)) + +(def my-transports {"udp" udp-send!}) + +(defn best-transport + [transports] + (let [current-transports (merge-transports (Date.) {} (list-transports + transports)) + usable-transports (filter #(contains? my-transports (key %)) + current-transports) + best (first usable-transports)] + [(my-transports (key best)) (val best)])) + +(defn send-message! + "Sends message to remote-peer." + [remote-peer message] + (let [[transport-send! addresses] (best-transport + (deref (:transports-agent remote-peer)))] + (transport-send! remote-peer addresses message))) diff --git a/src/org/gnu/clojure/gnunet/udp.clj b/src/org/gnu/clojure/gnunet/udp.clj new file mode 100644 index 0000000..20d1755 --- /dev/null +++ b/src/org/gnu/clojure/gnunet/udp.clj @@ -0,0 +1,14 @@ +(ns org.gnu.clojure.gnunet.udp + (:use org.gnu.clojure.gnunet.inet)) + +(defn pick-address + [addresses] + (let [parsed-addresses (map #(first (parse-address (key %))) addresses) + usable-addresses (filter #(and % (is-unicast-address (.getAddress %))) + parsed-addresses)] + (first usable-addresses))) + +(defn udp-send! + [remote-peer addresses encoded-message] + (let [address (pick-address addresses)] + )) |