unit vortex_pull; (* * LibVortex: C Header file to Free Pascal translation. * Copyright (C) 2009, Wimpie Nortje *) (* * LibVortex: A BEEP (RFC3080/RFC3081) implementation. * Copyright (C) 2008 Advanced Software Production Line, S.L. * * This program 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 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 * 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, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA * * You may find a copy of the license under this software is released * at COPYING file. This is LGPL software: you are welcome to develop * proprietary applications using this library without any royalty or * fee but returning back any change, improvement or addition in the * form of source code, project image, documentation patches, etc. * * For commercial support on build BEEP enabled solutions contact us: * * Postal address: * Advanced Software Production Line, S.L. * C/ Antonio Suarez Nº 10, * Edificio Alius A, Despacho 102 * Alcalá de Henares 28802 (Madrid) * Spain * * Email address: * info@aspl.es - http://www.aspl.es/vortex *) interface uses vortex, axl; const {$IFDEF FPC} External_library='vortex-1.1'; {$ELSE} External_library='libvortex-1.1'; {$ENDIF} {$IFDEF FPC} {$PACKRECORDS C} {$ENDIF} (** * \addtogroup vortex_pull * @{ *) (** * @brief Type representation for an event notification from the PULL * API. * * An event has a type that can be check by using \ref * vortex_event_get_type. According to the type, the event has some * data associated which is meaningful to the event. * * See \ref VortexEventType for events available and data associated * to them. *) type PVortexEvent = Pointer; (** * @brief List of events that can happen/pulled from the vortex pull * API. This list not only describes the event but also provides a * reference of all references that are associated to a particular * event. * * For example, the \ref VORTEX_EVENT_FRAME_RECEIVED signals that a * frame has arrive and a call to \ref vortex_event_get_frame will * return a reference to the frame. Not all events has all references * defined. * * There are a list of references that is always defined. They are assumed implicitly: * - \ref vortex_event_get_ctx : the context where the event was received. * - \ref vortex_event_get_conn : the connection where the event happend. *) type TVortexEventType = ( (** * @brief Undefined event. This type is used to report errors * found while using pull API. *) VORTEX_EVENT_UNKNOWN := 0, (** * @brief Even type that represents a frame received. You must * call to vortex_pull_get_frame to get the reference to the * frame received. * * This event has the following especific references defined: * - \ref vortex_event_get_frame : frame received due to this event. * - \ref vortex_event_get_channel : the channel where the frame was received. *) VORTEX_EVENT_FRAME_RECEIVED := 1 shl 0, (** * @brief This event signals that a channel close request has * been received. The peer must respond to the close request * as soon as possible since the block channel 0 for futher * operations. * * This event has the following especific references defined: * - \ref vortex_event_get_channel : the channel that is requested to be closed. * - \ref vortex_event_get_msgno : the msgno value that identifies the close request received. * * With these values, the close request must be replied by * using the function \ref vortex_channel_notify_close. *) VORTEX_EVENT_CHANNEL_CLOSE := 1 shl 1, (** * @brief Event used to signal that a channel has been added * to a connection. This happens when a channel is created. * * This event has the following especific references defined: * - \ref vortex_event_get_channel : the channel that was added. *) VORTEX_EVENT_CHANNEL_ADDED := 1 shl 2, (** * @brief Event used to signal that a channel has been removed * to a connection. This happens when a channel is closed * * This event has the following especific references defined: * - \ref vortex_event_get_channel : the channel that was added. *) VORTEX_EVENT_CHANNEL_REMOVED := 1 shl 3, (** * @brief Event notification that a particular connection has * been closed. This event is also useful to detect connection * broken. * * This event has no especific references. It only has \ref * vortex_event_get_conn defined. *) VORTEX_EVENT_CONNECTION_CLOSED := 1 shl 4, (** * @brief Event notificaiton that a new incoming connection * has been accepted due to a listener started (\ref * vortex_listener_new or similar). *) VORTEX_EVENT_CONNECTION_ACCEPTED := 1 shl 5, (** * @brief Event notification to signal that a channel start * request has been received. * * This event has the following espefic references defined: * * - \ref vortex_event_get_server_name (the serverName channel * start value). * * - \ref vortex_event_get_profile_content (the profile * content found in the channel start request). * * - \ref vortex_event_get_encoding (the profile encoding * found in the channel start request). * * With these values the channel start request must be replied * by accepting or denying the channel by using \ref * vortex_channel_notify_start. *) VORTEX_EVENT_CHANNEL_START := 1 shl 6 ); (** * @brief A type definition that allows to define a set of events that * are ignored on a particular context. The event mask (\ref * VortexEventMask) can configured on several context (\ref VortexCtx) * where PULL API is enabled. * * A \ref VortexEventMask has a string identifier defined by the user * (it is not required) and has an activation state that allows to * block the mask during a desired period. * * A \ref VortexEventMask is created by using \ref * vortex_event_mask_new. The following functions are used to add, * remove and check events ignored by the mask: * * - \ref vortex_event_mask_add * - \ref vortex_event_mask_remove * - \ref vortex_event_mask_is_set * * Once configured mask is associated to a context (\ref VortexCtx) to * block events by using: \ref vortex_pull_set_event_mask * * Even having the mask installed, you can disable it temporally by * using \ref vortex_event_mask_enable. *) type PVortexEventMask = Pointer; //axl_bool vortex_pull_init (VortexCtx * ctx); function vortex_pull_init (ctx:PVortexCtx):Taxl_bool; cdecl;external External_library name 'vortex_pull_init'; //void vortex_pull_cleanup (VortexCtx * ctx); procedure vortex_pull_cleanup (ctx:PVortexCtx); cdecl;external External_library name 'vortex_pull_cleanup'; //axl_bool vortex_pull_pending_events (VortexCtx * ctx); function vortex_pull_pending_events (ctx:PVortexCtx):Taxl_bool; cdecl;external External_library name 'vortex_pull_pending_events'; //int vortex_pull_pending_events_num (VortexCtx * ctx); function vortex_pull_pending_events_num (ctx:PVortexCtx):longint; cdecl;external External_library name 'vortex_pull_pending_events_num'; //VortexEvent * vortex_pull_next_event (VortexCtx * ctx, // int milliseconds_to_wait); function vortex_pull_next_event (ctx:PVortexCtx; milliseconds_to_wait:longint):PVortexEvent; cdecl;external External_library name 'vortex_pull_next_event'; //axl_bool vortex_event_ref (VortexEvent * event); function vortex_event_ref (event:PVortexEvent):Taxl_bool; cdecl;external External_library name 'vortex_event_ref'; //void vortex_event_unref (VortexEvent * event); procedure vortex_event_unref (event:PVortexEvent); cdecl;external External_library name 'vortex_event_unref'; //VortexEventType vortex_event_get_type (VortexEvent * event); function vortex_event_get_type (event:PVortexEvent):TVortexEventType; cdecl;external External_library name 'vortex_event_get_type'; //VortexCtx * vortex_event_get_ctx (VortexEvent * event); function vortex_event_get_ctx (event:PVortexEvent):PVortexCtx; cdecl;external External_library name 'vortex_event_get_ctx'; //VortexConnection * vortex_event_get_conn (VortexEvent * event); function vortex_event_get_conn (event:PVortexEvent):PVortexConnection; cdecl;external External_library name 'vortex_event_get_conn'; //VortexChannel * vortex_event_get_channel (VortexEvent * event); function vortex_event_get_channel (event:PVortexEvent):PVortexChannel; cdecl;external External_library name 'vortex_event_get_channel'; //VortexFrame * vortex_event_get_frame (VortexEvent * event); function vortex_event_get_frame (event:PVortexEvent):PVortexFrame; cdecl;external External_library name 'vortex_event_get_frame'; //int vortex_event_get_msgno (VortexEvent * event); function vortex_event_get_msgno (event:PVortexEvent):longint; cdecl;external External_library name 'vortex_event_get_msgno'; //const char * vortex_event_get_server_name (VortexEvent * event); function vortex_event_get_server_name (event:PVortexEvent):Pchar; cdecl;external External_library name 'vortex_event_get_server_name'; //const char * vortex_event_get_profile_content (VortexEvent * event); function vortex_event_get_profile_content (event:PVortexEvent):Pchar; cdecl;external External_library name 'vortex_event_get_profile_content'; //VortexEncoding vortex_event_get_encoding (VortexEvent * event); function vortex_event_get_encoding (event:PVortexEvent):TVortexEncoding; cdecl;external External_library name 'vortex_event_get_encoding'; //VortexEventMask * vortex_event_mask_new (const char * identifier, // int initial_mask, // axl_bool initial_state); function vortex_event_mask_new (const identifier:Pchar; initial_mask:longint; initial_state:Taxl_bool):PVortexEventMask; cdecl;external External_library name 'vortex_event_mask_new'; //void vortex_event_mask_add (VortexEventMask * mask, // int events); procedure vortex_event_mask_add (mask:PVortexEventMask; events:longint); cdecl;external External_library name 'vortex_event_mask_add'; //void vortex_event_mask_remove (VortexEventMask * mask, // int events); procedure vortex_event_mask_remove (mask:PVortexEventMask; events:longint); cdecl;external External_library name 'vortex_event_mask_remove'; //axl_bool vortex_event_mask_is_set (VortexEventMask * mask, // VortexEventType event); function vortex_event_mask_is_set (mask:PVortexEventMask; event:TVortexEventType):Taxl_bool; cdecl;external External_library name 'vortex_event_mask_is_set'; //void vortex_event_mask_enable (VortexEventMask * mask, // axl_bool enable); procedure vortex_event_mask_enable (mask:PVortexEventMask; enable:Taxl_bool); cdecl;external External_library name 'vortex_event_mask_enable'; //axl_bool vortex_pull_set_event_mask (VortexCtx * ctx, // VortexEventMask * mask, // axlError ** error); function vortex_pull_set_event_mask (ctx:PVortexCtx; mask:PVortexEventMask; error:PPaxlError):Taxl_bool; cdecl;external External_library name 'vortex_pull_set_event_mask'; //void vortex_event_mask_free (VortexEventMask * mask); procedure vortex_event_mask_free (mask:PVortexEventMask); cdecl;external External_library name 'vortex_event_mask_free'; (** * @} *) implementation end.