diff --git a/include/asterisk/adsi.h b/include/asterisk/adsi.h index 0c894b8..4aee6a0 100644 --- a/include/asterisk/adsi.h +++ b/include/asterisk/adsi.h @@ -125,11 +125,11 @@ * Returns 0 on success (or adsi unavailable) and -1 on hangup * */ -int ast_adsi_channel_init(struct ast_channel *chan); +extern int (*ast_adsi_channel_init)(struct ast_channel *chan); -int ast_adsi_begin_download(struct ast_channel *chan, char *service, unsigned char *fdn, unsigned char *sec, int version); +extern int (*ast_adsi_begin_download)(struct ast_channel *chan, char *service, unsigned char *fdn, unsigned char *sec, int version); -int ast_adsi_end_download(struct ast_channel *chan); +extern int (*ast_adsi_end_download)(struct ast_channel *chan); /*! Restore ADSI initialization (for applications that play with ADSI */ /* and want to restore it to normal. If you touch "INFO" then you */ @@ -140,7 +140,7 @@ int ast_adsi_end_download(struct ast_cha * Returns 0 on success (or adsi unavailable) and -1 on hangup * */ -int ast_adsi_channel_restore(struct ast_channel *chan); +extern int (*ast_adsi_channel_restore)(struct ast_channel *chan); /*! Display some stuff on the screen */ /*! @@ -152,7 +152,7 @@ int ast_adsi_channel_restore(struct ast_ * Return 0 on success (or adsi unavailable) and -1 on hangup * */ -int ast_adsi_print(struct ast_channel *chan, char **lines, int *align, int voice); +extern int (*ast_adsi_print)(struct ast_channel *chan, char **lines, int *align, int voice); /*! Check if scripts for a given app are already loaded. Version may be -1 */ /* if any version is okay, or 0-255 for a specific version. */ @@ -165,18 +165,18 @@ int ast_adsi_print(struct ast_channel *c * Returns 0 if scripts is not loaded or not an ADSI CPE. Returns -1 * on hangup. Returns 1 if script already loaded. */ -int ast_adsi_load_session(struct ast_channel *chan, unsigned char *app, int ver, int data); -int ast_adsi_unload_session(struct ast_channel *chan); +extern int (*ast_adsi_load_session)(struct ast_channel *chan, unsigned char *app, int ver, int data); +extern int (*ast_adsi_unload_session)(struct ast_channel *chan); /* ADSI Layer 2 transmission functions */ -int ast_adsi_transmit_messages(struct ast_channel *chan, unsigned char **msg, int *msglen, int *msgtype); -int ast_adsi_transmit_message(struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype); -int ast_adsi_transmit_message_full(struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype, int dowait); +extern int (*ast_adsi_transmit_messages)(struct ast_channel *chan, unsigned char **msg, int *msglen, int *msgtype); +extern int (*ast_adsi_transmit_message)(struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype); +extern int (*ast_adsi_transmit_message_full)(struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype, int dowait); /*! Read some encoded DTMF data. */ /*! * Returns number of bytes received */ -int ast_adsi_read_encoded_dtmf(struct ast_channel *chan, unsigned char *buf, int maxlen); +extern int (*ast_adsi_read_encoded_dtmf)(struct ast_channel *chan, unsigned char *buf, int maxlen); /* ADSI Layer 3 creation functions */ @@ -190,14 +190,14 @@ int ast_adsi_read_encoded_dtmf(struct as * */ -int ast_adsi_connect_session(unsigned char *buf, unsigned char *fdn, int ver); +extern int (*ast_adsi_connect_session)(unsigned char *buf, unsigned char *fdn, int ver); /*! Build Query CPE ID of equipment */ /*! * Returns number of bytes added to message */ -int ast_adsi_query_cpeid(unsigned char *buf); -int ast_adsi_query_cpeinfo(unsigned char *buf); +extern int (*ast_adsi_query_cpeid)(unsigned char *buf); +extern int (*ast_adsi_query_cpeinfo)(unsigned char *buf); /*! Get CPE ID from an attached ADSI compatible CPE. */ /*! @@ -205,9 +205,9 @@ int ast_adsi_query_cpeinfo(unsigned char * or -1 on hangup, or 0 if there was no hangup but it failed to find the * device ID. Returns to voice mode if "voice" is non-zero. */ -int ast_adsi_get_cpeid(struct ast_channel *chan, unsigned char *cpeid, int voice); +extern int (*ast_adsi_get_cpeid)(struct ast_channel *chan, unsigned char *cpeid, int voice); -int ast_adsi_get_cpeinfo(struct ast_channel *chan, int *width, int *height, int *buttons, int voice); +extern int (*ast_adsi_get_cpeinfo)(struct ast_channel *chan, int *width, int *height, int *buttons, int voice); /*! Begin an ADSI script download */ /*! @@ -221,7 +221,7 @@ int ast_adsi_get_cpeinfo(struct ast_chan * */ -int ast_adsi_download_connect(unsigned char *buf, char *service, unsigned char *fdn, unsigned char *sec, int ver); +extern int (*ast_adsi_download_connect)(unsigned char *buf, char *service, unsigned char *fdn, unsigned char *sec, int ver); /*! Disconnects a running session */ /*! @@ -230,7 +230,7 @@ int ast_adsi_download_connect(unsigned c * Returns number of bytes added to buffer or -1 on error. * */ -int ast_adsi_disconnect_session(unsigned char *buf); +extern int (*ast_adsi_disconnect_session)(unsigned char *buf); /*! Disconnects (and hopefully saves) a downloaded script */ /*! @@ -239,7 +239,7 @@ int ast_adsi_disconnect_session(unsigned * Returns number of bytes added to buffer or -1 on error. * */ -int ast_adsi_download_disconnect(unsigned char *buf); +extern int (*ast_adsi_download_disconnect)(unsigned char *buf); /*! Puts CPE in data mode... */ /*! @@ -248,9 +248,9 @@ int ast_adsi_download_disconnect(unsigne * Returns number of bytes added to buffer or -1 on error. * */ -int ast_adsi_data_mode(unsigned char *buf); -int ast_adsi_clear_soft_keys(unsigned char *buf); -int ast_adsi_clear_screen(unsigned char *buf); +extern int (*ast_adsi_data_mode)(unsigned char *buf); +extern int (*ast_adsi_clear_soft_keys)(unsigned char *buf); +extern int (*ast_adsi_clear_screen)(unsigned char *buf); /*! Puts CPE in voice mode... */ /*! @@ -260,14 +260,14 @@ int ast_adsi_clear_screen(unsigned char * Returns number of bytes added to buffer or -1 on error. * */ -int ast_adsi_voice_mode(unsigned char *buf, int when); +extern int (*ast_adsi_voice_mode)(unsigned char *buf, int when); /*! Returns non-zero if Channel does or might support ADSI */ /*! * \param chan Channel to check * */ -int ast_adsi_available(struct ast_channel *chan); +extern int (*ast_adsi_available)(struct ast_channel *chan); /*! Loads a line of info into the display */ /*! @@ -283,7 +283,7 @@ int ast_adsi_available(struct ast_channe * */ -int ast_adsi_display(unsigned char *buf, int page, int line, int just, int wrap, char *col1, char *col2); +extern int (*ast_adsi_display)(unsigned char *buf, int page, int line, int just, int wrap, char *col1, char *col2); /*! Sets the current line and page */ /*! @@ -295,7 +295,7 @@ int ast_adsi_display(unsigned char *buf, * */ -int ast_adsi_set_line(unsigned char *buf, int page, int line); +extern int (*ast_adsi_set_line)(unsigned char *buf, int page, int line); /*! Creates "load soft key" parameters */ /*! @@ -309,7 +309,7 @@ int ast_adsi_set_line(unsigned char *buf * Returns number of bytes added to buffer or -1 on error. * */ -int ast_adsi_load_soft_key(unsigned char *buf, int key, const char *llabel, const char *slabel, const char *ret, int data); +extern int (*ast_adsi_load_soft_key)(unsigned char *buf, int key, char *llabel, char *slabel, char *ret, int data); /*! Set which soft keys should be displayed */ /*! @@ -320,7 +320,7 @@ int ast_adsi_load_soft_key(unsigned char * Returns number of bytes added to buffer or -1 on error. * */ -int ast_adsi_set_keys(unsigned char *buf, unsigned char *keys); +extern int (*ast_adsi_set_keys)(unsigned char *buf, unsigned char *keys); /*! Set input information */ /*! @@ -334,7 +334,7 @@ int ast_adsi_set_keys(unsigned char *buf * Returns number of bytes added to buffer or -1 on error. * */ -int ast_adsi_input_control(unsigned char *buf, int page, int line, int display, int format, int just); +extern int (*ast_adsi_input_control)(unsigned char *buf, int page, int line, int display, int format, int just); /*! Set input format */ /*! @@ -348,6 +348,7 @@ int ast_adsi_input_control(unsigned char * Returns number of bytes added to buffer or -1 on error. * */ -int ast_adsi_input_format(unsigned char *buf, int num, int dir, int wrap, char *format1, char *format2); +extern int (*ast_adsi_input_format)(unsigned char *buf, int num, int dir, int wrap, char *format1, char *format2); #endif /* _ASTERISK_ADSI_H */ + diff --git a/main/Makefile b/main/Makefile index ac543ba..c4996ba 100644 --- a/main/Makefile +++ b/main/Makefile @@ -26,7 +26,7 @@ OBJS= io.o sched.o logger.o frame.o load utils.o plc.o jitterbuf.o dnsmgr.o devicestate.o \ netsock.o slinfactory.o ast_expr2.o ast_expr2f.o \ cryptostub.o sha1.o http.o fixedjitterbuf.o abstract_jb.o \ - strcompat.o + strcompat.o adsistub.o # we need to link in the objects statically, not as a library, because # otherwise modules will not have them available if none of the static diff --git a/main/adsistub.c b/main/adsistub.c new file mode 100644 index 0000000..5aa4eae --- /dev/null +++ b/main/adsistub.c @@ -0,0 +1,71 @@ +/* + * Asterisk -- An open source telephony toolkit. + * + * Copyright (C) 1999 - 2005, Digium, Inc. + * + * Christopher L. Wade + * + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. + */ + +#include +#include + +#include "asterisk.h" + +ASTERISK_FILE_VERSION(__FILE__, "$Revision: 7221 $") + +#include "asterisk/options.h" +#include "asterisk/channel.h" +#include "asterisk/adsi.h" +#include "asterisk/logger.h" + +#define build_stub(func_name,...) \ +static int stub_ ## func_name(__VA_ARGS__) \ +{ \ + if (option_debug > 5) \ + ast_log(LOG_NOTICE, "ADSI support not loaded!\n"); \ + return -1; \ +} \ +\ +int (*func_name)(__VA_ARGS__) = \ + stub_ ## func_name; + +build_stub(adsi_channel_init,struct ast_channel *chan) +build_stub(adsi_begin_download,struct ast_channel *chan, char *service, unsigned char *fdn, unsigned char *sec, int version) +build_stub(adsi_end_download,struct ast_channel *chan) +build_stub(adsi_channel_restore,struct ast_channel *chan) +build_stub(adsi_print,struct ast_channel *chan, char **lines, int *align, int voice) +build_stub(adsi_load_session,struct ast_channel *chan, unsigned char *app, int ver, int data) +build_stub(adsi_unload_session,struct ast_channel *chan) +build_stub(adsi_transmit_messages,struct ast_channel *chan, unsigned char **msg, int *msglen, int *msgtype) +build_stub(adsi_transmit_message,struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype) +build_stub(adsi_transmit_message_full,struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype, int dowait) +build_stub(adsi_read_encoded_dtmf,struct ast_channel *chan, unsigned char *buf, int maxlen) +build_stub(adsi_connect_session,unsigned char *buf, unsigned char *fdn, int ver) +build_stub(adsi_query_cpeid,unsigned char *buf) +build_stub(adsi_query_cpeinfo,unsigned char *buf) +build_stub(adsi_get_cpeid,struct ast_channel *chan, unsigned char *cpeid, int voice) +build_stub(adsi_get_cpeinfo,struct ast_channel *chan, int *width, int *height, int *buttons, int voice) +build_stub(adsi_download_connect,unsigned char *buf, char *service, unsigned char *fdn, unsigned char *sec, int ver) +build_stub(adsi_disconnect_session,unsigned char *buf) +build_stub(adsi_download_disconnect,unsigned char *buf) +build_stub(adsi_data_mode,unsigned char *buf) +build_stub(adsi_clear_soft_keys,unsigned char *buf) +build_stub(adsi_clear_screen,unsigned char *buf) +build_stub(adsi_voice_mode,unsigned char *buf, int when) +build_stub(adsi_available,struct ast_channel *chan) +build_stub(adsi_display,unsigned char *buf, int page, int line, int just, int wrap, char *col1, char *col2) +build_stub(adsi_set_line,unsigned char *buf, int page, int line) +build_stub(adsi_load_soft_key,unsigned char *buf, int key, char *llabel, char *slabel, char *ret, int data) +build_stub(adsi_set_keys,unsigned char *buf, unsigned char *keys) +build_stub(adsi_input_control,unsigned char *buf, int page, int line, int display, int format, int just) +build_stub(adsi_input_format,unsigned char *buf, int num, int dir, int wrap, char *format1, char *format2) diff --git a/res/res_adsi.c b/res/res_adsi.c index 62f8381..45372a1 100644 --- a/res/res_adsi.c +++ b/res/res_adsi.c @@ -333,7 +333,7 @@ static int __adsi_transmit_messages(stru } -int ast_adsi_begin_download(struct ast_channel *chan, char *service, unsigned char *fdn, unsigned char *sec, int version) +int _ast_adsi_begin_download(struct ast_channel *chan, char *service, unsigned char *fdn, unsigned char *sec, int version) { int bytes; unsigned char buf[256]; @@ -353,7 +353,7 @@ int ast_adsi_begin_download(struct ast_c return -1; } -int ast_adsi_end_download(struct ast_channel *chan) +int _ast_adsi_end_download(struct ast_channel *chan) { int bytes; unsigned char buf[256]; @@ -366,7 +366,7 @@ int ast_adsi_end_download(struct ast_cha return 0; } -int ast_adsi_transmit_message_full(struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype, int dowait) +int _ast_adsi_transmit_message_full(struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype, int dowait) { unsigned char *msgs[5] = { NULL, NULL, NULL, NULL, NULL }; int msglens[5]; @@ -447,7 +447,7 @@ int ast_adsi_transmit_message_full(struc return res; } -int ast_adsi_transmit_message(struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype) +int _ast_adsi_transmit_message(struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype) { return ast_adsi_transmit_message_full(chan, msg, msglen, msgtype, 1); } @@ -463,7 +463,7 @@ static inline int ccopy(unsigned char *d return x; } -int ast_adsi_load_soft_key(unsigned char *buf, int key, const char *llabel, const char *slabel, const char *ret, int data) +int _ast_adsi_load_soft_key(unsigned char *buf, int key, char *llabel, char *slabel, char *ret, int data) { int bytes=0; @@ -502,7 +502,7 @@ int ast_adsi_load_soft_key(unsigned char } -int ast_adsi_connect_session(unsigned char *buf, unsigned char *fdn, int ver) +int _ast_adsi_connect_session(unsigned char *buf, unsigned char *fdn, int ver) { int bytes=0; int x; @@ -525,7 +525,7 @@ int ast_adsi_connect_session(unsigned ch } -int ast_adsi_download_connect(unsigned char *buf, char *service, unsigned char *fdn, unsigned char *sec, int ver) +int _ast_adsi_download_connect(unsigned char *buf, char *service, unsigned char *fdn, unsigned char *sec, int ver) { int bytes=0; int x; @@ -555,7 +555,7 @@ int ast_adsi_download_connect(unsigned c } -int ast_adsi_disconnect_session(unsigned char *buf) +int _ast_adsi_disconnect_session(unsigned char *buf) { int bytes=0; @@ -570,7 +570,7 @@ int ast_adsi_disconnect_session(unsigned } -int ast_adsi_query_cpeid(unsigned char *buf) +int _ast_adsi_query_cpeid(unsigned char *buf) { int bytes = 0; buf[bytes++] = ADSI_QUERY_CPEID; @@ -580,7 +580,7 @@ int ast_adsi_query_cpeid(unsigned char * return bytes; } -int ast_adsi_query_cpeinfo(unsigned char *buf) +int _ast_adsi_query_cpeinfo(unsigned char *buf) { int bytes = 0; buf[bytes++] = ADSI_QUERY_CONFIG; @@ -590,7 +590,7 @@ int ast_adsi_query_cpeinfo(unsigned char return bytes; } -int ast_adsi_read_encoded_dtmf(struct ast_channel *chan, unsigned char *buf, int maxlen) +int _ast_adsi_read_encoded_dtmf(struct ast_channel *chan, unsigned char *buf, int maxlen) { int bytes = 0; int res; @@ -625,7 +625,7 @@ int ast_adsi_read_encoded_dtmf(struct as return bytes; } -int ast_adsi_get_cpeid(struct ast_channel *chan, unsigned char *cpeid, int voice) +int _ast_adsi_get_cpeid(struct ast_channel *chan, unsigned char *cpeid, int voice) { unsigned char buf[256]; int bytes = 0; @@ -657,7 +657,7 @@ int ast_adsi_get_cpeid(struct ast_channe return res; } -int ast_adsi_get_cpeinfo(struct ast_channel *chan, int *width, int *height, int *buttons, int voice) +int _ast_adsi_get_cpeinfo(struct ast_channel *chan, int *width, int *height, int *buttons, int voice) { unsigned char buf[256]; int bytes = 0; @@ -722,7 +722,7 @@ int ast_adsi_get_cpeinfo(struct ast_chan return res; } -int ast_adsi_data_mode(unsigned char *buf) +int _ast_adsi_data_mode(unsigned char *buf) { int bytes=0; @@ -737,7 +737,7 @@ int ast_adsi_data_mode(unsigned char *bu } -int ast_adsi_clear_soft_keys(unsigned char *buf) +int _ast_adsi_clear_soft_keys(unsigned char *buf) { int bytes=0; @@ -752,7 +752,7 @@ int ast_adsi_clear_soft_keys(unsigned ch } -int ast_adsi_clear_screen(unsigned char *buf) +int _ast_adsi_clear_screen(unsigned char *buf) { int bytes=0; @@ -767,7 +767,7 @@ int ast_adsi_clear_screen(unsigned char } -int ast_adsi_voice_mode(unsigned char *buf, int when) +int _ast_adsi_voice_mode(unsigned char *buf, int when) { int bytes=0; @@ -784,7 +784,7 @@ int ast_adsi_voice_mode(unsigned char *b } -int ast_adsi_available(struct ast_channel *chan) +int _ast_adsi_available(struct ast_channel *chan) { int cpe = chan->adsicpe & 0xff; if ((cpe == AST_ADSI_AVAILABLE) || @@ -793,7 +793,7 @@ int ast_adsi_available(struct ast_channe return 0; } -int ast_adsi_download_disconnect(unsigned char *buf) +int _ast_adsi_download_disconnect(unsigned char *buf) { int bytes=0; @@ -808,8 +808,8 @@ int ast_adsi_download_disconnect(unsigne } -int ast_adsi_display(unsigned char *buf, int page, int line, int just, int wrap, - char *col1, char *col2) +int _ast_adsi_display(unsigned char *buf, int page, int line, int just, int wrap, + char *col1, char *col2) { int bytes=0; @@ -854,7 +854,7 @@ int ast_adsi_display(unsigned char *buf, } -int ast_adsi_input_control(unsigned char *buf, int page, int line, int display, int format, int just) +int _ast_adsi_input_control(unsigned char *buf, int page, int line, int display, int format, int just) { int bytes=0; @@ -877,7 +877,7 @@ int ast_adsi_input_control(unsigned char } -int ast_adsi_input_format(unsigned char *buf, int num, int dir, int wrap, char *format1, char *format2) +int _ast_adsi_input_format(unsigned char *buf, int num, int dir, int wrap, char *format1, char *format2) { int bytes = 0; @@ -896,7 +896,7 @@ int ast_adsi_input_format(unsigned char return bytes; } -int ast_adsi_set_keys(unsigned char *buf, unsigned char *keys) +int _ast_adsi_set_keys(unsigned char *buf, unsigned char *keys) { int bytes=0; int x; @@ -911,7 +911,7 @@ int ast_adsi_set_keys(unsigned char *buf return bytes; } -int ast_adsi_set_line(unsigned char *buf, int page, int line) +int _ast_adsi_set_line(unsigned char *buf, int page, int line) { int bytes=0; @@ -942,7 +942,7 @@ int ast_adsi_set_line(unsigned char *buf static int total = 0; static int speeds = 0; -int ast_adsi_channel_restore(struct ast_channel *chan) +int _ast_adsi_channel_restore(struct ast_channel *chan) { unsigned char dsp[256]; int bytes; @@ -969,7 +969,7 @@ int ast_adsi_channel_restore(struct ast_ } -int ast_adsi_print(struct ast_channel *chan, char **lines, int *aligns, int voice) +int _ast_adsi_print(struct ast_channel *chan, char **lines, int *aligns, int voice) { unsigned char buf[4096]; int bytes=0; @@ -989,7 +989,7 @@ int ast_adsi_print(struct ast_channel *c return res; } -int ast_adsi_load_session(struct ast_channel *chan, unsigned char *app, int ver, int data) +int _ast_adsi_load_session(struct ast_channel *chan, unsigned char *app, int ver, int data) { unsigned char dsp[256]; int bytes; @@ -1033,7 +1033,7 @@ int ast_adsi_load_session(struct ast_cha } -int ast_adsi_unload_session(struct ast_channel *chan) +int _ast_adsi_unload_session(struct ast_channel *chan) { unsigned char dsp[256]; int bytes; @@ -1135,6 +1135,36 @@ static int reload(void) static int load_module(void) { adsi_load(); + + ast_adsi_begin_download = _ast_adsi_begin_download; + ast_adsi_end_download = _ast_adsi_end_download; + ast_adsi_channel_restore = _ast_adsi_channel_restore; + ast_adsi_print = _ast_adsi_print; + ast_adsi_load_session = _ast_adsi_load_session; + ast_adsi_unload_session = _ast_adsi_unload_session; + ast_adsi_transmit_message = _ast_adsi_transmit_message; + ast_adsi_transmit_message_full = _ast_adsi_transmit_message_full; + ast_adsi_read_encoded_dtmf = _ast_adsi_read_encoded_dtmf; + ast_adsi_connect_session = _ast_adsi_connect_session; + ast_adsi_query_cpeid = _ast_adsi_query_cpeid; + ast_adsi_query_cpeinfo = _ast_adsi_query_cpeinfo; + ast_adsi_get_cpeid = _ast_adsi_get_cpeid; + ast_adsi_get_cpeinfo = _ast_adsi_get_cpeinfo; + ast_adsi_download_connect = _ast_adsi_download_connect; + ast_adsi_disconnect_session = _ast_adsi_disconnect_session; + ast_adsi_download_disconnect = _ast_adsi_download_disconnect; + ast_adsi_data_mode = _ast_adsi_data_mode; + ast_adsi_clear_soft_keys = _ast_adsi_clear_soft_keys; + ast_adsi_clear_screen = _ast_adsi_clear_screen; + ast_adsi_voice_mode = _ast_adsi_voice_mode; + ast_adsi_available = _ast_adsi_available; + ast_adsi_display = _ast_adsi_display; + ast_adsi_set_line = _ast_adsi_set_line; + ast_adsi_load_soft_key = _ast_adsi_load_soft_key; + ast_adsi_set_keys = _ast_adsi_set_keys; + ast_adsi_input_control = _ast_adsi_input_control; + ast_adsi_input_format = _ast_adsi_input_format; + return 0; }