summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Barksdale <amatus.amongus@gmail.com>2010-05-20 00:47:10 -0700
committerDavid Barksdale <amatus.amongus@gmail.com>2010-05-20 00:47:10 -0700
commit388bff9b2257500d48274be2ee83b9a25b612e4a (patch)
tree69e130bd070d3466fe016dde8362c40f1626d083
parentaf7385dae9571b322cccf284f40465236262a0c8 (diff)
Starting work on processing received hello messages so that the TCP transport
will have addresses to consume.
-rw-r--r--src/org/gnu/clojure/gnunet/identity.clj4
-rw-r--r--src/org/gnu/clojure/gnunet/peer.clj43
2 files changed, 41 insertions, 6 deletions
diff --git a/src/org/gnu/clojure/gnunet/identity.clj b/src/org/gnu/clojure/gnunet/identity.clj
index 9ddbef9..adece97 100644
--- a/src/org/gnu/clojure/gnunet/identity.clj
+++ b/src/org/gnu/clojure/gnunet/identity.clj
@@ -3,7 +3,7 @@
(defn generate-id
"Generate the SHA-512 digest of the encoded public key."
- [keypair]
- (sha-512 (encode-rsa-public-key (.getPublic keypair))))
+ [public-key]
+ (sha-512 (encode-rsa-public-key public-key)))
(def id-size (count (sha-512 ())))
diff --git a/src/org/gnu/clojure/gnunet/peer.clj b/src/org/gnu/clojure/gnunet/peer.clj
index cc3c7a5..0c3a0d6 100644
--- a/src/org/gnu/clojure/gnunet/peer.clj
+++ b/src/org/gnu/clojure/gnunet/peer.clj
@@ -1,14 +1,24 @@
(ns org.gnu.clojure.gnunet.peer
- (:use (org.gnu.clojure.gnunet identity)))
+ (:use (org.gnu.clojure.gnunet identity))
+ (:import java.util.Date))
(defstruct remote-peer
:public-key
- :id)
+ :id
+ :transports-agent)
+
+(defn new-remote-peer-from-hello
+ [hello]
+ (struct-map remote-peer
+ :public-key (:public-key hello)
+ :id (generate-id (:public-key hello))
+ :transports-agent (agent (:transports hello))))
(def peer (apply create-struct (concat
(keys (struct-map remote-peer))
(list
- :private-key))))
+ :private-key
+ :remote-peers-agent))))
(defstruct peer-options
:keypair)
@@ -16,5 +26,30 @@
(defn new-peer [options]
(struct-map peer
:public-key (.getPublic (:keypair options))
+ :id (generate-id (.getPublic (:keypair options)))
+ :transports-agent (agent [])
:private-key (.getPrivate (:keypair options))
- :id (generate-id (:keypair options))))
+ :remote-peers-agent (agent {})))
+
+(def filter-expired-transports
+ (partial filter #(< (:expiration %) (Date.))))
+
+;; Event - Peer receives a HELLO message
+(defn admit-hello!
+ [peer hello]
+ (letfn [(update-transports
+ [transports new-transports]
+ (filter-expired-transports (concat transports new-transports)))
+ (update-remote-peers
+ [remote-peers hello]
+ (let [id (vec (generate-id (:public-key hello)))
+ remote-peer (remote-peers id)]
+ (if remote-peer
+ (do
+ (send
+ (:transports-agent remote-peer)
+ update-transports
+ (:transports hello))
+ remote-peers)
+ (assoc remote-peers id (new-remote-peer-from-hello hello)))))]
+ (send (:remote-peers-agent peer) update-remote-peers hello)))