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
* SYNOPSIS
*
* typedef SilcBool (*SilcAsyncOperationPause)(SilcAsyncOperation op,
- * SilcBool pause_operation,
- * void *context);
+ * SilcBool pause_operation,
+ * void *context);
*
* DESCRIPTION
*
*
***/
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
* SYNOPSIS
*
* SilcBool silc_async_init(SilcAsyncOperation op,
- * SilcAsyncOperationAbort abort_cb,
- * SilcAsyncOperationPause pause_cb,
- * void *context);
+ * SilcAsyncOperationAbort abort_cb,
+ * SilcAsyncOperationPause pause_cb,
+ * void *context);
*
* DESCRIPTION
*
* 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
*
***/
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
*