Sat Apr 26 2014 22:01:43

Asterisk developer's documentation


adsi.c File Reference

ADSI Support (built upon Caller*ID) More...

#include "asterisk.h"
#include "asterisk/adsi.h"
#include "asterisk/lock.h"
Include dependency graph for adsi.c:

Go to the source code of this file.

Functions

int ast_adsi_available (struct ast_channel *chan)
 Returns non-zero if Channel does or might support ADSI.
int ast_adsi_begin_download (struct ast_channel *chan, char *service, unsigned char *fdn, unsigned char *sec, int version)
int ast_adsi_channel_restore (struct ast_channel *chan)
int ast_adsi_clear_screen (unsigned char *buf)
int ast_adsi_clear_soft_keys (unsigned char *buf)
int ast_adsi_connect_session (unsigned char *buf, unsigned char *fdn, int ver)
 Connects an ADSI Display Session.
int ast_adsi_data_mode (unsigned char *buf)
 Puts CPE in data mode.
int ast_adsi_disconnect_session (unsigned char *buf)
 Disconnects a running session.
int ast_adsi_display (unsigned char *buf, int page, int line, int just, int wrap, char *col1, char *col2)
 Loads a line of info into the display.
int ast_adsi_download_connect (unsigned char *buf, char *service, unsigned char *fdn, unsigned char *sec, int ver)
 Begin an ADSI script download.
int ast_adsi_download_disconnect (unsigned char *buf)
 Disconnects (and hopefully saves) a downloaded script.
int ast_adsi_end_download (struct ast_channel *chan)
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)
int ast_adsi_input_control (unsigned char *buf, int page, int line, int display, int format, int just)
 Set input information.
int ast_adsi_input_format (unsigned char *buf, int num, int dir, int wrap, char *format1, char *format2)
 Set input format.
void ast_adsi_install_funcs (const struct adsi_funcs *funcs)
int ast_adsi_load_session (struct ast_channel *chan, unsigned char *app, int ver, int data)
 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.
int ast_adsi_load_soft_key (unsigned char *buf, int key, const char *llabel, const char *slabel, char *ret, int data)
 Creates "load soft key" parameters.
int ast_adsi_print (struct ast_channel *chan, char **lines, int *align, int voice)
 Display some stuff on the screen.
int ast_adsi_query_cpeid (unsigned char *buf)
int ast_adsi_query_cpeinfo (unsigned char *buf)
int ast_adsi_read_encoded_dtmf (struct ast_channel *chan, unsigned char *buf, int maxlen)
int ast_adsi_set_keys (unsigned char *buf, unsigned char *keys)
 Set which soft keys should be displayed.
int ast_adsi_set_line (unsigned char *buf, int page, int line)
 Sets the current line and page.
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)
int ast_adsi_unload_session (struct ast_channel *chan)
int ast_adsi_voice_mode (unsigned char *buf, int when)
 Puts CPE in voice mode.

Variables

static const int current_adsi_version = AST_ADSI_VERSION
static ast_rwlock_t func_lock = { PTHREAD_RWLOCK_INITIALIZER , NULL, 1 }
static struct adsi_funcsinstalled_funcs

Detailed Description

ADSI Support (built upon Caller*ID)

Definition in file adsi.c.


Function Documentation

int ast_adsi_available ( struct ast_channel chan)

Returns non-zero if Channel does or might support ADSI.

Parameters:
chanChannel to check

Definition at line 263 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, adsi_funcs::available, and func_lock.

Referenced by adsi_begin(), adsi_delete(), adsi_exec(), adsi_folders(), adsi_goodbye(), adsi_login(), adsi_message(), adsi_password(), adsi_status(), adsi_status2(), park_call_full(), vm_newuser(), vm_options(), and vm_tempgreeting().

int ast_adsi_begin_download ( struct ast_channel chan,
char *  service,
unsigned char *  fdn,
unsigned char *  sec,
int  version 
)
int ast_adsi_channel_restore ( 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 have to use the ast_adsi_channel_init again instead.

Parameters:
chanChannel to restore
Return values:
0on success (or adsi unavailable)
-1on hangup

Definition at line 54 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, adsi_funcs::channel_restore, and func_lock.

int ast_adsi_clear_screen ( unsigned char *  buf)
int ast_adsi_clear_soft_keys ( unsigned char *  buf)
int ast_adsi_connect_session ( unsigned char *  buf,
unsigned char *  fdn,
int  ver 
)

Connects an ADSI Display Session.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
fdnOptional 4 byte Feature Download Number (for loading soft keys)
verOptional version number (0-255, or -1 to omit)
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 131 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, adsi_funcs::connect_session, and func_lock.

int ast_adsi_data_mode ( unsigned char *  buf)

Puts CPE in data mode.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 219 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, adsi_funcs::data_mode, and func_lock.

Referenced by adsi_load_vmail().

int ast_adsi_disconnect_session ( unsigned char *  buf)

Disconnects a running session.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 197 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, adsi_funcs::disconnect_session, and func_lock.

int ast_adsi_display ( unsigned char *  buf,
int  page,
int  line,
int  just,
int  wrap,
char *  col1,
char *  col2 
)

Loads a line of info into the display.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
pagePage to load (ADSI_COMM_PAGE or ADSI_INFO_PAGE)
lineLine number to load (1-4 for Comm page, 1-33 for info page)
justLine justification (ADSI_JUST_LEFT, ADSI_JUST_RIGHT, ADSI_JUST_CENT, ADSI_JUST_IND)
wrapWrap (1 = yes, 0 = no)
col1Text to place in first column
col2Text to place in second column
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 274 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, adsi_funcs::display, and func_lock.

Referenced by adsi_folders(), adsi_goodbye(), adsi_load_vmail(), adsi_login(), adsi_logo(), adsi_message(), adsi_prog(), adsi_status(), adsi_status2(), vm_newuser(), vm_options(), and vm_tempgreeting().

{
   int res = 0;
   ast_rwlock_rdlock(&func_lock);
   if (installed_funcs && installed_funcs->display) {
      res = installed_funcs->display(buf, page, line, just, wrap, col1, col2);
   }
   ast_rwlock_unlock(&func_lock);
   return res;
}
int ast_adsi_download_connect ( unsigned char *  buf,
char *  service,
unsigned char *  fdn,
unsigned char *  sec,
int  ver 
)

Begin an ADSI script download.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
servicea 1-18 byte name of the feature
fdn4 byte Feature Download Number (for loading soft keys)
sec4 byte vendor security code
verversion number (0-255, or -1 to omit)
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 186 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, adsi_funcs::download_connect, and func_lock.

int ast_adsi_download_disconnect ( unsigned char *  buf)

Disconnects (and hopefully saves) a downloaded script.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 208 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, adsi_funcs::download_disconnect, and func_lock.

Referenced by adsi_load_vmail().

int ast_adsi_end_download ( struct ast_channel chan)
int ast_adsi_get_cpeid ( struct ast_channel chan,
unsigned char *  cpeid,
int  voice 
)

Get CPE ID from an attached ADSI compatible CPE. Returns 1 on success, storing 4 bytes of CPE ID at buf 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.

Definition at line 164 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::get_cpeid.

Referenced by cpeid_exec().

{
   int res = 0;
   ast_rwlock_rdlock(&func_lock);
   if (installed_funcs && installed_funcs->get_cpeid) {
      res = installed_funcs->get_cpeid(chan, cpeid, voice);
   }
   ast_rwlock_unlock(&func_lock);
   return res;
}
int ast_adsi_get_cpeinfo ( struct ast_channel chan,
int *  width,
int *  height,
int *  buttons,
int  voice 
)

Definition at line 175 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::get_cpeinfo.

Referenced by cpeid_exec().

{
   int res = 0;
   ast_rwlock_rdlock(&func_lock);
   if (installed_funcs && installed_funcs->get_cpeinfo) {
      res = installed_funcs->get_cpeinfo(chan, width, height, buttons, voice);
   }
   ast_rwlock_unlock(&func_lock);
   return res;
}
int ast_adsi_input_control ( unsigned char *  buf,
int  page,
int  line,
int  display,
int  format,
int  just 
)

Set input information.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
pageWhich page to input on (ADSI_COMM_PAGE or ADSI_INFO_PAGE)
lineLine number to input on
displaySet to zero to obscure input, or 1 to leave visible
formatFormat number to use (0-7)
justJustification (left, right center, indent)
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 318 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::input_control.

Referenced by adsi_login(), and adsi_password().

{
   int res = 0;
   ast_rwlock_rdlock(&func_lock);
   if (installed_funcs && installed_funcs->input_control) {
      res = installed_funcs->input_control(buf, page, line, display, format, just);
   }
   ast_rwlock_unlock(&func_lock);
   return res;
}
int ast_adsi_input_format ( unsigned char *  buf,
int  num,
int  dir,
int  wrap,
char *  format1,
char *  format2 
)

Set input format.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
numWhich format we are setting
dirWhich direction (ADSI_DIR_FROM_LEFT or ADSI_DIR_FROM_RIGHT)
wrapSet to 1 to permit line wrap, or 0 if not
format1Format for column 1
format2Format for column 2
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 329 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::input_format.

Referenced by adsi_login(), and adsi_password().

{
   int res = 0;
   ast_rwlock_rdlock(&func_lock);
   if (installed_funcs && installed_funcs->input_format) {
      res = installed_funcs->input_format(buf, num, dir, wrap, format1, format2);
   }
   ast_rwlock_unlock(&func_lock);
   return res;
}
void ast_adsi_install_funcs ( const struct adsi_funcs funcs)

Definition at line 340 of file adsi.c.

References ast_log(), ast_rwlock_unlock, ast_rwlock_wrlock, current_adsi_version, func_lock, LOG_WARNING, and adsi_funcs::version.

Referenced by load_module(), and unload_module().

{
   if (funcs && funcs->version < current_adsi_version) {
      ast_log(LOG_WARNING, "Cannot install ADSI function pointers due to version mismatch."
            "Ours: %u, Theirs: %u\n", current_adsi_version, funcs->version);
      return;
   }

   ast_rwlock_wrlock(&func_lock);
   installed_funcs = funcs;
   ast_rwlock_unlock(&func_lock);
}
int ast_adsi_load_session ( struct ast_channel chan,
unsigned char *  app,
int  ver,
int  data 
)

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.

Parameters:
chanChannel to test for loaded app
appFour character app name (must be unique to your application)
veroptional version number
dataNon-zero if you want to be put in data mode
Return values:
0if scripts is not loaded or not an ADSI CPE
-1on hangup
1if script already loaded.

Definition at line 76 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::load_session.

Referenced by adsi_announce_park(), adsi_begin(), adsi_load_vmail(), adsi_prog(), and cpeid_exec().

{
   int res = 0;
   ast_rwlock_rdlock(&func_lock);
   if (installed_funcs && installed_funcs->load_session) {
      res = installed_funcs->load_session(chan, app, ver, data);
   }
   ast_rwlock_unlock(&func_lock);
   return res;
}
int ast_adsi_load_soft_key ( unsigned char *  buf,
int  key,
const char *  llabel,
const char *  slabel,
char *  ret,
int  data 
)

Creates "load soft key" parameters.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
keyKey code from 2 to 33, for which key we are loading
llabelLong label for key (1-18 bytes)
slabelShort label for key (1-7 bytes)
retOptional return sequence (NULL for none)
datawhether to put CPE in data mode before sending digits
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 296 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::load_soft_key.

Referenced by adsi_load_vmail(), and adsi_login().

{
   int res = 0;
   ast_rwlock_rdlock(&func_lock);
   if (installed_funcs && installed_funcs->load_soft_key) {
      res = installed_funcs->load_soft_key(buf, key, llabel, slabel, ret, data);
   }
   ast_rwlock_unlock(&func_lock);
   return res;
}
int ast_adsi_print ( struct ast_channel chan,
char **  lines,
int *  align,
int  voice 
)

Display some stuff on the screen.

Parameters:
chanChannel to display on
linesNULL-terminated list of things to print (no more than 4 recommended)
alignlist of alignments to use (ADSI_JUST_LEFT, ADSI_JUST_RIGHT, ADSI_JUST_CEN, etc..)
voicewhether to jump into voice mode when finished
Return values:
0on success (or adsi unavailable)
-1on hangup

Definition at line 65 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::print.

Referenced by adsi_announce_park(), and cpeid_setstatus().

{
   int res = 0;
   ast_rwlock_rdlock(&func_lock);
   if (installed_funcs && installed_funcs->print) {
      res = installed_funcs->print(chan, lines, align, voice);
   }
   ast_rwlock_unlock(&func_lock);
   return res;
}
int ast_adsi_query_cpeid ( unsigned char *  buf)

Build Query CPE ID of equipment. Returns number of bytes added to message

Definition at line 142 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::query_cpeid.

int ast_adsi_query_cpeinfo ( unsigned char *  buf)
int ast_adsi_read_encoded_dtmf ( struct ast_channel chan,
unsigned char *  buf,
int  maxlen 
)

Read some encoded DTMF data. Returns number of bytes received

Definition at line 120 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::read_encoded_dtmf.

int ast_adsi_set_keys ( unsigned char *  buf,
unsigned char *  keys 
)

Set which soft keys should be displayed.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
keysArray of 8 unsigned chars with the key numbers, may be OR'd with ADSI_KEY_HILITE But remember, the last two keys aren't real keys, they're for scrolling
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 307 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::set_keys.

Referenced by adsi_delete(), adsi_folders(), adsi_login(), adsi_message(), adsi_password(), adsi_status(), and adsi_status2().

int ast_adsi_set_line ( unsigned char *  buf,
int  page,
int  line 
)

Sets the current line and page.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
pageWhich page (ADSI_COMM_PAGE or ADSI_INFO_PAGE)
lineLine number (1-33 for info page, 1-4 for comm page)
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 285 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::set_line.

Referenced by adsi_folders(), adsi_goodbye(), adsi_load_vmail(), adsi_login(), adsi_message(), adsi_password(), adsi_prog(), adsi_status(), adsi_status2(), vm_newuser(), vm_options(), and vm_tempgreeting().

{
   int res = 0;
   ast_rwlock_rdlock(&func_lock);
   if (installed_funcs && installed_funcs->set_line) {
      res = installed_funcs->set_line(buf, page, line);
   }
   ast_rwlock_unlock(&func_lock);
   return res;
}
int ast_adsi_transmit_message_full ( struct ast_channel chan,
unsigned char *  msg,
int  msglen,
int  msgtype,
int  dowait 
)

Definition at line 109 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::transmit_message_full.

{
   int res = 0;
   ast_rwlock_rdlock(&func_lock);
   if (installed_funcs && installed_funcs->transmit_message_full) {
      res = installed_funcs->transmit_message_full(chan, msg, msglen, msgtype, dowait);
   }
   ast_rwlock_unlock(&func_lock);
   return res;
}
int ast_adsi_voice_mode ( unsigned char *  buf,
int  when 
)

Puts CPE in voice mode.

Parameters:
bufCharacter buffer to create parameter in (must have at least 256 free)
when(a time in seconds) to make the switch
Return values:
numberof bytes added to buffer
-1on error.

Definition at line 252 of file adsi.c.

References ast_rwlock_rdlock, ast_rwlock_unlock, func_lock, and adsi_funcs::voice_mode.

Referenced by adsi_delete(), adsi_folders(), adsi_goodbye(), adsi_load_vmail(), adsi_login(), adsi_message(), adsi_password(), adsi_status(), adsi_status2(), vm_newuser(), vm_options(), and vm_tempgreeting().


Variable Documentation

const int current_adsi_version = AST_ADSI_VERSION [static]

Definition at line 29 of file adsi.c.

Referenced by ast_adsi_install_funcs().

struct adsi_funcs* installed_funcs [static]

Definition at line 28 of file adsi.c.