X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcasync.h;h=6e7469839e8ea06dfd953ee43fd89831295fdbf4;hb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;hp=650419a836646fac93a9cbf448817373a390ae2c;hpb=c27a4ecc3e616e8a5ee09b8ca888ed6ff3e501f7;p=silc.git diff --git a/lib/silcutil/silcasync.h b/lib/silcutil/silcasync.h index 650419a8..6e746983 100644 --- a/lib/silcutil/silcasync.h +++ b/lib/silcutil/silcasync.h @@ -4,7 +4,7 @@ Author: Pekka Riikonen - 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 @@ -35,6 +35,32 @@ * 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 *