| Function 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;
    }
 
 
 
 |