Created SILC Crypto Toolkit git repository.
[crypto.git] / lib / silcutil / silcasync.h
diff --git a/lib/silcutil/silcasync.h b/lib/silcutil/silcasync.h
deleted file mode 100644 (file)
index 6e74698..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
-
-  silcasync.h
-
-  Author: Pekka Riikonen <priikone@silcnet.org>
-
-  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
-  the Free Software Foundation; version 2 of the License.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-*/
-
-/****h* silcutil/SILC Async Operation Interface
- *
- * DESCRIPTION
- *
- * SILC Async Operation API is an interface that can be used to control
- * asynchronous operations.  All functions that take callback as argument
- * should return SilcAsyncOperation context.  That context then can be
- * used to control, such as, abort the asynchronous operation.  Using
- * SILC Async Operation API, asynchronous functions can be controlled
- * and aborted safely.
- *
- * The SILC Async Operation API is divided in two levels; the underlaying
- * operation level that implements the asynchronous operation, and the
- * upper layer that can control the asynchronous operation.  The operation
- * layer must guarantee that if the upper layer aborts the asynchronous
- * 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
-#define SILCASYNC_H
-
-/****s* silcutil/SilcAsyncOperationAPI/SilcAsyncOperation
- *
- * NAME
- *
- *    typedef struct SilcAsyncOperationObject *SilcAsyncOperation;
- *
- * DESCRIPTION
- *
- *    The asynchronous operation context allocated by silc_async_alloc.
- *    The layer that implements the asynchronous operation allocates this
- *    context.  The layer that receives this context can use it to control
- *    the underlaying asynchronous operation.  It is also possible to use
- *    a pre-allocated context by using SilcAsyncOperationStruct instead
- *    SilcAsyncOperation.
- *
- ***/
-typedef struct SilcAsyncOperationObject *SilcAsyncOperation;
-
-/****s* silcutil/SilcAsyncOperationAPI/SilcAsyncOperationStruct
- *
- * NAME
- *
- *    typedef struct SilcAsyncOperationObject SilcAsyncOperationStruct;
- *
- * DESCRIPTION
- *
- *    The asynchronous operation context that can be used as a pre-allocated
- *    context.  This is initialized with silc_async_init.  It need not
- *    be uninitialized.  The layer that implements the asynchronous
- *    operation initializes this context.  The layer that has access to this
- *    context can use it to control the underlaying asynchronous operation.
- *
- ***/
-typedef struct SilcAsyncOperationObject SilcAsyncOperationStruct;
-
-/****f* silcutil/SilcAsyncOperationAPI/SilcAsyncOperationAbort
- *
- * SYNOPSIS
- *
- *    typedef void (*SilcAsyncOperationAbort)(SilcAsyncOperation op,
- *                                            void *context);
- *
- * DESCRIPTION
- *
- *    This callback is called when upper layer calls the silc_async_abort,
- *    and is used to actually perform the abortion of the asynchronous
- *    operation.  The silc_async_free must not be called in this function.
- *
- *    This callback type can also be provided to silc_async_abort function
- *    by the upper layer, if it wants that callback is called to the upper
- *    layer when aborting the operation.
- *
- ***/
-typedef void (*SilcAsyncOperationAbort)(SilcAsyncOperation op,
-                                       void *context);
-
-/****f* silcutil/SilcAsyncOperationAPI/SilcAsyncOperationPause
- *
- * SYNOPSIS
- *
- *    typedef SilcBool (*SilcAsyncOperationPause)(SilcAsyncOperation op,
- *                                                SilcBool pause_operation,
- *                                                void *context);
- *
- * DESCRIPTION
- *
- *    This callback is used to halt an operation, if upper layer calls the
- *    silc_async_halt function, or to resume an operation if upper layer
- *    calls the silc_async_resume, after it has earlier halted the operation.
- *    If this callback is implemented it is guaranteed that the asynchronous
- *    operation is not progressed when it is halted.  If the `pause_operation'
- *    is TRUE the operation is halted.  If it is FALSE, then the operation
- *    resumes its execution.  This function returns TRUE if the operation
- *    was (or is going to be) halted or resumed, and FALSE on error.
- *
- ***/
-typedef SilcBool (*SilcAsyncOperationPause)(SilcAsyncOperation op,
-                                           SilcBool pause_operation,
-                                           void *context);
-
-/* Upper layer functions for managing asynchronous operations.  Layer
-   that has received SilcAsyncOperation context can control the async
-   operation with these functions. */
-
-/****f* silcutil/SilcAsyncOperationAPI/silc_async_halt
- *
- * SYNOPSIS
- *
- *    SilcBool silc_async_halt(SilcAsyncOperation op);
- *
- * DESCRIPTION
- *
- *    Halt the execution of the asynchronous operation.  If the operation
- *    supports this feature, it is guaranteed that the operation is halted
- *    and its execution is not progressed until the silc_async_resume function
- *    is called.  The operation still can be aborted even if it is halted.
- *    If this function is not supported, calling this has no effect and the
- *    function returns FALSE.  This function is for the upper layer that
- *    controls the asynchronous operation.
- *
- ***/
-SilcBool silc_async_halt(SilcAsyncOperation op);
-
-/****f* silcutil/SilcAsyncOperationAPI/silc_async_resume
- *
- * SYNOPSIS
- *
- *    SilcBool silc_async_resume(SilcAsyncOperation op);
- *
- * DESCRIPTION
- *
- *    Resume the execution of the asynchronous operation.  If the halting of
- *    the operation was supported, then this function is used to resume the
- *    execution of the operation after it was halted.  If this function is
- *    not supported, calling this has no effect and the function returns
- *    FALSE.  This function is for the upper layer that controls the
- *    asynchronous operation.
- *
- ***/
-SilcBool silc_async_resume(SilcAsyncOperation op);
-
-/****f* silcutil/SilcAsyncOperationAPI/silc_async_abort
- *
- * SYNOPSIS
- *
- *    void silc_async_abort(SilcAsyncOperation op,
- *                          SilcAsyncOperationAbort abort_cb, void *context);
- *
- * DESCRIPTION
- *
- *    This function is used by upper layer that received SilcAsyncOperation
- *    context from an asynchronous function, to abort the asynchronous
- *    operation.  The `op' becomes invalid after this function returns.
- *    It is also guaranteed (assuming the use of this API is implemented
- *    correctly) that some other completion callback is not called after
- *    the operation was aborted.  However, if the caller wants to receive
- *    a callback when aborting the caller may specify the `abort_cb' and
- *    `context' which will be called after the operation is aborted, but
- *    before the `op' becomes invalid.  The `abort_cb' is called immediately
- *    inside this function.
- *
- ***/
-void silc_async_abort(SilcAsyncOperation op,
-                      SilcAsyncOperationAbort abort_cb, void *context);
-
-/* The operation layer functions.  The layer that performs the async
-   operation use these functions. */
-
-/****f* silcutil/SilcAsyncOperationAPI/silc_async_alloc
- *
- * SYNOPSIS
- *
- *    SilcAsyncOperation silc_async_alloc(SilcAsyncOperationAbort abort_cb,
- *                                        SilcAsyncOperationPause pause_cb,
- *                                        void *context);
- *
- * DESCRIPTION
- *
- *    Start asynchronous operation, and assign `abort_cb' callback for it,
- *    which can be used by some upper layer to abort the asynchronous
- *    operation, by calling the silc_async_abort.  The layer which calls
- *    this function must also call silc_async_free when the asynchronous
- *    operation is successfully completed.  If it is aborted by upper layer
- *    then silc_async_free must not be called, since it is called by the
- *    silc_async_abort function.
- *
- *    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
- *    silc_async_halt and silc_async_resume respectively.  If `pause_cb' is
- *    not provided then these functions has no effect for this operation.
- *
- * EXAMPLE
- *
- *    SilcAsyncOperation silc_async_call(Callback callback, void *cb_context)
- *    {
- *      SilcAsyncOperation op;
- *      ...
- *
- *      // Allocate async operation so that caller can control us, like abort
- *      op = silc_async_alloc(silc_async_call_abort, NULL, ctx);
- *
- *      // Start async operation in FSM
- *      silc_fsm_init(&ctx->fsm, ctx, fsm_destructor, ctx, schedule);
- *      silc_fsm_start(&ctx->fsm, first_state);
- *      ...
- *
- *      // Return async operation for upper layer
- *      return op;
- *    }
- *
- ***/
-SilcAsyncOperation silc_async_alloc(SilcAsyncOperationAbort abort_cb,
-                                   SilcAsyncOperationPause pause_cb,
-                                   void *context);
-
-/****f* silcutil/SilcAsyncOperationAPI/silc_async_init
- *
- * SYNOPSIS
- *
- *    SilcBool silc_async_init(SilcAsyncOperation op,
- *                             SilcAsyncOperationAbort abort_cb,
- *                             SilcAsyncOperationPause pause_cb,
- *                             void *context);
- *
- * DESCRIPTION
- *
- *    Initializes and starts a pre-allocated asynchronous operation context,
- *    and assigns `abort_cb' callback for it, which can be used by some upper
- *    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.  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
- *    silc_async_halt and silc_async_resume respectively.  If `pause_cb' is
- *    not provided then these functions has no effect for this operation.
- *
- ***/
-SilcBool silc_async_init(SilcAsyncOperation op,
-                        SilcAsyncOperationAbort abort_cb,
-                        SilcAsyncOperationPause pause_cb,
-                        void *context);
-
-/****f* silcutil/SilcAsyncOperationAPI/silc_async_free
- *
- * SYNOPSIS
- *
- *    void silc_async_free(SilcAsyncOperation op);
- *
- * DESCRIPTION
- *
- *    Stop the asynchronous operation.  If the asynchronous operation ended
- *    normally (ie. it was not aborted) this function must be called by the
- *    caller who called silc_async_alloc.  The `op' will become invalid after
- *    this and the upper layer must not call silc_async_abort after this
- *    function is called.  The layer that calls this, must call some other
- *    completion callback to the upper layer, so that it knows that the
- *    asynchronous operation is completed.
- *
- ***/
-void silc_async_free(SilcAsyncOperation op);
-
-/****f* silcutil/SilcAsyncOperationAPI/silc_async_get_context
- *
- * SYNOPSIS
- *
- *    void *silc_async_get_context(SilcAsyncOperation op);
- *
- * DESCRIPTION
- *
- *    Returns the context that was given to the silc_async_alloc or
- *    silc_async_init.
- *
- ***/
-void *silc_async_get_context(SilcAsyncOperation op);
-
-#include "silcasync_i.h"
-
-#endif /* SILCASYNC_H */