diff options
-rw-r--r-- | gnunet-build/packages/gnunet/gnunet/Buildrules | 6 | ||||
-rw-r--r-- | gnunet-build/packages/gnunet/gnunet/files/configuration.js | 12 | ||||
-rw-r--r-- | gnunet-build/packages/gnunet/gnunet/files/datastore-pre.js | 22 | ||||
-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.js | 21 | ||||
-rw-r--r-- | gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten.c | 165 | ||||
-rw-r--r-- | gnunet-build/packages/gnunet/gnunet/files/plugin_datastore_emscripten_int.js | 322 | ||||
-rw-r--r-- | gnunet-build/packages/gnunet/gnunet/files/plugin_peerstore_emscripten.c | 8 | ||||
-rw-r--r-- | gnunet-build/packages/gnunet/gnunet/files/plugin_transport_http_client_emscripten.c | 21 | ||||
-rw-r--r-- | gnunet-build/packages/gnunet/gnunet/files/scheduler.c | 13 | ||||
-rw-r--r-- | src/cljs/gnunet_web/transport.cljs | 10 |
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))) |