//indent -gnu -ts4 -br -brs -cdw -lp -ce -nbfda -npcs -nprs -npsl -nbbo -saf -sai -saw -cs -bbo -nhnl -nut -sob -l90 #ifndef _SKYPIAX_H_ #define _SKYPIAX_H_ #ifndef SKYPIAX_SVN_VERSION #define SKYPIAX_SVN_VERSION "????NO_REVISION???" #endif #include /* needed here for conditional compilation on version.h */ /* the following #defs are for LINUX */ #ifndef __CYGWIN__ #ifndef ASTERISK_VERSION_1_6 #ifndef ASTERISK_VERSION_1_4 #ifndef ASTERISK_VERSION_1_2 #define ASTERISK_VERSION_1_4 #if(ASTERISK_VERSION_NUM == 999999) #undef ASTERISK_VERSION_1_4 #elif(ASTERISK_VERSION_NUM < 10400) #undef ASTERISK_VERSION_1_4 #endif /* ASTERISK_VERSION_NUM == 999999 || ASTERISK_VERSION_NUM < 10400 */ #endif /* ASTERISK_VERSION_1_2 */ #endif /* ASTERISK_VERSION_1_4 */ #endif /* ASTERISK_VERSION_1_6 */ #ifdef ASTERISK_VERSION_1_2 #undef ASTERISK_VERSION_1_4 #endif /* ASTERISK_VERSION_1_2 */ #ifdef ASTERISK_VERSION_1_6 #define ASTERISK_VERSION_1_4 #endif /* ASTERISK_VERSION_1_6 */ #define SKYPIAX_SKYPE #define WANT_SKYPE_X11 #endif /* NOT __CYGWIN__ */ /* the following #defs are for WINDOWS */ #ifdef __CYGWIN__ #undef ASTERISK_VERSION_1_4 #undef ASTERISK_VERSION_1_6 #define SKYPIAX_SKYPE #undef WANT_SKYPE_X11 #endif /* __CYGWIN__ */ /* INCLUDES */ #ifdef ASTERISK_VERSION_1_6 #include /* some asterisk-devel package do not contains asterisk.h, but seems that is needed for the 1.6 series, at least from trunk */ #endif /* ASTERISK_VERSION_1_6 */ #include #include #include #include #include #include #include #include #include #include #include #ifndef ASTERISK_VERSION_1_4 #include #include #endif /* ASTERISK_VERSION_1_4 */ #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef ASTERISK_VERSION_1_6 #include #include #endif /* ASTERISK_VERSION_1_6 */ #ifdef ASTERISK_VERSION_1_4 #include #include #include #include #endif /* ASTERISK_VERSION_1_4 */ #ifdef ASTERISK_VERSION_1_2 #include #include #endif /* ASTERISK_VERSION_1_2 */ #ifdef HAVE_CONFIG_H #include #endif //#include "skypiax_spandsp.h" #ifdef __CYGWIN__ #include #endif /* __CYGWIN__ */ #ifdef WANT_SKYPE_X11 #include #include #include #endif /* WANT_SKYPE_X11 */ #ifndef AST_DIGIT_ANYDIG #define AST_DIGIT_ANYDIG "0123456789*#" #else #warning Please review Skypiax AST_DIGIT_ANYDIG #endif #ifndef _ASTERISK_H #define AST_CONFIG_MAX_PATH 255 /* defined in asterisk.h, but some asterisk-devel package do not contains asterisk.h */ extern char ast_config_AST_CONFIG_DIR[AST_CONFIG_MAX_PATH]; int ast_register_atexit(void (*func) (void)); /* in asterisk.h, but some asterisk-devel package do not contains asterisk.h */ void ast_unregister_atexit(void (*func) (void)); /* in asterisk.h, but some asterisk-devel package do not contains asterisk.h */ #endif /* DEFINITIONS */ #define SAMPLERATE_SKYPIAX 8000 #define SAMPLES_PER_FRAME SAMPLERATE_SKYPIAX/50 #define SKYPIAX_DIR_CONFIG "directoriax.conf" /* LUIGI RIZZO's magic */ /* boost support. BOOST_SCALE * 10 ^(BOOST_MAX/20) must * be representable in 16 bits to avoid overflows. */ #define BOOST_SCALE (1<<9) #define BOOST_MAX 40 /* slightly less than 7 bits */ /* call flow from the device */ #define CALLFLOW_CALL_IDLE AST_STATE_DOWN #define CALLFLOW_INCOMING_RING AST_STATE_RING #define CALLFLOW_CALL_DIALING AST_STATE_DIALING #define CALLFLOW_CALL_LINEBUSY AST_STATE_BUSY #define CALLFLOW_CALL_ACTIVE 300 #define CALLFLOW_INCOMING_HANGUP 100 #define CALLFLOW_CALL_RELEASED 101 #define CALLFLOW_CALL_NOCARRIER 102 #define CALLFLOW_CALL_INFLUX 103 #define CALLFLOW_CALL_INCOMING 104 #define CALLFLOW_CALL_FAILED 105 #define CALLFLOW_CALL_NOSERVICE 106 #define CALLFLOW_CALL_OUTGOINGRESTRICTED 107 #define CALLFLOW_CALL_SECURITYFAIL 108 #define CALLFLOW_CALL_NOANSWER 109 #define CALLFLOW_STATUS_FINISHED 110 #define CALLFLOW_STATUS_CANCELLED 111 #define CALLFLOW_STATUS_FAILED 112 #define CALLFLOW_STATUS_REFUSED 113 #define CALLFLOW_STATUS_RINGING 114 #define CALLFLOW_STATUS_INPROGRESS 115 #define CALLFLOW_STATUS_UNPLACED 116 #define CALLFLOW_STATUS_ROUTING 117 #define CALLFLOW_STATUS_EARLYMEDIA 118 #define AST_STATE_HANGUP_REQUESTED 200 //FIXME CALLFLOW_INCOMING_CALLID to be removed #define CALLFLOW_INCOMING_CALLID 1019 /* debugging bitmask */ #define DEBUG_SOUND 1 #define DEBUG_SERIAL 2 #define DEBUG_SKYPE 4 #define DEBUG_AT 8 #define DEBUG_FBUS2 16 #define DEBUG_CALL 32 #define DEBUG_LOCKS 64 #define DEBUG_PBX 128 #define DEBUG_MONITORLOCKS 256 #define DEBUG_ALL DEBUG_SOUND|DEBUG_SERIAL|DEBUG_SKYPE|DEBUG_AT|DEBUG_FBUS2|DEBUG_CALL|DEBUG_PBX|DEBUG_LOCKS|DEBUG_MONITORLOCKS /* wrappers for ast_log */ #define DEBUGA_SOUND(...) if (skypiax_debug & DEBUG_SOUND) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_SOUND %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ ); #define DEBUGA_SERIAL(...) if (skypiax_debug & DEBUG_SERIAL) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_SERIAL %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ ); #define DEBUGA_SKYPE(...) if (skypiax_debug & DEBUG_SKYPE) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_SKYPE %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ ); #define DEBUGA_AT(...) if (skypiax_debug & DEBUG_AT) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_AT %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ ); #define DEBUGA_FBUS2(...) if (skypiax_debug & DEBUG_FBUS2) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_FBUS2 %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ ); #define DEBUGA_CALL(...) if (skypiax_debug & DEBUG_CALL) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_CALL %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ ); #define DEBUGA_PBX(...) if (skypiax_debug & DEBUG_PBX) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_PBX %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ ); #define ERRORA(...) ast_log(LOG_ERROR, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][ERROR %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ ); #define NOTICA(...) ast_log(LOG_NOTICE, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][NOTICE %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ ); #define WARNINGA(...) ast_log(LOG_WARNING, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][WARNING %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ ); /* macros for logging */ #define SKYPIAX_P_LOG p ? p->owner : NULL, (unsigned long)pthread_self(), __LINE__, p ? p->name ? p->name : "none" : "none", p ? p->owner ? p->owner->_state : -1 : -1, p ? p->interface_state : -1, p ? p->skype_callflow : -1 #define SKYPIAX_TMP_LOG tmp ? tmp->owner : NULL, (unsigned long)pthread_self(), __LINE__, tmp ? tmp->name ? tmp->name : "none" : "none", tmp ? tmp->owner ? tmp->owner->_state : -1 : -1, tmp ? tmp->interface_state : -1, tmp ? tmp->skype_callflow : -1 /* logging wrappers for ast_mutex_lock and ast_mutex_unlock */ #define LOKKA(x) if (skypiax_debug & DEBUG_LOCKS) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_LOCKS %-5d][%-10s][%2d,%2d,%2d] going to lock %p (%s)\n", SKYPIAX_P_LOG, x, x == &skypiax_monlock ? "MONLOCK" : x == &skypiax_iflock ? "IFLOCK" : x == &skypiax_usecnt_lock ? "USECNT_LOCK" : "?????"); if (ast_mutex_lock(x)) ast_log(LOG_ERROR, "ast_mutex_lock failed, BAD\n"); if (skypiax_debug & DEBUG_LOCKS) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_LOCKS %-5d][%-10s][%2d,%2d,%2d] locked %p (%s)\n", SKYPIAX_P_LOG, x, x == &skypiax_monlock ? "MONLOCK" : x == &skypiax_iflock ? "IFLOCK" : x == &skypiax_usecnt_lock ? "USECNT_LOCK" : "?????"); #define UNLOCKA(x) if (skypiax_debug & DEBUG_LOCKS) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_LOCKS %-5d][%-10s][%2d,%2d,%2d] going to unlock %p (%s)\n", SKYPIAX_P_LOG, x, x == &skypiax_monlock ? "MONLOCK" : x == &skypiax_iflock ? "IFLOCK" : x == &skypiax_usecnt_lock ? "USECNT_LOCK" : "?????"); if (ast_mutex_unlock(x)) ast_log(LOG_ERROR, "ast_mutex_lock failed, BAD\n"); if (skypiax_debug & DEBUG_LOCKS) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_LOCKS %-5d][%-10s][%2d,%2d,%2d] unlocked %p (%s)\n", SKYPIAX_P_LOG, x, x == &skypiax_monlock ? "MONLOCK" : x == &skypiax_iflock ? "IFLOCK" : x == &skypiax_usecnt_lock ? "USECNT_LOCK" : "?????"); #define PUSHA_UNLOCKA(x) pthread_cleanup_push(skypiax_unlocka_log, (void *) x); #define POPPA_UNLOCKA(x) pthread_cleanup_pop(0); #define MONITORLOKKA(x) if (skypiax_debug & DEBUG_MONITORLOCKS) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_MONITORLOCKS %-5d][%-10s][%2d,%2d,%2d] going to lock %p (%s)\n", SKYPIAX_P_LOG, x, x == &skypiax_monlock ? "MONLOCK" : x == &skypiax_iflock ? "IFLOCK" : x == &skypiax_usecnt_lock ? "USECNT_LOCK" : "?????"); if (ast_mutex_lock(x)) ast_log(LOG_ERROR, "ast_mutex_lock failed, BAD\n"); if (skypiax_debug & DEBUG_MONITORLOCKS) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_MONITORLOCKS %-5d][%-10s][%2d,%2d,%2d] locked %p (%s)\n", SKYPIAX_P_LOG, x, x == &skypiax_monlock ? "MONLOCK" : x == &skypiax_iflock ? "IFLOCK" : x == &skypiax_usecnt_lock ? "USECNT_LOCK" : "?????"); #define MONITORUNLOCKA(x) if (skypiax_debug & DEBUG_MONITORLOCKS) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_MONITORLOCKS %-5d][%-10s][%2d,%2d,%2d] going to unlock %p (%s)\n", SKYPIAX_P_LOG, x, x == &skypiax_monlock ? "MONLOCK" : x == &skypiax_iflock ? "IFLOCK" : x == &skypiax_usecnt_lock ? "USECNT_LOCK" : "?????"); if (ast_mutex_unlock(x)) ast_log(LOG_ERROR, "ast_mutex_lock failed, BAD\n"); if (skypiax_debug & DEBUG_MONITORLOCKS) ast_log(LOG_DEBUG, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][DEBUG_MONITORLOCKS %-5d][%-10s][%2d,%2d,%2d] unlocked %p (%s)\n", SKYPIAX_P_LOG, x, x == &skypiax_monlock ? "MONLOCK" : x == &skypiax_iflock ? "IFLOCK" : x == &skypiax_usecnt_lock ? "USECNT_LOCK" : "?????"); /* macros used for config file parsing (luigi rizzo)*/ #define M_BOOL(tag, dst) M_F(tag, (dst) = ast_true(__val) ) #define M_END(x) x; #define M_F(tag, f) if (!strcasecmp((__s), tag)) { f; } else #ifdef ASTERISK_VERSION_1_6 #define M_START(var, val) const char *__s = var; const char *__val = val; #else #define M_START(var, val) char *__s = var; char *__val = val; #endif /* ASTERISK_VERSION_1_6 */ #define M_STR(tag, dst) M_F(tag, ast_copy_string(dst, __val, sizeof(dst))) #define M_UINT(tag, dst) M_F(tag, (dst) = strtoul(__val, NULL, 0) ) #define SKYPIAX_FRAME_SIZE 160 /* SKYPIAX INTERNAL STRUCTS */ /*! * \brief structure for exchanging messages with the skype client */ #ifdef WANT_SKYPE_X11 struct AsteriskHandles { Window skype_win; Display *disp; Window win; int fdesc[2]; }; #else /* WANT_SKYPE_X11 */ struct AsteriskHandles { HWND win32_hInit_MainWindowHandle; HWND win32_hGlobal_SkypeAPIWindowHandle; int fdesc[2]; }; #endif /* WANT_SKYPE_X11 */ #ifndef WIN32 struct SkypiaxHandles { Window skype_win; Display *disp; Window win; int api_connected; int fdesc[2]; }; #else //WIN32 struct SkypiaxHandles { HWND win32_hInit_MainWindowHandle; HWND win32_hGlobal_SkypeAPIWindowHandle; HINSTANCE win32_hInit_ProcessHandle; char win32_acInit_WindowClassName[128]; UINT win32_uiGlobal_MsgID_SkypeControlAPIAttach; UINT win32_uiGlobal_MsgID_SkypeControlAPIDiscover; int api_connected; int fdesc[2]; }; #endif //WIN32 /*! * \brief PVT structure for a skypiax interface (channel), created by skypiax_mkif */ struct skypiax_pvt { char *name; /*!< \brief 'name' of the interface (channel) */ int interface_state; /*!< \brief 'state' of the interface (channel) */ struct ast_channel *owner; /*!< \brief channel we belong to, possibly NULL */ struct skypiax_pvt *next; /*!< \brief Next interface (channel) in list */ char context[AST_MAX_EXTENSION]; /*!< \brief default Asterisk dialplan context for this interface */ char language[MAX_LANGUAGE]; /*!< \brief default Asterisk dialplan language for this interface */ char exten[AST_MAX_EXTENSION]; /*!< \brief default Asterisk dialplan extension for this interface */ int skypiax_sound_rate; /*!< \brief rate of the sound device, in Hz, eg: 8000 */ int skypiax_sound_capt_fd; /*!< \brief file descriptor for sound capture dev */ char callid_name[50]; char callid_number[50]; pthread_t controldev_thread; /*!< \brief serial control thread for this interface, running during the call */ double playback_boost; double capture_boost; int stripmsd; pthread_t skype_thread; struct AsteriskHandles AsteriskHandlesAst; struct SkypiaxHandles SkypiaxHandles; char skype_call_id[512]; int skype_call_ongoing; char skype_friends[4096]; char skype_fullname[512]; char skype_displayname[512]; int skype_callflow; /*!< \brief 'callflow' of the skype interface (as opposed to phone interface) */ int skype; /*!< \brief config flag, bool, Skype support on this interface (0 if false, -1 if true) */ int control_to_send; int audiopipe[2]; int audioskypepipe[2]; pthread_t tcp_srv_thread; pthread_t tcp_cli_thread; short audiobuf[160]; int audiobuf_is_loaded; //int phonebook_listing; //int phonebook_querying; //int phonebook_listing_received_calls; //int phonebook_first_entry; //int phonebook_last_entry; //int phonebook_number_lenght; //int phonebook_text_lenght; FILE *phonebook_writing_fp; int skypiax_dir_entry_extension_prefix; #ifdef WIN32 unsigned short tcp_cli_port; unsigned short tcp_srv_port; #else int tcp_cli_port; int tcp_srv_port; #endif char X11_display[256]; struct ast_frame read_frame; char skype_user[256]; char skype_password[256]; char destination[256]; char session_uuid_str[512 + 1]; pthread_t signaling_thread; }; typedef struct skypiax_pvt private_t; /* FUNCTIONS */ /* module helpers functions */ int load_module(void); int unload_module(void); int usecount(void); char *description(void); char *key(void); /* chan_skypiax internal functions */ void skypiax_unlocka_log(void *x); void *do_skypeapi_thread(void *data); //int skypiax2skype(struct ast_channel *c, void *data); //int skype2skypiax(struct ast_channel *c, void *data); //void skypiax_disconnect(void); int skypiax_signaling_write(struct skypiax_pvt *p, char *msg_to_skype); int skypiax_signaling_read(struct skypiax_pvt *p); int skypiax_console_skype(int fd, int argc, char *argv[]); #ifdef WANT_SKYPE_X11 int X11_errors_handler(Display * dpy, XErrorEvent * err); int skypiax_send_message(struct SkypiaxHandles *SkypiaxHandles, const char *message_P); int skypiax_present(struct SkypiaxHandles *SkypiaxHandles); void skypiax_clean_disp(void *data); #endif /* WANT_SKYPE_X11 */ #ifdef __CYGWIN__ int win32_Initialize_CreateWindowClass(private_t * tech_pvt); void win32_DeInitialize_DestroyWindowClass(private_t * tech_pvt); int win32_Initialize_CreateMainWindow(private_t * tech_pvt); void win32_DeInitialize_DestroyMainWindow(private_t * tech_pvt); #endif /* __CYGWIN__ */ /* CHAN_SKYPIAX.C */ int skypiax_queue_control(struct ast_channel *chan, int control); struct skypiax_pvt *skypiax_console_find_desc(char *dev); int skypiax_serial_call(struct skypiax_pvt *p, char *dstr); /* FUNCTIONS */ /* PBX interface functions */ struct ast_channel *skypiax_request(const char *type, int format, void *data, int *cause); int skypiax_answer(struct ast_channel *c); int skypiax_hangup(struct ast_channel *c); int skypiax_originate_call(struct ast_channel *c, char *idest, int timeout); struct ast_frame *skypiax_read(struct ast_channel *chan); int skypiax_write(struct ast_channel *c, struct ast_frame *f); int skypiax_fixup(struct ast_channel *oldchan, struct ast_channel *newchan); #ifndef ASTERISK_VERSION_1_4 int skypiax_indicate(struct ast_channel *c, int cond); #else int skypiax_indicate(struct ast_channel *c, int cond, const void *data, size_t datalen); #endif int skypiax_devicestate(void *data); #ifdef ASTERISK_VERSION_1_4 int skypiax_digitsend_begin(struct ast_channel *ast, char digit); int skypiax_digitsend_end(struct ast_channel *ast, char digit, unsigned int duration); #else /* ASTERISK_VERSION_1_4 */ int skypiax_digitsend(struct ast_channel *ast, char digit); #endif /* ASTERISK_VERSION_1_4 */ /* chan_skypiax internal functions */ struct skypiax_pvt *skypiax_mkif(struct ast_config *cfg, char *ctg, int is_first_category); struct ast_channel *skypiax_new(struct skypiax_pvt *p, int state, char *context); int skypiax_restart_monitor(void); void *skypiax_do_monitor(void *data); int skypiax_sound_boost(struct ast_frame *f, double boost); int skypiax_sound_init(struct skypiax_pvt *p); int skypiax_sound_shutdown(struct skypiax_pvt *p); struct ast_frame *skypiax_sound_read(struct skypiax_pvt *p); int skypiax_sound_write(struct skypiax_pvt *p, struct ast_frame *f); void *skypiax_do_controldev_thread(void *data); #ifdef ASTERISK_VERSION_1_6 void skypiax_store_boost(const char *s, double *boost); #else void skypiax_store_boost(char *s, double *boost); #endif /* ASTERISK_VERSION_1_6 */ int skypiax_console_set_active(int fd, int argc, char *argv[]); int skypiax_console_hangup(int fd, int argc, char *argv[]); int skypiax_console_playback_boost(int fd, int argc, char *argv[]); int skypiax_console_capture_boost(int fd, int argc, char *argv[]); int skypiax_console_skypiax(int fd, int argc, char *argv[]); int skypiax_console_dial(int fd, int argc, char *argv[]); int skypiax_audio_init(struct skypiax_pvt *p); //struct ast_frame *skypiax_audio_read(struct skypiax_pvt *p); int skypiax_audio_read(struct skypiax_pvt *p); void *skypiax_do_tcp_srv_thread(void *data); int skypiax_audio_write(struct skypiax_pvt *p, struct ast_frame *f); void *skypiax_do_tcp_cli_thread(void *data); int skypiax_call(struct skypiax_pvt *p, char *idest, int timeout); int skypiax_console_skypiax_dir_import(int fd, int argc, char *argv[]); void *skypiax_do_tcp_srv_thread_func(void *obj); void *skypiax_do_tcp_cli_thread_func(void *obj); void *skypiax_do_skypeapi_thread_func(void *obj); int dtmf_received(private_t * tech_pvt, char *value); int start_audio_threads(private_t * tech_pvt); int new_inbound_channel(private_t * tech_pvt); int outbound_channel_answered(private_t * tech_pvt); int skypiax_senddigit(struct skypiax_pvt *p, char digit); int skypiax_signaling_write(private_t * tech_pvt, char *msg_to_skype); #if defined(WIN32) && !defined(__CYGWIN__) int skypiax_pipe_read(switch_file_t * pipe, short *buf, int howmany); int skypiax_pipe_write(switch_file_t * pipe, short *buf, int howmany); /* Visual C do not have strsep ? */ char *strsep(char **stringp, const char *delim); #else int skypiax_pipe_read(int pipe, short *buf, int howmany); int skypiax_pipe_write(int pipe, short *buf, int howmany); #endif /* WIN32 */ int skypiax_close_socket(unsigned int fd); private_t *find_available_skypiax_interface(void); int remote_party_is_ringing(private_t * tech_pvt); int remote_party_is_early_media(private_t * tech_pvt); #define SKYPIAX_STATE_DOWN AST_STATE_DOWN #define SKYPIAX_STATE_RING AST_STATE_RING #define SKYPIAX_STATE_DIALING AST_STATE_DIALING #define SKYPIAX_STATE_BUSY AST_STATE_BUSY #define SKYPIAX_STATE_UP AST_STATE_UP #define SKYPIAX_STATE_RINGING AST_STATE_RINGING #define SKYPIAX_STATE_PRERING AST_STATE_PRERING #define SKYPIAX_STATE_RESERVED AST_STATE_RESERVED #define SKYPIAX_STATE_HANGUP_REQUESTED 200 #endif /* _SKYPIAX_H_ */