All pastes #22397 Raw Edit

IAX

public cpp v1 · immutable
#22397 ·published 2005-09-08 18:33 UTC
rendered paste body
/* * iaxclient: a cross-platform IAX softphone library * * Copyrights: * Copyright (C) 2003 HorizonLive.com, (c) 2004, Horizon Wimba, Inc. * * Contributors: * Steve Kann <stevek@stevek.com> * * This program is free software, distributed under the terms of * the GNU Lesser (Library) General Public License */#ifndef _iaxclient_h#define _iaxclient_h#ifdef __cplusplusextern "C" {#endif/* This is the include file which declared all external API functions to * IAXCLIENT.  It should include all functions and declarations needed * by IAXCLIENT library users, but not include internal structures, or * require the inclusion of library internals (or sub-libraries) */#include <stdio.h>#ifdef WIN32#include <windows.h>#include <winsock.h>#else#include <sys/socket.h>#endif#ifdef BUILDING_DLL# ifdef WIN32#  define EXPORT  __stdcall __declspec(dllexport)# else#  define EXPORT# endif#else# define EXPORT#endif#ifdef WIN32#if defined(_MSC_VER)	typedef int (__stdcall *iaxc_sendto_t)(SOCKET, const char *, int, int, const struct sockaddr *, int);	typedef int (__stdcall *iaxc_recvfrom_t)(SOCKET, char *, int, int, struct sockaddr *, int *);#else	typedef int PASCAL (*iaxc_sendto_t)(SOCKET, const char *, int, int, const struct sockaddr *, int);	typedef int PASCAL (*iaxc_recvfrom_t)(SOCKET, char *buf, int len, int flags, struct sockaddr *from, int *fromlen);#endif#else	typedef int (*iaxc_sendto_t)(int, const void *, size_t, int, const struct sockaddr *, socklen_t);	typedef int (*iaxc_recvfrom_t)(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);#endif/* Define audio type constants */#define AUDIO_INTERNAL 0#define AUDIO_INTERNAL_PA 1#define AUDIO_INTERNAL_FILE 2#define AUDIO_EXTERNAL 99/* payload formats : WARNING: must match libiax values!!! *//* Data formats for capabilities and frames alike */#define IAXC_FORMAT_G723_1       (1 << 0)        /* G.723.1 compression */#define IAXC_FORMAT_GSM          (1 << 1)        /* GSM compression */#define IAXC_FORMAT_ULAW         (1 << 2)        /* Raw mu-law data (G.711) */#define IAXC_FORMAT_ALAW         (1 << 3)        /* Raw A-law data (G.711) */#define IAXC_FORMAT_G726         (1 << 4)        /* ADPCM, 32kbps  */#define IAXC_FORMAT_ADPCM        (1 << 5)        /* ADPCM IMA */#define IAXC_FORMAT_SLINEAR      (1 << 6)        /* Raw 16-bit Signed Linear (8000 Hz) PCM */#define IAXC_FORMAT_LPC10        (1 << 7)        /* LPC10, 180 samples/frame */#define IAXC_FORMAT_G729A        (1 << 8)        /* G.729a Audio */#define IAXC_FORMAT_SPEEX        (1 << 9)        /* Speex Audio */#define IAXC_FORMAT_ILBC         (1 << 10)       /* iLBC Audio */#define IAXC_FORMAT_MAX_AUDIO 	 (1 << 15)  /* Maximum audio format */#define IAXC_FORMAT_JPEG         (1 << 16)       /* JPEG Images */#define IAXC_FORMAT_PNG          (1 << 17)       /* PNG Images */#define IAXC_FORMAT_H261         (1 << 18)       /* H.261 Video */#define IAXC_FORMAT_H263         (1 << 19)       /* H.263 Video */#define IAXC_FORMAT_H263_PLUS    (1 << 20)       /* H.263+ Video */#define IAXC_FORMAT_MPEG4    	 (1 << 21)       /* MPEG4 Video */#define IAXC_FORMAT_H264    	 (1 << 23)       /* H264 Video */#define IAXC_FORMAT_THEORA    	 (1 << 24)       /* Theora Video */#define IAXC_EVENT_TEXT			1#define IAXC_EVENT_LEVELS		2#define IAXC_EVENT_STATE		3#define IAXC_EVENT_NETSTAT		4#define IAXC_EVENT_URL			5	/* URL push via IAX(2) */#define IAXC_EVENT_VIDEO		6	/* video data (pointer) */#define IAXC_EVENT_REGISTRATION 	7#define IAXC_CALL_STATE_FREE 		0#define IAXC_CALL_STATE_ACTIVE		(1<<1)#define IAXC_CALL_STATE_OUTGOING 	(1<<2)#define IAXC_CALL_STATE_RINGING 	(1<<3)#define IAXC_CALL_STATE_COMPLETE 	(1<<4)#define IAXC_CALL_STATE_SELECTED 	(1<<5)#define IAXC_CALL_STATE_BUSY		(1<<6)#define IAXC_CALL_STATE_TRANSFER	(1<<7)#define IAXC_TEXT_TYPE_STATUS		1#define IAXC_TEXT_TYPE_NOTICE		2#define IAXC_TEXT_TYPE_ERROR		3/* FATAL ERROR: User Agent should probably display error, then die. */#define IAXC_TEXT_TYPE_FATALERROR	4#define IAXC_TEXT_TYPE_IAX		5/* registration replys, corresponding to IAX_EVENTs*/#define IAXC_REGISTRATION_REPLY_ACK     18   /* IAX_EVENT_REGACC  */#define IAXC_REGISTRATION_REPLY_REJ     30   /* IAX_EVENT_REGREJ  */#define IAXC_REGISTRATION_REPLY_TIMEOUT 6    /* IAX_EVENT_TIMEOUT */#define IAXC_URL_URL				1	/* URL received */#define IAXC_URL_LDCOMPLETE	2	/* URL loading complete */#define IAXC_URL_LINKURL		3	/* URL link request */#define IAXC_URL_LINKREJECT	4	/* URL link reject */#define IAXC_URL_UNLINK			5	/* URL unlink */ #define IAXC_EVENT_BUFSIZ	256struct iaxc_ev_levels {	float input;	float output;};struct iaxc_ev_text {	int type;	int callNo; /* call number for IAX text */	char message[IAXC_EVENT_BUFSIZ];};struct iaxc_ev_call_state {	int callNo;	int state;	int format;	char remote[IAXC_EVENT_BUFSIZ];	char remote_name[IAXC_EVENT_BUFSIZ];	char local[IAXC_EVENT_BUFSIZ];	char local_context[IAXC_EVENT_BUFSIZ];};struct iaxc_netstat {        int jitter;        int losspct;        int losscnt;        int packets;        int delay;        int dropped;        int ooo;};struct iaxc_ev_netstats {	int callNo;	int rtt;	struct iaxc_netstat local;	struct iaxc_netstat remote;};struct iaxc_ev_url {	int callNo;	int type;	char url[IAXC_EVENT_BUFSIZ];};struct iaxc_ev_video {	int callNo;	int format;	int width;	int height;	unsigned char *data;};struct iaxc_ev_registration {    int id;    int reply;    int msgcount;};typedef struct iaxc_event_struct {	struct iaxc_event_struct *next;	int type;	union {		struct iaxc_ev_levels 		levels;		struct iaxc_ev_text 		text;		struct iaxc_ev_call_state 	call;		struct iaxc_ev_netstats 	netstats;		struct iaxc_ev_url          url;		struct iaxc_ev_video		video;		struct iaxc_ev_registration reg;	} ev;} iaxc_event;typedef int (*iaxc_event_callback_t)(iaxc_event e);EXPORT void iaxc_set_event_callback(iaxc_event_callback_t func);/* Sets iaxclient to post a pointer to a copy of event using o/s specific Post method */EXPORT int iaxc_set_event_callpost(void *handle, int id);/* frees event delivered via o/s specific Post method */EXPORT void iaxc_free_event(iaxc_event *e); /* Event Accessors */EXPORT struct iaxc_ev_levels *iaxc_get_event_levels(iaxc_event *e);EXPORT struct iaxc_ev_text *iaxc_get_event_text(iaxc_event *e);EXPORT struct iaxc_ev_call_state *iaxc_get_event_state(iaxc_event *e);EXPORT int iaxc_initialize(int audType, int nCalls);EXPORT void iaxc_shutdown();EXPORT void iaxc_set_formats(int preferred, int allowed);EXPORT void iaxc_set_min_outgoing_framesize(int samples);EXPORT void iaxc_set_callerid(char *name, char *number);EXPORT void iaxc_process_calls();EXPORT int iaxc_service_audio();EXPORT int iaxc_start_processing_thread();EXPORT int iaxc_stop_processing_thread();EXPORT void iaxc_call(char *num);EXPORT int iaxc_unregister( int id );EXPORT int iaxc_register(char *user, char *pass, char *host);EXPORT void iaxc_answer_call(int callNo); EXPORT void iaxc_blind_transfer_call(int callNo, char *number); EXPORT void iaxc_dump_all_calls(void);EXPORT void iaxc_dump_call(void);EXPORT void iaxc_reject_call(void);EXPORT void iaxc_reject_call_number(int callNo);EXPORT void iaxc_send_dtmf(char digit);EXPORT void iaxc_send_text(char *text);EXPORT void iaxc_send_url(char *url, int link); /* link == 1 ? AST_HTML_LINKURL : AST_HTML_URL */EXPORT int iaxc_was_call_answered();EXPORT void iaxc_millisleep(long ms);EXPORT void iaxc_set_silence_threshold(double thr);EXPORT void iaxc_set_audio_output(int mode);EXPORT int iaxc_select_call(int callNo);EXPORT int iaxc_first_free_call();EXPORT int iaxc_selected_call();EXPORT int iaxc_quelch(int callNo, int MOH);EXPORT int iaxc_unquelch(int call);EXPORT int iaxc_mic_boost_get( void ) ;EXPORT int iaxc_mic_boost_set( int enable ) ;EXPORT char* iaxc_version(char *ver);/* application-defined networking; give substiture sendto and recvfrom functions, * must be called before iaxc_initialize! */EXPORT void iaxc_set_networking(iaxc_sendto_t st, iaxc_recvfrom_t rf) ;/* wrapper for libiax2 get_netstats */EXPORT int iaxc_get_netstats(int call, int *rtt, struct iaxc_netstat *local, struct iaxc_netstat *remote);#define IAXC_AD_INPUT           (1<<0)#define IAXC_AD_OUTPUT          (1<<1)#define IAXC_AD_RING            (1<<2)#define IAXC_AD_INPUT_DEFAULT   (1<<3)#define IAXC_AD_OUTPUT_DEFAULT  (1<<4)#define IAXC_AD_RING_DEFAULT    (1<<5)struct iaxc_audio_device {	char *name;             /* name of the device */	long capabilities;      /* flags, defined above */	int devID;              /* driver-specific ID */};/* Get audio device information: * 	**devs: a pointer to an array of device structures, as declared above.  function * 	will give you a pointer to the proper array, which will be valid as long as iaxc is * 	initialized. * * 	*nDevs: a pointer to an int, to which the count of devices in the array devs will be * 	written * * 	*input, *output, *ring: the currently selected devices for input, output, ring will * 	be written to the int pointed to by these pointers. */EXPORT int iaxc_audio_devices_get(struct iaxc_audio_device **devs, int *nDevs, int *input, int *output, int *ring); EXPORT int iaxc_audio_devices_set(int input, int output, int ring);EXPORT double iaxc_input_level_get();EXPORT double iaxc_output_level_get();EXPORT int iaxc_input_level_set(double level);EXPORT int iaxc_output_level_set(double level);struct iaxc_sound {	short 	*data;          /* sound data */	long 	len;            /* length of sample */	int 	malloced;	/* should the library free() the data after it is played? */	int	channel;	/* 0 for outputSelected, 1 for ringSelected */	int 	repeat;      	/* number of times to repeat (-1 = infinite) */	long	pos;		/* internal use: current play position */	int 	id;		/* internal use: sound ID */	struct iaxc_sound *next; /* internal use: next in list */};/* play a sound.  sound = an iaxc_sound structure, ring: 0: play through output device; 1: play through "ring" device */EXPORT int iaxc_play_sound(struct iaxc_sound *sound, int ring);/* stop sound with ID "id" */EXPORT int iaxc_stop_sound(int id);#define IAXC_FILTER_DENOISE 	(1<<0)#define IAXC_FILTER_AGC 	(1<<1)#define IAXC_FILTER_ECHO 	(1<<2)#define IAXC_FILTER_AAGC 	(1<<3) /* Analog (mixer-based) AGC */#define IAXC_FILTER_CN 		(1<<4) /* Send CN frames when silence detected */EXPORT int iaxc_get_filters(void);EXPORT void iaxc_set_filters(int filters);EXPORT int iaxc_set_files(FILE *input, FILE *output);/* speex specific codec settings *//* a good choice is (1,-1,-1,0,8000,3): 8kbps ABR *//* Decode options:	* decode_enhance: 1/0  perceptual enhancement for decoder 	* quality: Generally, set either quality (0-9) or bitrate.  	*    -1 for "default"	* bitrate: in kbps.  Applies to CBR only; -1 for default.  	*    (overrides "quality" for CBR mode)	* vbr: Variable bitrate mode:  0/1	* abr mode/rate:  0 for not ABR, bitrate for ABR mode	* complexity:  algorithmic complexity.  Think -N for gzip.	*    Higher numbers take more CPU for better quality.  3 is	*    default and good choice.*/EXPORT void iaxc_set_speex_settings(int decode_enhance, float quality, int bitrate, int vbr, int abr, int complexity);/* set/get video mode */#define IAXC_VIDEO_MODE_NONE 			0  /* don't send video at all */#define IAXC_VIDEO_MODE_ACTIVE 			1  /* send video */#define IAXC_VIDEO_MODE_PREVIEW_RAW 		2  /* send video, and show raw preview */#define IAXC_VIDEO_MODE_PREVIEW_ENCODED  	3  /* send video, and show encoded preview */EXPORT int iaxc_video_mode_set(int mode);EXPORT int iaxc_video_mode_get();/* set allowed/preferred video encodings */EXPORT void iaxc_video_format_set(int preferred, int allowed, int framerate, int bitrate, int width, int height);#ifdef __cplusplus}#endif#endif