plane hacking
[oweals/gnunet.git] / src / fs / fs.h
index 8478f484559f8422702510705ba872021d98eaf0..edbde19daf131a4aa7a97095d36aac5577228d05 100644 (file)
@@ -31,6 +31,7 @@
 #include "gnunet_datastore_service.h"
 #include "gnunet_fs_service.h"
 #include "gnunet_block_lib.h"
+#include "block_fs.h"
 
 /**
  * Maximum size of the datastore queue for P2P operations.
@@ -1832,16 +1833,78 @@ struct GNUNET_FS_DownloadContext
    */
   int has_finished;
 
+  /**
+   * Have we tried (and failed) to find matching full
+   * data from the meta data yet?
+   */
+  int tried_full_data;
+};
+
+
+/**
+ * Information about an (updateable) node in the
+ * namespace.
+ */
+struct NamespaceUpdateNode
+{
+  /**
+   * Identifier for this node.
+   */
+  char *id;
+
+  /**
+   * Identifier of children of this node.
+   */
+  char *update;
+
+  /**
+   * Metadata for this entry.
+   */
+  struct GNUNET_CONTAINER_MetaData *md;
+
+  /**
+   * URI of this entry in the namespace.
+   */
+  struct GNUNET_FS_Uri *uri;
+
+  /**
+   * Namespace update generation ID.  Used to ensure
+   * freshness of the scc_id.
+   */
+  unsigned int nug;
+  
+  /**
+   * SCC this entry belongs to (if nug is current).
+   */
+  unsigned int scc_id;
+
 };
 
+
 struct GNUNET_FS_Namespace
 {
 
+  /**
+   * Handle to the FS service context.
+   */
+  struct GNUNET_FS_Handle *h;
+  
+  /**
+   * Array with information about nodes in the namespace.
+   */
+  struct NamespaceUpdateNode **update_nodes;
+
   /**
    * Private key for the namespace.
    */
   struct GNUNET_CRYPTO_RsaPrivateKey *key;
 
+  /**
+   * Hash map mapping identifiers of update nodes
+   * to the update nodes (initialized on-demand).
+   */
+  struct GNUNET_CONTAINER_MultiHashMap *update_map;
+
   /**
    * Name of the file with the private key.
    */
@@ -1852,10 +1915,20 @@ struct GNUNET_FS_Namespace
    */ 
   char *name;
 
+  /**
+   * Size of the update nodes array.
+   */
+  unsigned int update_node_count;
+
   /**
    * Reference counter.
    */
   unsigned int rc;
+
+  /**
+   * Generator for unique nug numbers.
+   */
+  unsigned int nug_gen;
 };
 
 
@@ -2149,6 +2222,32 @@ struct PutMessage
 };
 
 
+/**
+ * Message send by a peer that wants to be excluded
+ * from migration for a while.
+ */
+struct MigrationStopMessage
+{
+  /**
+   * Message type will be 
+   * GNUNET_MESSAGE_TYPE_FS_MIGRATION_STOP.
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Always zero.
+   */
+  uint32_t reserved GNUNET_PACKED;
+
+  /**
+   * How long should the block last?
+   */
+  struct GNUNET_TIME_RelativeNBO duration;
+
+};
+
+
+
 #endif
 
 /* end of fs.h */