aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Barksdale <amatus@amatus.name>2014-11-28 11:58:57 -0600
committerDavid Barksdale <amatus@amatus.name>2014-11-28 11:58:57 -0600
commit7e267b8345733f196d041c78dabe364e62fe17a6 (patch)
treea5e546bae3777f7f45d192d6f77c761798d0d926
parent89c60a81b38d60b5762472c98d2dd60d8312d046 (diff)
Moved some stuff into gnunet-web.util
-rw-r--r--src/cljs/gnunet_web/filesharing.cljs36
-rw-r--r--src/cljs/gnunet_web/util.cljs29
2 files changed, 37 insertions, 28 deletions
diff --git a/src/cljs/gnunet_web/filesharing.cljs b/src/cljs/gnunet_web/filesharing.cljs
index fa6330b..15a1c54 100644
--- a/src/cljs/gnunet_web/filesharing.cljs
+++ b/src/cljs/gnunet_web/filesharing.cljs
@@ -16,29 +16,11 @@
(ns gnunet-web.filesharing
(:require [cljs.core.async :refer [chan close!]]
- [gnunet-web.extractor :as e])
+ [gnunet-web.extractor :as e]
+ [gnunet-web.util :refer [get-object i64-to-real real-to-i64
+ register-object unregister-object]])
(:require-macros [cljs.core.async.macros :refer [go]]))
-(def objects (atom {:next 0}))
-
-(defn register-object
- [object]
- (swap! objects
- (fn [{:keys [next] :as objects}]
- (conj objects
- {next object
- :next (inc next)})))
- ;; This would normally be cheating
- (dec (:next @objects)))
-
-(defn unregister-object
- [object-key]
- (swap! objects dissoc object-key))
-
-(defn get-object
- [object-key]
- (get @objects object-key))
-
(defn uri-ksk-create
[query]
(js/ccallFunc
@@ -220,7 +202,7 @@
0)] ; parent
(js/_GNUNET_FS_uri_destroy uri-pointer)
{:download download
- :size length-lw ;; XXX length truncated for now
+ :size (i64-to-real [length-lw length-hw])
:ch ch
:callback-key callback-key}))
@@ -228,23 +210,21 @@
[]
)
-(def publish-reader-callback-key
+(def publish-reader-callback-pointer
(js/Runtime.addFunction publish-reader-callback))
(defn start-publish
[file keywords anonymity]
(let [file-key (register-object file)
- length (.-size file)
- length-lw (bit-shift-right length 0)
- length-hw (Math/min 4294967295.0 (Math/floor (/ length 4294967296.0)))
+ length (real-to-i64 (.-size file))
ch (chan 1)
callback (fn [info] (go (>! ch info)))
callback-key (register-object callback)
fi (js/_GNUNET_FS_file_information_create_from_reader
fs
callback-key ; void *client_info
- length-lw length-hw ; uint64_t length
- publish-reader-callback-key ; GNUNET_FS_DataReader reader
+ (first length) (second length) ; uint64_t length
+ publish-reader-callback-pointer ; GNUNET_FS_DataReader reader
file-key ; void *reader_cls
0 ; struct GNUNET_FS_Uri *keywords
0 ; struct GNUNET_CONTAINER_MetaData *meta
diff --git a/src/cljs/gnunet_web/util.cljs b/src/cljs/gnunet_web/util.cljs
index 31a926c..92a06f9 100644
--- a/src/cljs/gnunet_web/util.cljs
+++ b/src/cljs/gnunet_web/util.cljs
@@ -19,3 +19,32 @@
(defn now
[]
(-> (js/Date.) (.valueOf) (* 1000)))
+
+(def objects (atom {:next 0}))
+
+(defn register-object
+ [object]
+ (swap! objects
+ (fn [{:keys [next] :as objects}]
+ (conj objects
+ {next object
+ :next (inc next)})))
+ ;; This would normally be cheating
+ (dec (:next @objects)))
+
+(defn unregister-object
+ [object-key]
+ (swap! objects dissoc object-key))
+
+(defn get-object
+ [object-key]
+ (get @objects object-key))
+
+(defn real-to-i64
+ [x]
+ [(unsigned-bit-shift-right x 0)
+ (Math/min 4294967295 (Math/floor (/ x 4294967296)))])
+
+(defn i64-to-real
+ [[lw hw]]
+ (+ lw (* 4294967296 hw)))