/* * Copyright (c) Likewise Software. All rights Reserved. * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the license, or (at * your option) any later version. * * This library 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 Lesser * General Public License for more details. You should have received a copy * of the GNU Lesser General Public License along with this program. If * not, see . * * LIKEWISE SOFTWARE MAKES THIS SOFTWARE AVAILABLE UNDER OTHER LICENSING * TERMS AS WELL. IF YOU HAVE ENTERED INTO A SEPARATE LICENSE AGREEMENT * WITH LIKEWISE SOFTWARE, THEN YOU MAY ELECT TO USE THE SOFTWARE UNDER THE * TERMS OF THAT SOFTWARE LICENSE AGREEMENT INSTEAD OF THE TERMS OF THE GNU * LESSER GENERAL PUBLIC LICENSE, NOTWITHSTANDING THE ABOVE NOTICE. IF YOU * HAVE QUESTIONS, OR WISH TO REQUEST A COPY OF THE ALTERNATE LICENSING * TERMS OFFERED BY LIKEWISE SOFTWARE, PLEASE CONTACT LIKEWISE SOFTWARE AT * license@likewisesoftware.com */ /* * Module Name: * * call-private.h * * Abstract: * * Call handle interface (private) * * Authors: Brian Koropoff (bkoropoff@likewisesoftware.com) * */ #ifndef __LWMSG_CALL_PRIVATE_H__ #define __LWMSG_CALL_PRIVATE_H__ #include #include /** * @file call-private.h * @brief Call API (INTERNAL) */ /** * @internal * @defgroup call_private Call handles * @ingroup private * @brief Call handle implementation */ /*@{*/ /** * @brief Call handle vtable * * Virtual function table for #LWMsgCall structures. * */ typedef struct LWMsgCallClass { /** * @brief Release call handle (virtual) * * Implements the exact semantics of #lwmsg_call_release(). * * This function may be NULL for call handles only intended * for use by callees. */ void (*release)( LWMsgCall* call ); /** * @brief Dispatch call (virtual) * * Implements the exact semantics of #lwmsg_call_dispatch(). * * This function may be NULL for call handles only intended * for use by callees. */ LWMsgStatus (*dispatch)( LWMsgCall* call, const LWMsgParams* in, LWMsgParams* out, LWMsgCompleteFunction complete, void* data ); /** * @brief Mark call as pending (virtual) * * Implements the exact semantics of #lwmsg_call_pend(). * * This function may be NULL for call handles only intended * for use by callers. */ LWMsgStatus (*pend)( LWMsgCall* call, LWMsgCancelFunction cancel, void* data ); /** * @brief Mark call as complete (virtual) * * Implements the exact semantics of #lwmsg_call_complete(). * * This function may be NULL for call handles only intended * for use by callers. */ LWMsgStatus (*complete)( LWMsgCall* call, LWMsgStatus status ); /** * @brief Cancel call (virtual) * * Implements the exact semantics of #lwmsg_call_cancel(). * * This function may be NULL for call handles only intended * for use by callees. */ LWMsgStatus (*cancel)( LWMsgCall* call ); /** * @brief Destroy call parameters (virtual) * * Implements the exact semantics of #lwmsg_call_destroy_params(). * * This function may be NULL for call handles only intended * for use by callees. */ LWMsgStatus (*destroy_params)( LWMsgCall* call, LWMsgParams* params ); /** * @brief Get session for call (virtual) * * Implements the exact semantics of #lwmsg_call_get_session(). * * This function must be present for all call handles */ LWMsgSession* (*get_session)( LWMsgCall* call ); /** * @brief Get callback handle (virtual) * * Implements the exact semantics of #lwmsg_call_acquire_callback(). * * This function may be NULL for call handles only inteded for * user by callers. */ LWMsgStatus (*acquire_callback)( LWMsgCall* call, LWMsgCall** callback ); } LWMsgCallClass; /** * @brief Call handle representation * * The internal representation of a call handle. To implement * a new type of call handle, create a call handle structure with * a #LWMsgCall as the first member and fill in its vtbl field. */ struct LWMsgCall { /** * @brief Virtual function table pointer * * A pointer to the virtual function table that implements * the call handle operations */ LWMsgCallClass* vtbl; }; /** * @brief Cast to call handle * * Convenience macro to cast to #LWMsgCall * */ #define LWMSG_CALL(obj) ((LWMsgCall*) (obj)) /*@}*/ #endif