lazarus-ccr/components/beepfp/vortex/vortex_pull.pas

332 lines
15 KiB
ObjectPascal

unit vortex_pull;
(*
* LibVortex: C Header file to Free Pascal translation.
* Copyright (C) 2009, Wimpie Nortje <wimpienortje@gmail.com>
*)
(*
* 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.