iaxclient.h

Go to the documentation of this file.
00001 /*
00002  * iaxclient: a cross-platform IAX softphone library
00003  *
00004  * Copyrights:
00005  * Copyright (C) 2003-2006, Horizon Wimba, Inc.
00006  * Copyright (C) 2007, Wimba, Inc.
00007  *
00008  * Contributors:
00009  * Steve Kann <stevek@stevek.com>
00010  * Frik Strecker <frik@gatherworks.com>
00011  * Mihai Balea <mihai AT hates DOT ms>
00012  * Peter Grayson <jpgrayson@gmail.com>
00013  * Bill Cholewka <bcholew@gmail.com>
00014  * Erik Bunce <kde@bunce.us>
00015  *
00016  * This program is free software, distributed under the terms of
00017  * the GNU Lesser (Library) General Public License.
00018  */
00019 #ifndef _iaxclient_h
00020 #define _iaxclient_h
00021 
00022 #ifdef __cplusplus
00023 extern "C" {
00024 #endif
00025 
00038 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00039 #ifdef _MSC_VER
00040 typedef int socklen_t;
00041 #endif
00042 #include <stdio.h>
00043 #if defined(WIN32)  ||  defined(_WIN32_WCE)
00044 #include <windows.h>
00045 #include <winsock.h>
00046 #else
00047 #include <sys/socket.h>
00048 #endif
00049 
00050 #ifdef BUILDING_DLL
00051 # if defined(WIN32) ||  defined(_WIN32_WCE)
00052 #  ifdef _MSC_VER
00053 #   define EXPORT __declspec(dllexport)
00054 #  else
00055 #   define EXPORT  __stdcall __declspec(dllexport)
00056 #  endif
00057 # else
00058 #  define EXPORT
00059 #endif
00060 #else
00061 # define EXPORT
00062 #endif
00063 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00064 
00065 #if defined(WIN32)  ||  defined(_WIN32_WCE)
00066 #if defined(_MSC_VER)
00067         typedef int (__stdcall *iaxc_sendto_t)(SOCKET, const void *, size_t, int,
00068                         const struct sockaddr *, socklen_t);
00069         typedef int (__stdcall *iaxc_recvfrom_t)(SOCKET, void *, size_t, int,
00070                         struct sockaddr *, socklen_t *);
00071 #else
00072         typedef int PASCAL (*iaxc_sendto_t)(SOCKET, const char *, int, int,
00073                         const struct sockaddr *, int);
00074         typedef int PASCAL (*iaxc_recvfrom_t)(SOCKET, char *, int, int,
00075                         struct sockaddr *, int *);
00076 #endif
00077 #else
00078 
00081         typedef int (*iaxc_sendto_t)(int, const void *, size_t, int,
00082                         const struct sockaddr *, socklen_t);
00086         typedef int (*iaxc_recvfrom_t)(int, void *, size_t, int,
00087                         struct sockaddr *, socklen_t *);
00088 #endif
00089 
00093 #define IAXC_AUDIO_FORMAT_MASK  ((1<<16)-1)
00094 
00098 #define IAXC_VIDEO_FORMAT_MASK  (((1<<25)-1) & ~IAXC_AUDIO_FORMAT_MASK)
00099 
00100 /* payload formats : WARNING: must match libiax values!!! */
00101 /* Data formats for capabilities and frames alike */
00102 #define IAXC_FORMAT_G723_1       (1 << 0)   
00103 #define IAXC_FORMAT_GSM          (1 << 1)   
00104 #define IAXC_FORMAT_ULAW         (1 << 2)   
00105 #define IAXC_FORMAT_ALAW         (1 << 3)   
00106 #define IAXC_FORMAT_G726         (1 << 4)   
00107 #define IAXC_FORMAT_ADPCM        (1 << 5)   
00108 #define IAXC_FORMAT_SLINEAR      (1 << 6)   
00109 #define IAXC_FORMAT_LPC10        (1 << 7)   
00110 #define IAXC_FORMAT_G729A        (1 << 8)   
00111 #define IAXC_FORMAT_SPEEX        (1 << 9)   
00112 #define IAXC_FORMAT_ILBC         (1 << 10)  
00114 #define IAXC_FORMAT_MAX_AUDIO    (1 << 15)  
00115 #define IAXC_FORMAT_JPEG         (1 << 16)  
00116 #define IAXC_FORMAT_PNG          (1 << 17)  
00117 #define IAXC_FORMAT_H261         (1 << 18)  
00118 #define IAXC_FORMAT_H263         (1 << 19)  
00119 #define IAXC_FORMAT_H263_PLUS    (1 << 20)  
00120 #define IAXC_FORMAT_H264         (1 << 21)  
00121 #define IAXC_FORMAT_MPEG4        (1 << 22)  
00122 #define IAXC_FORMAT_THEORA       (1 << 24)  
00123 #define IAXC_FORMAT_MAX_VIDEO    (1 << 24)  
00125 #define IAXC_EVENT_TEXT          1   
00126 #define IAXC_EVENT_LEVELS        2   
00127 #define IAXC_EVENT_STATE         3   
00128 #define IAXC_EVENT_NETSTAT       4   
00129 #define IAXC_EVENT_URL           5   
00130 #define IAXC_EVENT_VIDEO         6   
00131 #define IAXC_EVENT_REGISTRATION  8   
00132 #define IAXC_EVENT_DTMF          9   
00133 #define IAXC_EVENT_AUDIO         10  
00134 #define IAXC_EVENT_VIDEOSTATS    11  
00136 #define IAXC_CALL_STATE_FREE     0       
00137 #define IAXC_CALL_STATE_ACTIVE   (1<<1)  
00138 #define IAXC_CALL_STATE_OUTGOING (1<<2)  
00139 #define IAXC_CALL_STATE_RINGING  (1<<3)  
00140 #define IAXC_CALL_STATE_COMPLETE (1<<4)  
00141 #define IAXC_CALL_STATE_SELECTED (1<<5)  
00142 #define IAXC_CALL_STATE_BUSY     (1<<6)  
00143 #define IAXC_CALL_STATE_TRANSFER (1<<7)  
00146 #define IAXC_TEXT_TYPE_STATUS     1   
00147 
00148 #define IAXC_TEXT_TYPE_NOTICE     2   
00149 
00150 #define IAXC_TEXT_TYPE_ERROR      3   
00151 
00156 #define IAXC_TEXT_TYPE_FATALERROR 4   
00157 
00158 #define IAXC_TEXT_TYPE_IAX        5   
00159 
00160 /* registration replys, corresponding to IAX_EVENTs*/
00161 #define IAXC_REGISTRATION_REPLY_ACK     18   
00162 #define IAXC_REGISTRATION_REPLY_REJ     30   
00163 #define IAXC_REGISTRATION_REPLY_TIMEOUT 6    
00165 #define IAXC_URL_URL              1  
00166 #define IAXC_URL_LDCOMPLETE       2  
00167 #define IAXC_URL_LINKURL          3  
00168 #define IAXC_URL_LINKREJECT       4  
00169 #define IAXC_URL_UNLINK           5  
00171 /* The source of the video or audio data triggering the event. */
00172 #define IAXC_SOURCE_LOCAL  1 
00173 #define IAXC_SOURCE_REMOTE 2 
00178 #define IAXC_EVENT_BUFSIZ 256
00179 
00183 struct iaxc_ev_levels {
00187         float input;
00188 
00192         float output;
00193 };
00194 
00198 struct iaxc_ev_text {
00206         int type;
00207 
00211         int callNo; 
00212 
00216         char message[IAXC_EVENT_BUFSIZ];
00217 };
00218 
00222 struct iaxc_ev_call_state {
00226         int callNo;
00227 
00235         int state;
00236         
00244         int format;
00245         
00253         int vformat;
00254 
00258         char remote[IAXC_EVENT_BUFSIZ];
00259 
00263         char remote_name[IAXC_EVENT_BUFSIZ];
00264         
00268         char local[IAXC_EVENT_BUFSIZ];
00269 
00273         char local_context[IAXC_EVENT_BUFSIZ];
00274 };
00275 
00279 struct iaxc_netstat {
00283         int jitter;
00284 
00288         int losspct;
00289 
00293         int losscnt;
00294 
00298         int packets;
00299 
00303         int delay;
00304         
00308         int dropped;
00309 
00313         int ooo;
00314 };
00315 
00319 struct iaxc_ev_netstats {
00323         int callNo;
00324         
00328         int rtt;
00329 
00333         struct iaxc_netstat local;
00334 
00338         struct iaxc_netstat remote;
00339 };
00340 
00344 struct iaxc_video_stats
00345 {
00346         unsigned long received_slices;  
00347         unsigned long acc_recv_size;    
00348         unsigned long sent_slices;      
00349         unsigned long acc_sent_size;    
00351         unsigned long dropped_frames;   
00352         unsigned long inbound_frames;   
00353         unsigned long outbound_frames;  
00355         float         avg_inbound_fps;  
00356         unsigned long avg_inbound_bps;  
00357         float         avg_outbound_fps; 
00358         unsigned long avg_outbound_bps; 
00360         struct timeval start_time;      
00361 };
00362 
00366 struct iaxc_ev_video_stats {
00370         int callNo;
00371 
00375         struct iaxc_video_stats stats;
00376 };
00377 
00381 struct iaxc_ev_url {
00385         int callNo;
00386 
00393         int type;
00394 
00398         char url[IAXC_EVENT_BUFSIZ];
00399 };
00400 
00404 struct iaxc_ev_video {
00410         int callNo;
00411 
00415         unsigned int ts;
00416 
00424         int format;
00425         
00429         int width;
00430         
00434         int height;
00435 
00441         int encoded;
00442 
00448         int source;
00449 
00453         int size;
00454 
00458         char *data;
00459 };
00460 
00464 struct iaxc_ev_audio
00465 {
00469         int callNo;
00470 
00474         unsigned int ts;
00475 
00483         int format;
00484 
00490         int encoded;
00491 
00497         int source;
00498 
00502         int size;
00503 
00507         unsigned char *data;
00508 };
00509 
00513 struct iaxc_ev_registration {
00519         int id;
00520 
00527         int reply;
00528 
00532         int msgcount;
00533 };
00534 
00538 typedef struct iaxc_event_struct {
00543         struct iaxc_event_struct *next;
00544 
00549         int type; 
00550         
00554         union {
00556                 struct iaxc_ev_levels           levels;
00558                 struct iaxc_ev_text             text;       
00560                 struct iaxc_ev_call_state       call;       
00562                 struct iaxc_ev_netstats         netstats;   
00564                 struct iaxc_ev_video_stats      videostats; 
00566                 struct iaxc_ev_url              url;        
00568                 struct iaxc_ev_video            video;      
00570                 struct iaxc_ev_audio            audio;      
00572                 struct iaxc_ev_registration     reg;        
00573         } ev;
00574 } iaxc_event;
00575 
00582 typedef int (*iaxc_event_callback_t)(iaxc_event e);
00583 
00588 EXPORT void iaxc_set_event_callback(iaxc_event_callback_t func);
00589 
00595 EXPORT int iaxc_set_event_callpost(void *handle, int id);
00596 
00601 EXPORT void iaxc_free_event(iaxc_event *e);
00602 
00603 
00604 /* Event Accessors */
00609 EXPORT struct iaxc_ev_levels *iaxc_get_event_levels(iaxc_event *e);
00610 
00615 EXPORT struct iaxc_ev_text *iaxc_get_event_text(iaxc_event *e);
00616 
00621 EXPORT struct iaxc_ev_call_state *iaxc_get_event_state(iaxc_event *e);
00622 
00631 EXPORT void iaxc_set_preferred_source_udp_port(int sourceUdpPort);
00632 
00638 EXPORT short iaxc_get_bind_port();
00639 
00646 EXPORT int iaxc_initialize(int num_calls);
00647 
00656 EXPORT void iaxc_shutdown();
00657 
00667 EXPORT void iaxc_set_formats(int preferred, int allowed);
00668 
00673 EXPORT void iaxc_set_min_outgoing_framesize(int samples);
00674 
00680 EXPORT void iaxc_set_callerid(const char * name, const char * number);
00681 
00688 EXPORT int iaxc_start_processing_thread();
00689 
00695 EXPORT int iaxc_stop_processing_thread();
00696 
00705 EXPORT int iaxc_call(const char * num);
00706 
00716 EXPORT int iaxc_call_ex(const char* num, const char* callerid_name, const char* callerid_number, int video);
00717 
00722 EXPORT int iaxc_unregister( int id );
00723 
00732 EXPORT int iaxc_register(const char * user, const char * pass, const char * host);
00733 
00737 EXPORT void iaxc_send_busy_on_incoming_call(int callNo);
00738 
00743 EXPORT void iaxc_answer_call(int callNo);
00744 
00750 EXPORT void iaxc_blind_transfer_call(int callNo, const char * number);
00751 
00759 EXPORT void iaxc_setup_call_transfer(int sourceCallNo, int targetCallNo);
00760 
00764 EXPORT void iaxc_dump_all_calls(void);
00765 
00769 EXPORT void iaxc_dump_call(void);
00770 
00777 EXPORT void iaxc_reject_call(void);
00778 
00783 EXPORT void iaxc_reject_call_number(int callNo);
00784 
00789 EXPORT void iaxc_send_dtmf(char digit);
00790 
00794 EXPORT void iaxc_send_text(const char * text);
00795 
00801 EXPORT void iaxc_send_url(const char *url, int link); /* link == 1 ? AST_HTML_LINKURL : AST_HTML_URL */
00802 
00807 EXPORT void iaxc_millisleep(long ms);
00808 
00813 EXPORT void iaxc_set_silence_threshold(float thr);
00814 
00819 EXPORT void iaxc_set_audio_output(int mode);
00820 
00829 EXPORT int iaxc_select_call(int callNo);
00830 
00834 EXPORT int iaxc_first_free_call();
00835 
00839 EXPORT int iaxc_selected_call();
00840 
00846 EXPORT int iaxc_quelch(int callNo, int MOH);
00847 
00851 EXPORT int iaxc_unquelch(int callNo);
00852 
00858 EXPORT int iaxc_mic_boost_get( void ) ;
00859 
00864 EXPORT int iaxc_mic_boost_set( int enable ) ;
00865 
00873 EXPORT char* iaxc_version(char *ver);
00874 
00879 EXPORT void iaxc_set_jb_target_extra( long value );
00880 
00889 EXPORT void iaxc_set_networking(iaxc_sendto_t st, iaxc_recvfrom_t rf) ;
00890 
00898 EXPORT int iaxc_get_netstats(int call, int *rtt, struct iaxc_netstat *local, struct iaxc_netstat *remote);
00899 
00900 #define IAXC_AD_INPUT           (1<<0) 
00901 #define IAXC_AD_OUTPUT          (1<<1) 
00902 #define IAXC_AD_RING            (1<<2) 
00903 #define IAXC_AD_INPUT_DEFAULT   (1<<3) 
00904 #define IAXC_AD_OUTPUT_DEFAULT  (1<<4) 
00905 #define IAXC_AD_RING_DEFAULT    (1<<5) 
00910 struct iaxc_audio_device {
00911 
00914         const char * name;
00915 
00919         long capabilities;      
00920 
00924         int devID;
00925 };
00926 
00935 EXPORT int iaxc_audio_devices_get(struct iaxc_audio_device **devs, int *nDevs, int *input, int *output, int *ring);
00936 
00943 EXPORT int iaxc_audio_devices_set(int input, int output, int ring);
00944 
00950 EXPORT float iaxc_input_level_get();
00951 
00957 EXPORT float iaxc_output_level_get();
00958 
00963 EXPORT int iaxc_input_level_set(float level);
00964 
00969 EXPORT int iaxc_output_level_set(float level);
00970 
00974 struct iaxc_sound {
00975         short   *data;           
00976         long    len;             
00977         int     malloced;        
00978         int     channel;         
00979         int     repeat;          
00980         long    pos;             
00981         int     id;              
00982         struct iaxc_sound *next; 
00983 };
00984 
00992 EXPORT int iaxc_play_sound(struct iaxc_sound *sound, int ring);
00993 
00998 EXPORT int iaxc_stop_sound(int id);
00999 
01000 #define IAXC_FILTER_DENOISE     (1<<0) 
01001 #define IAXC_FILTER_AGC         (1<<1) 
01002 #define IAXC_FILTER_ECHO        (1<<2) 
01003 #define IAXC_FILTER_AAGC        (1<<3) 
01004 #define IAXC_FILTER_CN          (1<<4) 
01013 EXPORT int iaxc_get_filters(void);
01014 
01023 EXPORT void iaxc_set_filters(int filters);
01024 
01039 EXPORT void iaxc_set_speex_settings(int decode_enhance, float quality, int bitrate, int vbr, int abr, int complexity);
01040 
01041 /*
01042  Functions and flags for setting and getting audio callback preferences
01043   The application can request to receive local/remote, raw/encoded audio
01044   through the callback mechanism. Please note that changing callback
01045   settings will overwrite all previous settings.
01046 */
01050 #define IAXC_AUDIO_PREF_RECV_LOCAL_RAW      (1 << 0) 
01051 
01055 #define IAXC_AUDIO_PREF_RECV_LOCAL_ENCODED  (1 << 1) 
01056 
01060 #define IAXC_AUDIO_PREF_RECV_REMOTE_RAW     (1 << 2) 
01061 
01065 #define IAXC_AUDIO_PREF_RECV_REMOTE_ENCODED (1 << 3) 
01066 
01070 #define IAXC_AUDIO_PREF_SEND_DISABLE        (1 << 4) 
01071 
01077 EXPORT unsigned int iaxc_get_audio_prefs(void);
01078 
01089 EXPORT int iaxc_set_audio_prefs(unsigned int prefs);
01090 
01091 /*
01092  * Acceptable range for video rezolution
01093  */
01094 #define IAXC_VIDEO_MAX_WIDTH    704 
01095 #define IAXC_VIDEO_MAX_HEIGHT   576 
01096 #define IAXC_VIDEO_MIN_WIDTH    80  
01097 #define IAXC_VIDEO_MIN_HEIGHT   60  
01099 /*
01100  Video callback preferences
01101  The client application can obtain any combination of
01102  remote/local, encoded/raw video through the event callback
01103  mechanism
01104  Use these flags to specify what kind of video do you want to receive
01105  */
01106 
01110 #define IAXC_VIDEO_PREF_RECV_LOCAL_RAW      (1 << 0) 
01111 
01115 #define IAXC_VIDEO_PREF_RECV_LOCAL_ENCODED  (1 << 1) 
01116 
01120 #define IAXC_VIDEO_PREF_RECV_REMOTE_RAW     (1 << 2) 
01121 
01125 #define IAXC_VIDEO_PREF_RECV_REMOTE_ENCODED (1 << 3) 
01126 
01130 #define IAXC_VIDEO_PREF_SEND_DISABLE        (1 << 4) 
01131 
01139 #define IAXC_VIDEO_PREF_RECV_RGB32          (1 << 5)
01140 
01144 #define IAXC_VIDEO_PREF_CAPTURE_DISABLE     (1 << 6)
01145 
01156 EXPORT unsigned int iaxc_get_video_prefs(void);
01157 
01172 EXPORT int iaxc_set_video_prefs(unsigned int prefs);
01173 
01183 EXPORT void iaxc_video_format_get_cap(int *preferred, int *allowed);
01184 
01194 EXPORT void iaxc_video_format_set_cap(int preferred, int allowed);
01195 
01210 EXPORT void iaxc_video_format_set(int preferred, int allowed, int framerate, int bitrate, int width, int height, int fs);
01211 
01222 EXPORT void iaxc_video_params_change(int framerate, int bitrate, int width, int height, int fs);
01223 
01225 EXPORT int iaxc_set_holding_frame(char *);
01226 
01233 EXPORT int iaxc_video_bypass_jitter(int);
01234 
01238 EXPORT int iaxc_is_camera_working();
01239 
01250 EXPORT void iaxc_YUV420_to_RGB32(int width, int height, char *src, char *dest);
01251 
01252 #ifdef __cplusplus
01253 }
01254 #endif
01255 
01256 #endif

Generated on Mon Sep 24 15:43:29 2007 for IAXClient by  doxygen 1.5.3