-modified lockmanager and added protocol messages
authorSree Harsha Totakura <totakura@in.tum.de>
Thu, 26 Apr 2012 16:13:45 +0000 (16:13 +0000)
committerSree Harsha Totakura <totakura@in.tum.de>
Thu, 26 Apr 2012 16:13:45 +0000 (16:13 +0000)
src/include/gnunet_lockmanager_service.h
src/include/gnunet_protocols.h

index f2952a7420ad1102ed0d9bda9f12be9c6b8dd978..6f63fd529f15cb00493529053cebd247619089a1 100644 (file)
@@ -46,15 +46,10 @@ struct GNUNET_LOCKMANAGER_Handle;
  *
  * @param cfg the configuration to use
  *
- * @param domain_name the name of the locking domain. If the locking domain
- *          isn't existing in the service it will be created. Clients who want
- *          to share locks must use the same name for the locking domain
- *
  * @return upon success the handle to the service; NULL upon error
  */
 struct GNUNET_LOCKMANAGER_Handle *
-GNUNET_LOCKMANAGER_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                            const char *domain_name);
+GNUNET_LOCKMANAGER_connect (const struct GNUNET_CONFIGURATION_Handle *cfg);
 
 
 /**
@@ -67,15 +62,42 @@ GNUNET_LOCKMANAGER_disconnect (struct GNUNET_LOCKMANAGER_Handle *handle);
 
 
 /**
- * This callback will be called after a locking operation has been
- * attempted. This callback will not be called when the LockingRequest has been
- * cancelled.
+ * Enumeration for status
+ */
+enum GNUNET_LOCKMANAGER_Status
+  {
+    /**
+     * Signifies a successful operation
+     */
+    GNUNET_LOCKMANAGER_SUCCESS = 1,
+
+    /**
+     * Used to signal that a lock is no longer valid. It must then be released
+     */
+    GNUNET_LOCKMANAGER_RELEASE
+  };
+
+
+/**
+ * This callback will be called when a lock has been successfully acquired or
+ * when an acquired lock has been lost (happens when the lockmanager service
+ * crashes/restarts).
  *
  * @param cls the closure from GNUNET_LOCKMANAGER_lock call
- * @param lock the lock for which has been locked successfully
+ *
+ * @param domain_name the locking domain of the lock 
+ *
+ * @param lock the lock for which this status is relevant
+ *
+ * @param status GNUNET_LOCKMANAGER_SUCCESS if the lock has been successfully
+ *          acquired; GNUNET_LOCKMANAGER_RELEASE when the acquired lock is lost
  */
-typedef void (*GNUNET_LOCKMANAGER_CompletionCallback) (void *cls,
-                                                       unsigned int lock);
+typedef void 
+(*GNUNET_LOCKMANAGER_StatusCallback) (void *cls,
+                                      const char *domain_name,
+                                      uint32_t lock,
+                                      enum GNUNET_LOCKMANAGER_Status 
+                                      status);
 
 
 /**
@@ -85,28 +107,43 @@ struct GNUNET_LOCKMANAGER_LockingRequest;
 
 
 /**
- * Tries to lock the given lock
+ * Tries to acquire the given lock(even if the lock has been lost) until the
+ * request is called. If the lock is available the status_cb will be
+ * called. If the lock is busy then the request is queued and status_cb
+ * will be called when the lock has been made available and acquired by us.
  *
  * @param handle the handle to the lockmanager service
+ *
+ * @param domain_name name of the locking domain. Clients who want to share
+ *          locks must use the same name for the locking domain. Also the
+ *          domain_name should be selected with the prefix
+ *          "GNUNET_<PROGRAM_NAME>_" to avoid domain name collisions.
+ *
+ *
  * @param lock which lock to lock
- * @param completion_cb the callback to be called when locking is successful
- * @param completion_cb_cls the closure to the above callback
+ *
+ * @param status_cb the callback for signalling when the lock is acquired and
+ *          when it is lost
+ *
+ * @param status_cb_cls the closure to the above callback
  *
  * @return the locking request handle for this request. It will be invalidated
- *           when completion_cb is called.
+ *           when status_cb is called.
  */
 struct GNUNET_LOCKMANAGER_LockingRequest *
-GNUNET_LOCKMANAGER_try_lock (struct GNUNET_LOCKMANAGER_Handle *handle,
-                             unsigned int lock,
-                             GNUNET_LOCKMANAGER_CompletionCallback
-                             completion_cb,
-                             void *completion_cb_cls);
+GNUNET_LOCKMANAGER_acquire_lock (struct GNUNET_LOCKMANAGER_Handle *handle,
+                                 const char *domain_name,
+                                 uint32_t lock,
+                                 GNUNET_LOCKMANAGER_StatusCallback
+                                 status_cb,
+                                 void *status_cb_cls);
 
 
 /**
  * Function to cancel the locking request generated by
- * GNUNET_LOCKMANAGER_try_lock. This should be used on a LockingRequest before
- * the completion_cb for the associated lock is called.
+ * GNUNET_LOCKMANAGER_acquire_lock. If the lock is acquired us then the lock is
+ * released. GNUNET_LOCKMANAGER_StatusCallback will not be called upon any
+ * status changes resulting due to this call.
  *
  * @param request the LockingRequest to cancel
  */
@@ -115,18 +152,6 @@ GNUNET_LOCKMANAGER_cancel_request (struct GNUNET_LOCKMANAGER_LockingRequest
                                    *request);
 
 
-/**
- * Unlocks a lock which was locked by us. It does nothing when called on a lock
- * which wasn't locked or was locked by someone else.
- *
- * @param handle the handle to the lockmanager service
- * @param lock which lock to unlock
- */
-void
-GNUNET_LOCKMANAGER_unlock (const struct GNUNET_LOCKMANAGER_Handle *handle,
-                           unsigned int lock);
-
-
 #if 0                           /* keep Emacsens' auto-indent happy */
 {
 #endif
index e3f242ff21bb5e050703b474a7e932fa8c684d95..db6b36d5a887dda719f585aa022dee8817441d28 100644 (file)
@@ -1276,8 +1276,27 @@ extern "C"
  */
 #define GNUNET_MESSAGE_TYPE_NAMESTORE_START 430
 
+/*******************************************************************************
+ * LOCKMANAGER message types
+ ******************************************************************************/
+
+/**
+ * Message to acquire Lock
+ */
+#define GNUNET_MESSAGE_TYPE_LOCKMANAGER_ACQUIRE 440
+
+/**
+ * Message to release lock
+ */
+#define GNUNET_MESSAGE_TYPE_LOCKMANAGER_RELEASE 441
+
+/**
+ * SUCESS reply from lockmanager
+ */
+#define GNUNET_MESSAGE_TYPE_LOCKMANAGER_SUCCESS 442
+
 /**
- *  Next available: 440
+ *  Next available: 450
  */
 
 /*******************************************************************************