From 21808116e6a8c87e100f0f382bf8d22d61aa75e8 Mon Sep 17 00:00:00 2001 From: Sree Harsha Totakura Date: Thu, 26 Apr 2012 16:13:45 +0000 Subject: -modified lockmanager and added protocol messages --- src/include/gnunet_lockmanager_service.h | 95 ++++++++++++++++++++------------ 1 file changed, 60 insertions(+), 35 deletions(-) (limited to 'src/include/gnunet_lockmanager_service.h') diff --git a/src/include/gnunet_lockmanager_service.h b/src/include/gnunet_lockmanager_service.h index f2952a742..6f63fd529 100644 --- a/src/include/gnunet_lockmanager_service.h +++ b/src/include/gnunet_lockmanager_service.h @@ -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__" 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 -- cgit v1.2.3