summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/server/globals.c2
-rw-r--r--src/server/globals.h7
-rw-r--r--src/shared/protocol.h2
3 files changed, 10 insertions, 1 deletions
diff --git a/src/server/globals.c b/src/server/globals.c
index c9b9411..010274d 100644
--- a/src/server/globals.c
+++ b/src/server/globals.c
@@ -32,6 +32,7 @@ atomic_int _maxClients = SERVER_MAX_CLIENTS;
atomic_int _maxImages = SERVER_MAX_IMAGES;
atomic_int _maxPayload = 9000000; // 9MB
atomic_uint_fast64_t _maxReplicationSize = (uint64_t)100000000000LL;
+atomic_bool _pretendClient = false;
/**
* True when loading config the first time. Consecutive loads will
@@ -80,6 +81,7 @@ static int ini_handler(void *custom UNUSED, const char* section, const char* key
SAVE_TO_VAR_UINT( dnbd3, clientTimeout );
SAVE_TO_VAR_UINT( limits, maxPayload );
SAVE_TO_VAR_UINT64( limits, maxReplicationSize );
+ SAVE_TO_VAR_BOOL( dnbd3, pretendClient );
if ( strcmp( section, "dnbd3" ) == 0 && strcmp( key, "backgroundReplication" ) == 0 ) {
if ( strcmp( value, "hashblock" ) == 0 ) {
_backgroundReplication = BGR_HASHBLOCK;
diff --git a/src/server/globals.h b/src/server/globals.h
index 9b10ee4..031f565 100644
--- a/src/server/globals.h
+++ b/src/server/globals.h
@@ -266,6 +266,13 @@ extern atomic_int _maxPayload;
extern atomic_uint_fast64_t _maxReplicationSize;
/**
+ * Pretend to be a client when talking to others servers,
+ * effectively not setting the server bit during connection
+ * setup. Useful for local caching.
+ */
+extern atomic_bool _pretendClient;
+
+/**
* Load the server configuration.
*/
void globals_loadConfig();
diff --git a/src/shared/protocol.h b/src/shared/protocol.h
index d87bbd8..92dbe11 100644
--- a/src/shared/protocol.h
+++ b/src/shared/protocol.h
@@ -20,7 +20,7 @@
#define COND_HOPCOUNT(vers,hopcount) ( (vers) >= 3 ? (hopcount) : 0 )
// 2017-11-02: Macro to set flags in select image message properly if we're a server, as BG_REP depends on global var
-#define SI_SERVER_FLAGS ( FLAGS8_SERVER | (_backgroundReplication == BGR_FULL ? FLAGS8_BG_REP : 0) )
+#define SI_SERVER_FLAGS ( (_pretendClient ? 0 : FLAGS8_SERVER) | (_backgroundReplication == BGR_FULL ? FLAGS8_BG_REP : 0) )
#define REPLY_OK (0)
#define REPLY_ERRNO (-1)