00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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
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
00101
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
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
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
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);
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
01043
01044
01045
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
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
01101
01102
01103
01104
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