aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnunet-build/packages/gnunet/gnunet/Buildrules6
-rw-r--r--gnunet-build/packages/gnunet/gnunet/files/configuration.js12
-rw-r--r--gnunet-build/packages/gnunet/gnunet/files/datastore-pre.js22
-rw-r--r--gnunet-build/packages/gnunet/gnunet/files/gnunet-git-3f9b17-all.patch (renamed from gnunet-build/packages/gnunet/gnunet/files/gnunet-git-a03d29-all.patch)110
-rw-r--r--gnunet-build/packages/gnunet/gnunet/files/network.js21
-rw-r--r--gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten.c165
-rw-r--r--gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten_int.js322
-rw-r--r--gnunet-build/packages/gnunet/gnunet/files/plugin_peerstore_emscripten.c8
-rw-r--r--gnunet-build/packages/gnunet/gnunet/files/plugin_transport_http_client_emscripten.c21
-rw-r--r--gnunet-build/packages/gnunet/gnunet/files/scheduler.c13
-rw-r--r--src/cljs/gnunet_web/transport.cljs10
11 files changed, 395 insertions, 315 deletions
diff --git a/gnunet-build/packages/gnunet/gnunet/Buildrules b/gnunet-build/packages/gnunet/gnunet/Buildrules
index 8e84763..5300307 100644
--- a/gnunet-build/packages/gnunet/gnunet/Buildrules
+++ b/gnunet-build/packages/gnunet/gnunet/Buildrules
@@ -1,4 +1,4 @@
-COMMIT="a03d29"
+COMMIT="3f9b17"
VERSION="git-${COMMIT}"
RELEASE="0"
DESCRIPTION="GNUnet is a framework for secure peer-to-peer networking that does not use any centralized or otherwise trusted services."
@@ -288,6 +288,7 @@ pkg_compile() {
"${S}/src/dht/gnunet-service-dht"*.o \
"${S}/src/ats/libgnunetats.la" \
"${S}/src/block/libgnunetblock.la" \
+ "${S}/src/block/libgnunetblockgroup.la" \
"${S}/src/core/libgnunetcore.la" \
"${S}/src/datacache/libgnunetdatacache.la" \
"${S}/src/hello/libgnunethello.la" \
@@ -348,7 +349,7 @@ pkg_compile() {
--use-preload-plugins \
"-I${SYSROOT}/usr/include" "-L${SYSROOT}/usr/lib" \
-o "${S}/src/cadet/gnunet-service-cadet.js" \
- "${S}/src/cadet/gnunet_service_cadet"*.o \
+ "${S}/src/cadet/gnunet-service-cadet"*.o \
"${S}/src/ats/libgnunetats.la" \
"${S}/src/block/libgnunetblock.la" \
"${S}/src/core/libgnunetcore.la" \
@@ -422,6 +423,7 @@ pkg_compile() {
"${S}/src/fs/gnunet-service-fs"*.o \
"${S}/src/ats/libgnunetats.la" \
"${S}/src/block/libgnunetblock.la" \
+ "${S}/src/block/libgnunetblockgroup.la" \
"${S}/src/cadet/libgnunetcadet.la" \
"${S}/src/core/libgnunetcore.la" \
"${S}/src/datastore/libgnunetdatastore.la" \
diff --git a/gnunet-build/packages/gnunet/gnunet/files/configuration.js b/gnunet-build/packages/gnunet/gnunet/files/configuration.js
index dcf17d7..d67d53f 100644
--- a/gnunet-build/packages/gnunet/gnunet/files/configuration.js
+++ b/gnunet-build/packages/gnunet/gnunet/files/configuration.js
@@ -201,11 +201,23 @@ mergeInto(LibraryManager.library, {
[iter_cls, section_name, option, value]);
}
},
+ GNUNET_CONFIGURATION_set_value_string: function(cfg, section, option, value) {
+ var section_name = Pointer_stringify(section);
+ var option_str = Pointer_stringify(option);
+ var value_str = Pointer_stringify(value);
+ if(!(section_name in CONFIG)) {
+ CONFIG[section_name] = {}
+ }
+ var sec = CONFIG[section_name]
+ sec[option] = value
+ },
GNUNET_CONFIGURATION_create: function() {
return 1; // opaque non-null pointer
},
GNUNET_CONFIGURATION_load: function(cfg, filename) {
return 1;
+ },
+ GNUNET_CONFIGURATION_destroy: function(cfg) {
}
});
diff --git a/gnunet-build/packages/gnunet/gnunet/files/datastore-pre.js b/gnunet-build/packages/gnunet/gnunet/files/datastore-pre.js
index d4a584b..6183bf0 100644
--- a/gnunet-build/packages/gnunet/gnunet/files/datastore-pre.js
+++ b/gnunet-build/packages/gnunet/gnunet/files/datastore-pre.js
@@ -1,6 +1,6 @@
datastore_prerun = function() {
addRunDependency('datastore-indexedDB');
- var request = indexedDB.open('datastore', 1);
+ var request = indexedDB.open('datastore', 2);
request.onsuccess = function(e) {
self.dsdb = e.target.result;
removeRunDependency('datastore-indexedDB');
@@ -10,12 +10,20 @@ datastore_prerun = function() {
};
request.onupgradeneeded = function(e) {
var db = e.target.result;
- var store = db.createObjectStore('datastore', {keyPath: 'uid',
- autoIncrement: true});
- store.createIndex('by_key', 'key');
- store.createIndex('by_anon_type', ['anonymity', 'type']);
- store.createIndex('by_replication', 'replication');
- store.createIndex('by_expiry', 'expiry');
+ if (0 == e.oldVersion) {
+ var store = db.createObjectStore('datastore', {keyPath: 'uid',
+ autoIncrement: true});
+ store.createIndex('by_key', ['key', 'uid']);
+ store.createIndex('by_anon_type', ['anonymity', 'type', 'uid']);
+ store.createIndex('by_replication', 'replication');
+ store.createIndex('by_expiry', 'expiry');
+ } else if (1 == e.oldVersion) {
+ var store = request.transaction.objectStore('datastore');
+ store.deleteIndex('by_key');
+ store.createIndex('by_key', ['key', 'uid']);
+ store.deleteIndex('by_anon_type');
+ store.createIndex('by_anon_type', ['anonymity', 'type', 'uid']);
+ }
};
};
Module['preInit'].push(datastore_prerun);
diff --git a/gnunet-build/packages/gnunet/gnunet/files/gnunet-git-a03d29-all.patch b/gnunet-build/packages/gnunet/gnunet/files/gnunet-git-3f9b17-all.patch
index b1e8b3b..69721e1 100644
--- a/gnunet-build/packages/gnunet/gnunet/files/gnunet-git-a03d29-all.patch
+++ b/gnunet-build/packages/gnunet/gnunet/files/gnunet-git-3f9b17-all.patch
@@ -1,8 +1,8 @@
diff --git a/configure.ac b/configure.ac
-index 7c10d07..a3c121f 100644
+index 145a6aaff..93b13d636 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -655,7 +655,7 @@ AC_ARG_WITH(ltdl,
+@@ -701,7 +701,7 @@ AC_ARG_WITH(ltdl,
AC_CHECK_HEADERS(ltdl.h,
AC_CHECK_LIB([ltdl], [lt_dlopenext],
ltdl=1))])
@@ -12,7 +12,7 @@ index 7c10d07..a3c121f 100644
AC_MSG_RESULT([libltdl found])
else
diff --git a/src/Makefile.am b/src/Makefile.am
-index 56f301a..0fcefed 100644
+index 6d0284157..58a954b53 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -100,7 +100,6 @@ SUBDIRS = \
@@ -23,8 +23,8 @@ index 56f301a..0fcefed 100644
topology \
regex \
dns \
-@@ -113,19 +112,8 @@ SUBDIRS = \
- set \
+@@ -114,20 +113,8 @@ SUBDIRS = \
+ consensus \
scalarproduct \
revocation \
- vpn \
@@ -34,6 +34,7 @@ index 56f301a..0fcefed 100644
fs \
- exit \
- pt \
+- secretsharing \
- integration-tests \
- multicast \
- psycutil \
@@ -41,10 +42,10 @@ index 56f301a..0fcefed 100644
- psyc \
- social \
$(AUCTION_DIR) \
- $(EXP_DIR) \
- $(PROVIDER_DIR)
+ $(EXP_DIR)
+
diff --git a/src/datastore/Makefile.am b/src/datastore/Makefile.am
-index 1285020..e3203cc 100644
+index 240abbc67..db784cc44 100644
--- a/src/datastore/Makefile.am
+++ b/src/datastore/Makefile.am
@@ -104,7 +104,8 @@ plugin_LTLIBRARIES = \
@@ -57,7 +58,7 @@ index 1285020..e3203cc 100644
# Real plugins should of course go into
# plugin_LTLIBRARIES
-@@ -130,6 +131,13 @@ libgnunet_plugin_datastore_heap_la_LIBADD = \
+@@ -131,6 +132,13 @@ libgnunet_plugin_datastore_heap_la_LIBADD = \
libgnunet_plugin_datastore_heap_la_LDFLAGS = \
$(GN_PLUGIN_LDFLAGS)
@@ -72,28 +73,27 @@ index 1285020..e3203cc 100644
libgnunet_plugin_datastore_mysql_la_SOURCES = \
plugin_datastore_mysql.c
diff --git a/src/dht/Makefile.am b/src/dht/Makefile.am
-index 26beb30..1cb6c03 100644
+index c52ac93c7..d3983ef9e 100644
--- a/src/dht/Makefile.am
+++ b/src/dht/Makefile.am
-@@ -55,16 +55,6 @@ libexec_PROGRAMS += \
- gnunet-service-dht-whanau
- endif
+@@ -50,15 +50,6 @@ libgnunet_plugin_block_dht_la_LDFLAGS = \
+ libexec_PROGRAMS = \
+ gnunet-service-dht
--noinst_PROGRAMS = \
+-bin_PROGRAMS = \
- gnunet-dht-monitor \
- gnunet-dht-get \
- gnunet-dht-put
-
-if HAVE_TESTING
--noinst_PROGRAMS += \
+-noinst_PROGRAMS = \
- gnunet-dht-profiler
-endif
--
+
gnunet_service_dht_SOURCES = \
gnunet-service-dht.c gnunet-service-dht.h \
- gnunet-service-dht_datacache.c gnunet-service-dht_datacache.h \
diff --git a/src/dns/Makefile.am b/src/dns/Makefile.am
-index f74c41f..f7c7ce1 100644
+index 5af228121..523c760a8 100644
--- a/src/dns/Makefile.am
+++ b/src/dns/Makefile.am
@@ -18,14 +18,6 @@ plugindir = $(libdir)/gnunet
@@ -112,7 +112,7 @@ index f74c41f..f7c7ce1 100644
libgnunetdnsparser.la \
libgnunetdnsstub.la \
diff --git a/src/fs/fs_api.c b/src/fs/fs_api.c
-index a5b82ec..5801aa8 100644
+index a5b82ec27..5801aa87b 100644
--- a/src/fs/fs_api.c
+++ b/src/fs/fs_api.c
@@ -456,19 +456,22 @@ struct FileInfo
@@ -293,7 +293,7 @@ index a5b82ec..5801aa8 100644
GNUNET_break (0);
goto cleanup;
diff --git a/src/fs/fs_api.h b/src/fs/fs_api.h
-index e85de94..20a13fe 100644
+index be22ea73e..2ae9f71f5 100644
--- a/src/fs/fs_api.h
+++ b/src/fs/fs_api.h
@@ -670,16 +670,17 @@ GNUNET_FS_dequeue_ (struct GNUNET_FS_QueueEntry *qe);
@@ -345,10 +345,10 @@ index e85de94..20a13fe 100644
/**
diff --git a/src/fs/fs_download.c b/src/fs/fs_download.c
-index a89a959..a11515a 100644
+index c2a3d4c5d..f386ce1f3 100644
--- a/src/fs/fs_download.c
+++ b/src/fs/fs_download.c
-@@ -1723,33 +1723,36 @@ reconstruct_cb (void *cls,
+@@ -1762,33 +1762,36 @@ reconstruct_cb (void *cls,
* @param offset identifies which block to get
* @param max (maximum) number of bytes to get; returning
* fewer will also cause errors
@@ -400,7 +400,7 @@ index a89a959..a11515a 100644
diff --git a/src/fs/fs_publish.c b/src/fs/fs_publish.c
-index 86a58a5..2c616fc 100644
+index 759467ba4..bd7bc606e 100644
--- a/src/fs/fs_publish.c
+++ b/src/fs/fs_publish.c
@@ -363,24 +363,24 @@ publish_kblocks_cont (void *cls,
@@ -489,7 +489,7 @@ index 86a58a5..2c616fc 100644
GNUNET_FS_directory_builder_add (db, dirpos->chk_uri, dirpos->meta,
raw_data);
diff --git a/src/fs/fs_test_lib.c b/src/fs/fs_test_lib.c
-index d038880..7c05639 100644
+index d03888021..7c05639ac 100644
--- a/src/fs/fs_test_lib.c
+++ b/src/fs/fs_test_lib.c
@@ -273,26 +273,23 @@ publish_progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info)
@@ -588,7 +588,7 @@ index d038880..7c05639 100644
}
GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fh));
diff --git a/src/fs/fs_tree.c b/src/fs/fs_tree.c
-index b3c6322..1771f07 100644
+index e57e4e494..c5b7dbdd2 100644
--- a/src/fs/fs_tree.c
+++ b/src/fs/fs_tree.c
@@ -322,59 +322,27 @@ compute_chk_offset (unsigned int depth, uint64_t end_offset)
@@ -729,7 +729,7 @@ index b3c6322..1771f07 100644
}
GNUNET_assert (GNUNET_NO == te->in_next);
diff --git a/src/fs/fs_unindex.c b/src/fs/fs_unindex.c
-index a672b84..c2713c0 100644
+index 95a48f8cc..7e55936cf 100644
--- a/src/fs/fs_unindex.c
+++ b/src/fs/fs_unindex.c
@@ -43,32 +43,37 @@
@@ -785,10 +785,10 @@ index a672b84..c2713c0 100644
diff --git a/src/include/gnunet_fs_service.h b/src/include/gnunet_fs_service.h
-index a9c7e89..29c3072 100644
+index cbad374b5..9cbc66c2e 100644
--- a/src/include/gnunet_fs_service.h
+++ b/src/include/gnunet_fs_service.h
-@@ -1846,6 +1846,20 @@ GNUNET_FS_file_information_create_from_data (struct GNUNET_FS_Handle *h,
+@@ -1860,6 +1860,20 @@ GNUNET_FS_file_information_create_from_data (struct GNUNET_FS_Handle *h,
/**
@@ -809,7 +809,7 @@ index a9c7e89..29c3072 100644
* Function that provides data.
*
* @param cls closure
-@@ -1857,20 +1871,21 @@ GNUNET_FS_file_information_create_from_data (struct GNUNET_FS_Handle *h,
+@@ -1871,20 +1885,21 @@ GNUNET_FS_file_information_create_from_data (struct GNUNET_FS_Handle *h,
* clean up the reader's state); in this case,
* a value of '0' for max should be ignored
* @param max maximum number of bytes that should be
@@ -838,7 +838,7 @@ index a9c7e89..29c3072 100644
/**
diff --git a/src/nat/Makefile.am b/src/nat/Makefile.am
-index f0d5639..f1fbd0e 100644
+index f0d5639a1..f1fbd0ef2 100644
--- a/src/nat/Makefile.am
+++ b/src/nat/Makefile.am
@@ -15,24 +15,6 @@ pkgcfgdir= $(pkgdatadir)/config.d/
@@ -867,10 +867,10 @@ index f0d5639..f1fbd0e 100644
gnunet-nat
diff --git a/src/peerstore/Makefile.am b/src/peerstore/Makefile.am
-index 21db6ad..5b3612a 100644
+index 3aef05769..beaf6a204 100644
--- a/src/peerstore/Makefile.am
+++ b/src/peerstore/Makefile.am
-@@ -79,7 +79,20 @@ libgnunet_plugin_peerstore_sqlite_la_LDFLAGS = \
+@@ -81,7 +81,20 @@ libgnunet_plugin_peerstore_sqlite_la_LDFLAGS = \
$(GN_PLUGIN_LDFLAGS)
endif
@@ -892,12 +892,12 @@ index 21db6ad..5b3612a 100644
$(FLAT_PLUGIN)
diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am
-index acc2557..dc3aaba 100644
+index e8c1f5d4a..0863ed399 100644
--- a/src/transport/Makefile.am
+++ b/src/transport/Makefile.am
-@@ -80,20 +80,6 @@ if USE_COVERAGE
- endif
+@@ -80,20 +80,6 @@ endif
+ if HAVE_EXPERIMENTAL
if LINUX
- WLAN_BIN = gnunet-helper-transport-wlan
- WLAN_BIN_DUMMY = gnunet-helper-transport-wlan-dummy
@@ -916,7 +916,7 @@ index acc2557..dc3aaba 100644
install-exec-hook:
$(top_srcdir)/src/transport/install-wlan-helper.sh $(DESTDIR)$(libexecdir) $(SUDO_BINARY) || true
if HAVE_LIBBLUETOOTH
-@@ -274,21 +260,7 @@ gnunet_service_transport_CFLAGS = \
+@@ -278,21 +264,7 @@ gnunet_service_transport_CFLAGS = \
$(CFLAGS)
# -DANALYZE
@@ -938,8 +938,8 @@ index acc2557..dc3aaba 100644
+plugin_LTLIBRARIES = libgnunet_plugin_transport_http_client.la
libgnunet_plugin_transport_tcp_la_SOURCES = \
- plugin_transport_tcp.c
-@@ -363,7 +335,7 @@ libgnunet_plugin_transport_unix_la_LDFLAGS = \
+ plugin_transport_tcp.c
+@@ -367,7 +339,7 @@ libgnunet_plugin_transport_unix_la_LDFLAGS = \
libgnunet_plugin_transport_http_client_la_SOURCES = \
@@ -948,20 +948,33 @@ index acc2557..dc3aaba 100644
libgnunet_plugin_transport_http_client_la_LIBADD = \
$(top_builddir)/src/hello/libgnunethello.la \
$(top_builddir)/src/statistics/libgnunetstatistics.la \
+diff --git a/src/transport/tcp_connection_legacy.c b/src/transport/tcp_connection_legacy.c
+index 17157436d..a6e9f0f17 100644
+--- a/src/transport/tcp_connection_legacy.c
++++ b/src/transport/tcp_connection_legacy.c
+@@ -408,7 +408,7 @@ GNUNET_CONNECTION_create_from_accept (GNUNET_CONNECTION_AccessCheck access_cb,
+ &gc.gid))
+ gcp = &gc;
+ #else
+-#ifdef SO_PEERCRED
++#if 0
+ /* largely traditional GNU/Linux */
+ olen = sizeof (uc);
+ if ( (0 ==
diff --git a/src/util/Makefile.am b/src/util/Makefile.am
-index 931dd95..52c1c29 100644
+index eb655157d..fdaca5721 100644
--- a/src/util/Makefile.am
+++ b/src/util/Makefile.am
-@@ -63,8 +63,6 @@ libgnunetutil_la_SOURCES = \
+@@ -65,8 +65,6 @@ libgnunetutil_la_SOURCES = \
common_allocation.c \
common_endian.c \
common_logging.c \
- configuration.c \
- configuration_loader.c \
- connection.c \
container_bloomfilter.c \
container_heap.c \
-@@ -95,13 +93,11 @@ libgnunetutil_la_SOURCES = \
+ container_meta_data.c \
+@@ -96,13 +94,11 @@ libgnunetutil_la_SOURCES = \
mst.c \
mq.c \
nc.c \
@@ -975,16 +988,3 @@ index 931dd95..52c1c29 100644
program.c \
resolver_api.c resolver.h \
scheduler.c \
-diff --git a/src/util/connection.c b/src/util/connection.c
-index 6d30704..a8b8633 100644
---- a/src/util/connection.c
-+++ b/src/util/connection.c
-@@ -397,7 +397,7 @@ GNUNET_CONNECTION_create_from_accept (GNUNET_CONNECTION_AccessCheck access_cb,
- &gc.gid))
- gcp = &gc;
- #else
--#ifdef SO_PEERCRED
-+#if 0
- /* largely traditional GNU/Linux */
- olen = sizeof (uc);
- if ( (0 ==
diff --git a/gnunet-build/packages/gnunet/gnunet/files/network.js b/gnunet-build/packages/gnunet/gnunet/files/network.js
index ef7c1bf..aff706a 100644
--- a/gnunet-build/packages/gnunet/gnunet/files/network.js
+++ b/gnunet-build/packages/gnunet/gnunet/files/network.js
@@ -225,6 +225,27 @@ mergeInto(LibraryManager.library, {
}
return 0;
},
+ GNUNET_NETWORK_shorten_unixpath: function(unixpath) {
+ console.error("GNUNET_NETWORK_shorten_unixpath should not be called");
+ return unixpath;
+ },
+ GNUNET_NETWORK_socket_box_native: function(fd) {
+ console.error("GNUNET_NETWORK_socket_box_native should not be called");
+ return 0;
+ },
+ GNUNET_NETWORK_socket_free_memory_only_: function(desc) {
+ console.error("GNUNET_NETWORK_socket_free_memory_only_ should not be called");
+ delete SOCKETS[desc];
+ },
+ GNUNET_NETWORK_socket_getsockopt: function(desc, level, optname, optval,
+ optlen) {
+ console.error("GNUNET_NETWORK_socket_getsockopt should not be called");
+ return -1;
+ },
+ GNUNET_NETWORK_socket_select: function(rfds, wfds, efds, timeout) {
+ console.error("GNUNET_NETWORK_socket_select should not be called");
+ return -1;
+ }
});
// vim: set expandtab ts=2 sw=2:
diff --git a/gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten.c b/gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten.c
index 3dcac82..697254d 100644
--- a/gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten.c
+++ b/gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten.c
@@ -51,6 +51,7 @@ emscripten_plugin_estimate_size (void *cls, unsigned long long *estimate)
*
* @param cls closure
* @param key key for the item
+ * @param absent true if the key was not found in the bloom filter
* @param size number of bytes in data
* @param data content stored
* @param type type of the content
@@ -62,37 +63,55 @@ emscripten_plugin_estimate_size (void *cls, unsigned long long *estimate)
* @param cont_cls continuation closure
*/
static void
-emscripten_plugin_put (void *cls, const struct GNUNET_HashCode *key,
- uint32_t size, const void *data,
- enum GNUNET_BLOCK_Type type, uint32_t priority,
- uint32_t anonymity, uint32_t replication,
+emscripten_plugin_put (void *cls,
+ const struct GNUNET_HashCode *key,
+ bool absent,
+ uint32_t size,
+ const void *data,
+ enum GNUNET_BLOCK_Type type,
+ uint32_t priority,
+ uint32_t anonymity,
+ uint32_t replication,
struct GNUNET_TIME_Absolute expiration,
- PluginPutCont cont, void *cont_cls)
+ PluginPutCont cont,
+ void *cont_cls)
{
- extern void emscripten_plugin_put_int(const void *key, const void *data,
- double size, double type, double priority, double anonymity,
- double replication, double expiration, void *vhash, void *cont,
- void *cons_cls);
- struct GNUNET_HashCode vhash;
-
- GNUNET_CRYPTO_hash (data, size, &vhash);
- emscripten_plugin_put_int(key, data, size, type, priority, anonymity,
- replication, expiration.abs_value_us, &vhash, cont, cont_cls);
+ extern void
+ emscripten_plugin_put_int(const void *key,
+ double absent,
+ const void *data,
+ double size,
+ double type,
+ double priority,
+ double anonymity,
+ double replication,
+ double expiration,
+ void *cont,
+ void *cons_cls);
+
+ emscripten_plugin_put_int(key, absent, data, size, type, priority, anonymity,
+ replication, expiration.abs_value_us, cont, cont_cls);
}
static int
-datum_processor_wrapper(PluginDatumProcessor proc, void *proc_cls,
- const struct GNUNET_HashCode *key, uint32_t size,
- const void *data, enum GNUNET_BLOCK_Type type,
- uint32_t priority, uint32_t anonymity,
- double *expiration, uint32_t uid)
+datum_processor_wrapper(PluginDatumProcessor proc,
+ void *proc_cls,
+ const struct GNUNET_HashCode *key,
+ uint32_t size,
+ const void *data,
+ enum GNUNET_BLOCK_Type type,
+ uint32_t priority,
+ uint32_t anonymity,
+ uint32_t replication,
+ double *expiration,
+ uint32_t uid)
{
struct GNUNET_TIME_Absolute expiry;
expiry.abs_value_us = *expiration;
- return proc(proc_cls, key, size, data, type, priority, anonymity, expiry,
- uid);
+ return proc(proc_cls, key, size, data, type, priority, anonymity, replication,
+ expiry, uid);
}
@@ -100,14 +119,9 @@ datum_processor_wrapper(PluginDatumProcessor proc, void *proc_cls,
* Get one of the results for a particular key in the datastore.
*
* @param cls closure
- * @param offset offset of the result (modulo num-results);
- * specific ordering does not matter for the offset
+ * @param next_uid return the result with lowest uid >= next_uid
+ * @param random if true, return a random result instead of using next_uid
* @param key maybe NULL (to match all entries)
- * @param vhash hash of the value, maybe NULL (to
- * match all values that have the right key).
- * Note that for DBlocks there is no difference
- * betwen key and vhash, but for other blocks
- * there may be!
* @param type entries of which type are relevant?
* Use 0 for any type.
* @param proc function to call on each matching value;
@@ -115,17 +129,18 @@ datum_processor_wrapper(PluginDatumProcessor proc, void *proc_cls,
* @param proc_cls closure for proc
*/
static void
-emscripten_plugin_get_key (void *cls, uint64_t offset,
+emscripten_plugin_get_key (void *cls,
+ uint64_t next_uid,
+ bool random,
const struct GNUNET_HashCode *key,
- const struct GNUNET_HashCode *vhash,
enum GNUNET_BLOCK_Type type,
- PluginDatumProcessor proc, void *proc_cls)
+ PluginDatumProcessor proc,
+ void *proc_cls)
{
- extern void emscripten_plugin_get_key_int(double offset, const void *key,
- const void *vhash, double type, void *proc, void *proc_cls,
- void *wrapper);
+ extern void emscripten_plugin_get_key_int(double next_uid, double random,
+ const void *key, double type, void *proc, void *proc_cls, void *wrapper);
- emscripten_plugin_get_key_int(offset, key, vhash, type, proc, proc_cls,
+ emscripten_plugin_get_key_int(next_uid, random, key, type, proc, proc_cls,
&datum_processor_wrapper);
}
@@ -175,45 +190,10 @@ emscripten_plugin_get_expiration (void *cls, PluginDatumProcessor proc,
/**
- * Update the priority for a particular key in the datastore. If
- * the expiration time in value is different than the time found in
- * the datastore, the higher value should be kept. The specified
- * priority should be added to the existing priority, ignoring the
- * priority in value.
- *
- * Note that it is possible for multiple values to match this put.
- * In that case, all of the respective values are updated.
- *
- * @param cls our "struct Plugin*"
- * @param uid unique identifier of the datum
- * @param delta by how much should the priority
- * change? If priority + delta < 0 the
- * priority should be set to 0 (never go
- * negative).
- * @param expire new expiration time should be the
- * MAX of any existing expiration time and
- * this value
- * @param cont continuation called with success or failure status
- * @param cons_cls continuation closure
- */
-static void
-emscripten_plugin_update (void *cls, uint64_t uid, int delta,
- struct GNUNET_TIME_Absolute expire,
- PluginUpdateCont cont, void *cont_cls)
-{
- extern void emscripten_plugin_update_int(double uid, double delta,
- double expriy, void *cont, void *cont_cls);
-
- emscripten_plugin_update_int(uid, delta, expire.abs_value_us, cont, cont_cls);
-}
-
-
-/**
* Call the given processor on an item with zero anonymity.
*
* @param cls our "struct Plugin*"
- * @param offset offset of the result (modulo num-results);
- * specific ordering does not matter for the offset
+ * @param next_uid return the result with lowest uid >= next_uid
* @param type entries of which type should be considered?
* Use 0 for any type.
* @param proc function to call on each matching value;
@@ -221,14 +201,16 @@ emscripten_plugin_update (void *cls, uint64_t uid, int delta,
* @param proc_cls closure for proc
*/
static void
-emscripten_plugin_get_zero_anonymity (void *cls, uint64_t offset,
- enum GNUNET_BLOCK_Type type,
- PluginDatumProcessor proc, void *proc_cls)
+emscripten_plugin_get_zero_anonymity (void *cls,
+ uint64_t next_uid,
+ enum GNUNET_BLOCK_Type type,
+ PluginDatumProcessor proc,
+ void *proc_cls)
{
- extern void emscripten_plugin_get_zero_anonymity_int(double offset,
+ extern void emscripten_plugin_get_zero_anonymity_int(double next_uid,
double type, void *proc, void *proc_cls, void *wrapper);
- emscripten_plugin_get_zero_anonymity_int(offset, type, proc, proc_cls,
+ emscripten_plugin_get_zero_anonymity_int(next_uid, type, proc, proc_cls,
&datum_processor_wrapper);
}
@@ -262,6 +244,35 @@ emscripten_plugin_get_keys (void *cls,
/**
+ * Remove a particular key in the datastore.
+ *
+ * @param cls closure
+ * @param key key for the content
+ * @param size number of bytes in data
+ * @param data content stored
+ * @param cont continuation called with success or failure status
+ * @param cont_cls continuation closure for @a cont
+ */
+static void
+emscripten_plugin_remove_key (void *cls,
+ const struct GNUNET_HashCode *key,
+ uint32_t size,
+ const void *data,
+ PluginRemoveCont cont,
+ void *cont_cls)
+{
+ extern void
+ emscripten_plugin_remove_key_int(void *key,
+ double size,
+ void *data,
+ void *cont,
+ void *cont_cls);
+
+ emscripten_plugin_remove_key_int(key, size, data, cont, cont_cls);
+}
+
+
+/**
* Entry point for the plugin.
*
* @param cls the "struct GNUNET_DATASTORE_PluginEnvironment*"
@@ -276,13 +287,13 @@ libgnunet_plugin_datastore_emscripten_init (void *cls)
api = GNUNET_new (struct GNUNET_DATASTORE_PluginFunctions);
api->estimate_size = &emscripten_plugin_estimate_size;
api->put = &emscripten_plugin_put;
- api->update = &emscripten_plugin_update;
api->get_key = &emscripten_plugin_get_key;
api->get_replication = &emscripten_plugin_get_replication;
api->get_expiration = &emscripten_plugin_get_expiration;
api->get_zero_anonymity = &emscripten_plugin_get_zero_anonymity;
api->drop = &emscripten_plugin_drop;
api->get_keys = &emscripten_plugin_get_keys;
+ api->remove_key = &emscripten_plugin_remove_key;
GNUNET_log_from (GNUNET_ERROR_TYPE_INFO, "emscripten",
_("Emscripten database running\n"));
return api;
diff --git a/gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten_int.js b/gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten_int.js
index 47c3a8f..582cc68 100644
--- a/gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten_int.js
+++ b/gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten_int.js
@@ -15,105 +15,125 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
mergeInto(LibraryManager.library, {
- emscripten_plugin_put_int: function(key_pointer, data_pointer, size, type,
- priority, anonymity, replication, expiry,
- vhash_pointer, cont, cont_cls) {
+ emscripten_plugin_put_int: function(key_pointer, absent, data_pointer, size,
+ type, priority, anonymity, replication,
+ expiry, cont, cont_cls) {
var key = Array.prototype.slice.call(HEAP8.subarray(key_pointer,
key_pointer + 64));
var data = Array.prototype.slice.call(HEAP8.subarray(data_pointer,
data_pointer + size));
- var vhash = Array.prototype.slice.call(HEAP8.subarray(vhash_pointer,
- vhash_pointer + 64));
- var request = self.dsdb.transaction(['datastore'], 'readwrite')
- .objectStore('datastore')
- .put({key: key,
- data: data,
- type: type,
- priority: priority,
- anonymity: anonymity,
- replication: replication,
- expiry: expiry,
- vhash: vhash});
- request.onerror = function(e) {
- console.error('put request failed');
- dynCall('viiiii', cont, [cont_cls, key_pointer, size, -1, 0]);
- };
- request.onsuccess = function(e) {
- dynCall('viiiii', cont, [cont_cls, key_pointer, size, 1, 0]);
+ var transaction = self.dsdb.transaction(['datastore'], 'readwrite');
+ var do_put = function() {
+ var request = transaction.objectStore('datastore')
+ .put({key: key,
+ data: data,
+ type: type,
+ priority: priority,
+ anonymity: anonymity,
+ replication: replication,
+ expiry: expiry});
+ request.onerror = function(e) {
+ console.error('put request failed');
+ dynCall('viiiii', cont, [cont_cls, key_pointer, size, -1, 0]);
+ };
+ request.onsuccess = function(e) {
+ dynCall('viiiii', cont, [cont_cls, key_pointer, size, 1, 0]);
+ };
};
- },
- emscripten_plugin_get_key_int: function(offset, key_pointer, vhash_pointer,
- type, proc, proc_cls,
- datum_processor_wrapper) {
+ if (absent) {
+ do_put();
+ } else {
+ var request = transaction.objectStore('datastore').index('by_key')
+ .openCursor(IDBKeyRange.bound(
+ [key], [key, Number.MAX_VALUE]));
+ request.onsuccess = function(e) {
+ var cursor = e.target.result;
+ if (cursor) {
+ var value = cursor.value;
+ // filter by data
+ if (size != value.data.length
+ || !data.every(function(x, i) {
+ return x == value.data[i]
+ })) {
+ cursor.continue();
+ return;
+ }
+ value.priority += priority;
+ value.replication += replication;
+ if (value.expiry < expiry) {
+ value.expiry = expiry;
+ }
+ var request = transaction.objectStore('datastore').put(value);
+ request.onerror = function(e) {
+ console.error('put request failed');
+ dynCall('viiiii', cont,
+ [cont_cls, key_pointer, size, -1, 0]);
+ };
+ request.onsuccess = function(e) {
+ dynCall('viiiii', cont,
+ [cont_cls, key_pointer, size, 0, 0]);
+ };
+ } else {
+ do_put();
+ }
+ };
+ }
+ }, emscripten_plugin_get_key_int: function(next_uid, random, key_pointer,
+ type, proc, proc_cls,
+ datum_processor_wrapper) {
var key = key_pointer ? Array.prototype.slice.call(HEAP8.subarray(
key_pointer, key_pointer + 64)) : null;
- var vhash = vhash_pointer ? Array.prototype.slice.call(HEAP8.subarray(
- vhash_pointer, vhash_pointer + 64)) : null;
- var count = 0;
- var request = self.dsdb.transaction(['datastore'], 'readwrite')
- .objectStore('datastore').index('by_key')
- .openCursor(key);
+ var range = null;
+ var transaction = self.dsdb.transaction(['datastore'], 'readonly');
+ // TODO: random
+ var request;
+ if (key_pointer) {
+ request = transaction.objectStore('datastore').index('by_key')
+ .openCursor(IDBKeyRange.bound(
+ [key, next_uid],
+ [key, Number.MAX_VALUE]));
+ } else {
+ request = transaction.objectStore('datastore').openCursor();
+ }
request.onerror = function(e) {
console.error('cursor request failed');
- dynCall('iiiiiiiiiii', proc,
- [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ dynCall('iiiiiiiiiiii', proc,
+ [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
};
request.onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
+ var value = cursor.value;
// optional filter by type
- if (type && type != cursor.value.type) {
- cursor.continue();
- return;
- }
- // optional filter by vhash
- if (vhash != null) {
- if (vhash.length != cursor.value.vhash.length
- || !vhash.every(function(x, i) {
- return x == cursor.value.vhash[i]
- })) {
- cursor.continue();
- return;
- }
- }
- // filter by offset
- if (offset != 0) {
- --offset;
- ++count;
+ if (type && type != value.type) {
cursor.continue();
return;
}
// got a result
var stack = stackSave();
var expiry = stackAlloc(getNativeTypeSize('double'));
- setValue(expiry, cursor.value.expiry, 'double');
+ setValue(expiry, value.expiry, 'double');
var ret = ccallFunc(
getFuncWrapper(datum_processor_wrapper,
- 'iiiiiiiiiii'),
+ 'iiiiiiiiiiii'),
'number',
['number', 'number', 'array', 'number', 'array', 'number', 'number',
- 'number', 'number', 'number'],
- [proc, proc_cls, cursor.value.key, cursor.value.data.length,
- cursor.value.data, cursor.value.type, cursor.value.priority,
- cursor.value.anonymity, expiry, cursor.value.uid]);
+ 'number', 'number', 'number', 'number'],
+ [proc, proc_cls, value.key, value.data.length, value.data,
+ value.type, value.priority, value.anonymity, value.replication,
+ expiry, value.uid]);
stackRestore(stack);
- if (!ret) {
- cursor.delete().onerror = function(e) {
- console.error('delete request failed');
- }
- }
} else {
- // did offset wrap around?
- if (count != 0) {
- offset = offset % count;
+ // do we need to wrap around?
+ if (next_uid != 0) {
// recurse
- _emscripten_plugin_get_key_int(offset, key_pointer, vhash_pointer,
- type, proc, proc_cls, datum_processor_wrapper);
+ _emscripten_plugin_get_key_int(0, false, key_pointer, type, proc,
+ proc_cls, datum_processor_wrapper);
return;
}
// not found
- dynCall('iiiiiiiiiii', proc,
- [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ dynCall('iiiiiiiiiiii', proc,
+ [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
}
};
}, emscripten_plugin_get_replication_int: function(proc, proc_cls,
@@ -123,44 +143,39 @@ mergeInto(LibraryManager.library, {
.openCursor(null, 'prev');
request.onerror = function(e) {
console.error('cursor request failed');
- dynCall('iiiiiiiiiii', proc,
- [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ dynCall('iiiiiiiiiiii', proc,
+ [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
};
request.onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
- // got a result
- if (cursor.value.replication > 0) {
- --cursor.value.replication;
+ var value = cursor.value
+ if (value.replication > 0) {
+ --value.replication;
}
- var request = transaction.objectStore('datastore').put(value);
+ var request = cursor.update(value);
request.onerror = function(e) {
- console.error('put request failed');
- dynCall('iiiiiiiiiii', proc,
- [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ console.error('replication update request failed');
+ dynCall('iiiiiiiiiiii', proc,
+ [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
};
request.onsuccess = function(e) {
var stack = stackSave();
var expiry = stackAlloc(getNativeTypeSize('double'));
setValue(expiry, cursor.value.expiry, 'double');
var ret = ccallFunc(
- getFuncWrapper(datum_processor_wrapper, 'iiiiiiiiiii'),
+ getFuncWrapper(datum_processor_wrapper, 'iiiiiiiiiiii'),
'number',
['number', 'number', 'array', 'number', 'array', 'number',
- 'number', 'number', 'number', 'number'],
- [proc, proc_cls, cursor.value.key, cursor.value.data.length,
- cursor.value.data, cursor.value.type, cursor.value.priority,
- cursor.value.anonymity, expiry, cursor.value.uid]);
+ 'number', 'number', 'number', 'number', 'number'],
+ [proc, proc_cls, value.key, value.data.length, value.data,
+ value.type, value.priority, value.anonymity, value.replication,
+ expiry, value.uid]);
stackRestore(stack);
- if (!ret) {
- cursor.delete().onerror = function(e) {
- console.error('delete request failed');
- }
- }
};
} else {
- dynCall('iiiiiiiiiii', proc,
- [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ dynCall('iiiiiiiiiiii', proc,
+ [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
}
};
}, emscripten_plugin_get_expiration_int: function(proc, proc_cls, now,
@@ -170,8 +185,8 @@ mergeInto(LibraryManager.library, {
.openCursor(IDBKeyRange.upperBound(now, true));
request.onerror = function(e) {
console.error('cursor request failed');
- dynCall('iiiiiiiiiii', proc,
- [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ dynCall('iiiiiiiiiiii', proc,
+ [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
};
request.onsuccess = function(e) {
var cursor = e.target.result;
@@ -182,13 +197,14 @@ mergeInto(LibraryManager.library, {
setValue(expiry, cursor.value.expiry, 'double');
var ret = ccallFunc(
getFuncWrapper(datum_processor_wrapper,
- 'iiiiiiiiiii'),
+ 'iiiiiiiiiiii'),
'number',
['number', 'number', 'array', 'number', 'array', 'number', 'number',
- 'number', 'number', 'number'],
+ 'number', 'number', 'number', 'number'],
[proc, proc_cls, cursor.value.key, cursor.value.data.length,
cursor.value.data, cursor.value.type, cursor.value.priority,
- cursor.value.anonymity, expiry, cursor.value.uid]);
+ cursor.value.anonymity, cursor.value.replication, expiry,
+ cursor.value.uid]);
stackRestore(stack);
if (!ret) {
cursor.delete().onerror = function(e) {
@@ -196,88 +212,49 @@ mergeInto(LibraryManager.library, {
}
}
} else {
- dynCall('iiiiiiiiiii', proc,
- [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ dynCall('iiiiiiiiiiii', proc,
+ [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
}
};
- }, emscripten_plugin_update_int: function(uid, delta, expiry, cont,
- cont_cls) {
- var transaction = self.dsdb.transaction(['datastore'], 'readwrite');
- var request = transaction.objectStore('datastore').get(uid);
- request.onerror = function(e) {
- console.warning('get request failed');
- dynCall('viii', cont, [cont_cls, -1, 0]);
- };
- request.onsuccess = function(e) {
- var value = e.target.result;
- value.priority += delta;
- if (value.priority < 0) {
- value.priority = 0;
- }
- if (value.expiry < expiry) {
- value.expiry = expiry;
- }
- var request = transaction.objectStore('datastore').put(value);
- request.onerror = function(e) {
- console.error('put request failed');
- dynCall('viii', cont, [cont_cls, -1, 0]);
- };
- request.onsuccess = function(e) {
- dynCall('viii', cont, [cont_cls, 1, 0]);
- };
- };
- }, emscripten_plugin_get_zero_anonymity_int: function(offset, type, proc,
+ }, emscripten_plugin_get_zero_anonymity_int: function(next_uid, type, proc,
proc_cls, datum_processor_wrapper) {
- var count = 0;
- var request = self.dsdb.transaction(['datastore'], 'readwrite')
+ var request = self.dsdb.transaction(['datastore'], 'readonly')
.objectStore('datastore').index('by_anon_type')
- .openCursor([0, type]);
+ .openCursor(IDBKeyRange.bound(
+ [0, type, next_uid], [0, type, Number.MAX_VALUE]));
request.onerror = function(e) {
console.error('cursor request failed');
- dynCall('iiiiiiiiiii', proc,
- [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ dynCall('iiiiiiiiiiii', proc,
+ [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
};
request.onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
- // filter by offset
- if (offset != 0) {
- --offset;
- ++count;
- cursor.continue();
- return;
- }
- // got a result
var stack = stackSave();
var expiry = stackAlloc(getNativeTypeSize('double'));
setValue(expiry, cursor.value.expiry, 'double');
var ret = ccallFunc(
getFuncWrapper(datum_processor_wrapper,
- 'iiiiiiiiiii'),
+ 'iiiiiiiiiiii'),
'number',
['number', 'number', 'array', 'number', 'array', 'number', 'number',
- 'number', 'number', 'number'],
+ 'number', 'number', 'number', 'number'],
[proc, proc_cls, cursor.value.key, cursor.value.data.length,
cursor.value.data, cursor.value.type, cursor.value.priority,
- cursor.value.anonymity, expiry, cursor.value.uid]);
+ cursor.value.anonymity, cursor.value.replication, expiry,
+ cursor.value.uid]);
stackRestore(stack);
- if (!ret) {
- cursor.delete().onerror = function(e) {
- console.error('delete request failed');
- }
- }
} else {
- // did offset wrap around?
- if (count != 0) {
- offset = offset % count;
+ // do we need to wrap around?
+ if (next_uid != 0) {
// recurse
- _emscripten_plugin_get_zero_anonymity_int(offset, type, proc,
- proc_cls, datum_processor_wrapper);
+ _emscripten_plugin_get_zero_anonymity_int(0, type, proc, proc_cls,
+ datum_processor_wrapper);
return;
}
// not found
- dynCall('iiiiiiiiiii', proc,
- [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
+ dynCall('iiiiiiiiiiii', proc,
+ [proc_cls, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
}
};
}, emscripten_plugin_get_keys_int: function(proc, proc_cls) {
@@ -306,6 +283,47 @@ mergeInto(LibraryManager.library, {
dynCall('viii', proc, [proc_cls, 0, 0]);
}
};
+ }, emscripten_plugin_remove_key_int: function(key_pointer, size, data_pointer,
+ cont, cont_cls) {
+ var key = Array.prototype.slice.call(HEAP8.subarray(key_pointer,
+ key_pointer + 64));
+ var data = Array.prototype.slice.call(HEAP8.subarray(data_pointer,
+ data_pointer + size));
+ var transaction = self.dsdb.transaction(['datastore'], 'readwrite');
+ var request = transaction.objectStore('datastore').index('by_key')
+ .openCursor(IDBKeyRange.bound(
+ [key], [key, Number.MAX_VALUE]));
+ request.onerror = function(e) {
+ console.error('cursor request failed');
+ dynCall('viiiii', cont, [cont_cls, key_pointer, size, -1, 0]);
+ }
+ request.onsuccess = function(e) {
+ var cursor = e.target.result;
+ if (cursor) {
+ var value = cursor.value;
+ // filter by data
+ if (size != value.data.length
+ || !data.every(function(x, i) {
+ return x == value.data[i]
+ })) {
+ cursor.continue();
+ return;
+ }
+ // found
+ request = cursor.delete();
+ request.onerror = function(e) {
+ console.error('delete request failed');
+ dynCall('viiiii', cont, [cont_cls, key_pointer, size, -1, 0]);
+ }
+ request.onsuccess = function(e) {
+ // removed
+ dynCall('viiiii', cont, [cont_cls, key_pointer, size, 1, 0]);
+ }
+ } else {
+ // not found
+ dynCall('viiiii', cont, [cont_cls, key_pointer, size, 0, 0]);
+ }
+ }
}
});
diff --git a/gnunet-build/packages/gnunet/gnunet/files/plugin_peerstore_emscripten.c b/gnunet-build/packages/gnunet/gnunet/files/plugin_peerstore_emscripten.c
index 5fde4d3..2f9a0c3 100644
--- a/gnunet-build/packages/gnunet/gnunet/files/plugin_peerstore_emscripten.c
+++ b/gnunet-build/packages/gnunet/gnunet/files/plugin_peerstore_emscripten.c
@@ -84,18 +84,16 @@ peerstore_emscripten_iter_wrapper (
char *key,
void *value,
size_t value_size,
- double *expiry_dbl)
+ double *expiry)
{
- struct GNUNET_TIME_Absolute expiry;
struct GNUNET_PEERSTORE_Record ret;
- expiry.abs_value_us = *expiry_dbl;
ret.sub_system = sub_system;
- ret.peer = peer;
+ ret.peer = *peer;
ret.key = key;
ret.value = value;
ret.value_size = value_size;
- ret.expiry = &expiry;
+ ret.expiry.abs_value_us = expiry;
iter (iter_cls, &ret, NULL);
}
diff --git a/gnunet-build/packages/gnunet/gnunet/files/plugin_transport_http_client_emscripten.c b/gnunet-build/packages/gnunet/gnunet/files/plugin_transport_http_client_emscripten.c
index f0c05d6..ac4779f 100644
--- a/gnunet-build/packages/gnunet/gnunet/files/plugin_transport_http_client_emscripten.c
+++ b/gnunet-build/packages/gnunet/gnunet/files/plugin_transport_http_client_emscripten.c
@@ -130,7 +130,7 @@ struct GNUNET_ATS_Session
/**
* Message stream tokenizer for incoming data
*/
- struct GNUNET_SERVER_MessageStreamTokenizer *msg_tk;
+ struct GNUNET_MessageStreamTokenizer *msg_tk;
/**
* Session timeout task
@@ -309,7 +309,7 @@ client_delete_session (struct GNUNET_ATS_Session *s)
GNUNET_TRANSPORT_SS_DONE);
if (NULL != s->msg_tk)
{
- GNUNET_SERVER_mst_destroy (s->msg_tk);
+ GNUNET_MST_destroy (s->msg_tk);
s->msg_tk = NULL;
}
GNUNET_HELLO_address_free (s->address);
@@ -533,13 +533,11 @@ client_lookup_session (struct HTTP_Client_Plugin *plugin,
* Callback for message stream tokenizer
*
* @param cls the session
- * @param client not used
* @param message the message received
* @return always #GNUNET_OK
*/
static int
client_receive_mst_cb (void *cls,
- void *client,
const struct GNUNET_MessageHeader *message)
{
struct GNUNET_ATS_Session *s = cls;
@@ -618,14 +616,13 @@ client_receive (void *stream,
return 0;
}
if (NULL == s->msg_tk)
- s->msg_tk = GNUNET_SERVER_mst_create (&client_receive_mst_cb,
- s);
- GNUNET_SERVER_mst_receive (s->msg_tk,
- s,
- stream,
- len,
- GNUNET_NO,
- GNUNET_NO);
+ s->msg_tk = GNUNET_MST_create (&client_receive_mst_cb,
+ s);
+ GNUNET_MST_from_buffer (s->msg_tk,
+ stream,
+ len,
+ GNUNET_NO,
+ GNUNET_NO);
return len;
}
diff --git a/gnunet-build/packages/gnunet/gnunet/files/scheduler.c b/gnunet-build/packages/gnunet/gnunet/files/scheduler.c
index 6874326..ba3c5aa 100644
--- a/gnunet-build/packages/gnunet/gnunet/files/scheduler.c
+++ b/gnunet-build/packages/gnunet/gnunet/files/scheduler.c
@@ -63,6 +63,13 @@ GNUNET_SCHEDULER_add_now (GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
}
struct GNUNET_SCHEDULER_Task *
+GNUNET_SCHEDULER_add_now_with_lifeness (int lifeness,
+ GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
+{
+ return GNUNET_SCHEDULER_add_now (task, task_cls);
+}
+
+struct GNUNET_SCHEDULER_Task *
GNUNET_SCHEDULER_add_at_with_priority (struct GNUNET_TIME_Absolute at,
enum GNUNET_SCHEDULER_Priority priority,
GNUNET_SCHEDULER_TaskCallback task,
@@ -108,4 +115,10 @@ GNUNET_SCHEDULER_get_task_context ()
return &tc;
}
+void
+GNUNET_SCHEDULER_shutdown (void)
+{
+ // TODO: do we even need this?
+}
+
/* vim: set expandtab ts=2 sw=2: */
diff --git a/src/cljs/gnunet_web/transport.cljs b/src/cljs/gnunet_web/transport.cljs
index a93ec41..59332d8 100644
--- a/src/cljs/gnunet_web/transport.cljs
+++ b/src/cljs/gnunet_web/transport.cljs
@@ -89,11 +89,11 @@
{: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)
- (gcrypt/utf8ByteArrayToString
- (to-array (drop 8 address))))))})))
+ (let [transport (js/Pointer_stringify transport-pointer)]
+ (when (and (= "http_client" transport)
+ (<= 9 address-length))
+ (js/Pointer_stringify (+ 8 address-pointer)
+ (- address-length 9)))))})))
(def monitor-callback-pointer (+++ (js/addFunction monitor-callback)))