Added SILC Thread Queue API
[silc.git] / lib / silcutil / silcasync.h
index 650419a836646fac93a9cbf448817373a390ae2c..6e7469839e8ea06dfd953ee43fd89831295fdbf4 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 2005 Pekka Riikonen
+  Copyright (C) 2005 - 2007 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
  * operation, no callback function will be called back to the upper layer.
  * This must be remembered when implementing the operation layer.
  *
+ * EXAMPLE
+ *
+ * SilcAsyncOperation async_call(Callback callback, void *cb_context)
+ * {
+ *   SilcAsyncOperation op;
+ *   OpContext ctx;
+ *
+ *   // Allocate async operation so that caller can control us, like abort
+ *   op = silc_async_alloc(async_call_abort, NULL, ctx);
+ *   ctx->callback = callback;
+ *
+ *   ...
+ *
+ *   // Return async operation for upper layer
+ *   return op;
+ * }
+ *
+ * // This callback is called when silc_async_abort is called by upper layer.
+ * // The callback given to async_call must not be called after this.
+ * void async_call_abort(SilcAsyncOperation op, void *context)
+ * {
+ *   OpContext ctx = context;
+ *   ctx->aborted = TRUE;
+ *   ctx->callback = NULL;
+ * }
+ *
  ***/
 
 #ifndef SILCASYNC_H
@@ -101,8 +127,8 @@ typedef void (*SilcAsyncOperationAbort)(SilcAsyncOperation op,
  * SYNOPSIS
  *
  *    typedef SilcBool (*SilcAsyncOperationPause)(SilcAsyncOperation op,
- *                                            SilcBool pause_operation,
- *                                            void *context);
+ *                                                SilcBool pause_operation,
+ *                                                void *context);
  *
  * DESCRIPTION
  *
@@ -117,8 +143,8 @@ typedef void (*SilcAsyncOperationAbort)(SilcAsyncOperation op,
  *
  ***/
 typedef SilcBool (*SilcAsyncOperationPause)(SilcAsyncOperation op,
-                                        SilcBool pause_operation,
-                                       void *context);
+                                           SilcBool pause_operation,
+                                           void *context);
 
 /* Upper layer functions for managing asynchronous operations.  Layer
    that has received SilcAsyncOperation context can control the async
@@ -240,9 +266,9 @@ SilcAsyncOperation silc_async_alloc(SilcAsyncOperationAbort abort_cb,
  * SYNOPSIS
  *
  *    SilcBool silc_async_init(SilcAsyncOperation op,
- *                         SilcAsyncOperationAbort abort_cb,
- *                         SilcAsyncOperationPause pause_cb,
- *                         void *context);
+ *                             SilcAsyncOperationAbort abort_cb,
+ *                             SilcAsyncOperationPause pause_cb,
+ *                             void *context);
  *
  * DESCRIPTION
  *
@@ -251,7 +277,8 @@ SilcAsyncOperation silc_async_alloc(SilcAsyncOperationAbort abort_cb,
  *    layer to abort the asynchronous operation, by calling the
  *    silc_async_abort.  Since this use pre-allocated context, the function
  *    silc_async_free need not be called.  This function is equivalent
- *    to silc_async_alloc except this does not allocate any memory.
+ *    to silc_async_alloc except this does not allocate any memory.  The `op'
+ *    needs not be uninitialized.  This returns always TRUE.
  *
  *    If the `pause_cb' is provided then the upper layer may also halt and
  *    then later resume the execution of the operation, by calling the
@@ -260,9 +287,9 @@ SilcAsyncOperation silc_async_alloc(SilcAsyncOperationAbort abort_cb,
  *
  ***/
 SilcBool silc_async_init(SilcAsyncOperation op,
-                    SilcAsyncOperationAbort abort_cb,
-                    SilcAsyncOperationPause pause_cb,
-                    void *context);
+                        SilcAsyncOperationAbort abort_cb,
+                        SilcAsyncOperationPause pause_cb,
+                        void *context);
 
 /****f* silcutil/SilcAsyncOperationAPI/silc_async_free
  *