dect
/
asterisk
Archived
13
0
Fork 0

Update res_fax.c to be a good xml citizen.

(closes issues #17667)
 Reported by: snuffy


git-svn-id: http://svn.digium.com/svn/asterisk/trunk@277667 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
snuffy 2010-07-17 00:03:37 +00:00
parent 4ed518d103
commit 25de8c5279
1 changed files with 137 additions and 57 deletions

View File

@ -59,34 +59,143 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/indications.h"
#include "asterisk/ast_version.h"
static const char app_receivefax[] = "ReceiveFAX";
static const char synopsis_receivefax[] = "Receive a FAX and save as a TIFF/F file.";
static const char descrip_receivefax[] = "ReceiveFAX(filename[,options]):\n"
" The ReceiveFAX() application receives a FAX as a TIFF/F file with specified filename.\n"
" The application arguments are:\n"
" 'd' - enables FAX debugging\n"
" 'f' - allow audio fallback FAX transfer on T.38 capable channels\n"
" 's' - send progress Manager events (overrides statusevents setting in res_fax.conf)\n"
"\n"
" Use the FAXOPT function to specify session arguments prior to calling ReceiveFAX()\n"
" and use FAXOPT after ReceiveFAX completes to query result status for the session.\n"
" The ReceiveFAX() is provided by res_fax, which is a FAX technology agnostic module\n"
" that utilizes FAX technology resource modules to complete a FAX transmission.\n";
/*** DOCUMENTATION
<application name="ReceiveFax" language="en_US">
<synopsis>
Receive a FAX and save as a TIFF/F file.
</synopsis>
<syntax>
<parameter name="filename" required="true" />
<parameter name="options">
<optionlist>
<option name="d">
<para>Enable FAX debugging.</para>
</option>
<option name="f">
<para>Allow audio fallback FAX transfer on T.38 capable channels.</para>
</option>
<option name="s">
<para>Send progress Manager events (overrides statusevents setting in res_fax.conf).</para>
</option>
</optionlist>
</parameter>
</syntax>
<description>
<para>This application is provided by res_fax, which is a FAX technology agnostic module
that utilizes FAX technology resource modules to complete a FAX transmission.</para>
<para>Session arguments can be set by the FAXOPT function and to check results of the ReceiveFax() application.</para>
</description>
<see-also>
<ref type="function">FAXOPT</ref>
</see-also>
</application>
<application name="SendeFax" language="en_US">
<synopsis>
Sends a specified TIFF/F file as a FAX.
</synopsis>
<syntax>
<parameter name="filename" required="true" argsep="&amp;">
<argument name="filename2" multiple="true">
<para>TIFF file to send as a FAX.</para>
</argument>
</parameter>
<parameter name="options">
<optionlist>
<option name="d">
<para>Enable FAX debugging.</para>
</option>
<option name="f">
<para>Allow audio fallback FAX transfer on T.38 capable channels.</para>
</option>
<option name="s">
<para>Send progress Manager events (overrides statusevents setting in res_fax.conf).</para>
</option>
<option name="z">
<para>Initiate a T.38 reinvite on the channel if the remote end does not.</para>
</option>
</optionlist>
</parameter>
</syntax>
<description>
<para>This application is provided by res_fax, which is a FAX technology agnostic module
that utilizes FAX technology resource modules to complete a FAX transmission.</para>
<para>Session arguments can be set by the FAXOPT function and to check results of the SendFax() application.</para>
</description>
<see-also>
<ref type="function">FAXOPT</ref>
</see-also>
</application>
<function name="FAXOPT" language="en_US">
<synopsis>
Gets/sets various pieces of information about a fax session.
</synopsis>
<syntax>
<parameter name="item" required="true">
<enumlist>
<enum name="ecm">
<para>R/W Error Correction Mode (ECM) enable with 'yes', disable with 'no'.</para>
</enum>
<enum name="error">
<para>R/O FAX transmission error code upon failure.</para>
</enum>
<enum name="filename">
<para>R/O Filename of the first file of the FAX transmission.</para>
</enum>
<enum name="filenames">
<para>R/O Filenames of all of the files in the FAX transmission (comma separated).</para>
</enum>
<enum name="headerinfo">
<para>R/W FAX header information.</para>
</enum>
<enum name="localstationid">
<para>R/W Local Station Identification.</para>
</enum>
<enum name="minrate">
<para>R/W Minimum transfer rate set before transmission.</para>
</enum>
<enum name="maxrate">
<para>R/W Maximum transfer rate set before transmission.</para>
</enum>
<enum name="modem">
<para>R/W Modem type (v17/v27/v29).</para>
</enum>
<enum name="pages">
<para>R/O Number of pages transferred.</para>
</enum>
<enum name="rate">
<para>R/O Negotiated transmission rate.</para>
</enum>
<enum name="remotestationid">
<para>R/O Remote Station Identification after transmission.</para>
</enum>
<enum name="resolution">
<para>R/O Negotiated image resolution after transmission.</para>
</enum>
<enum name="sessionid">
<para>R/O Session ID of the FAX transmission.</para>
</enum>
<enum name="status">
<para>R/O Result Status of the FAX transmission.</para>
</enum>
<enum name="statusstr">
<para>R/O Verbose Result Status of the FAX transmission.</para>
</enum>
</enumlist>
</parameter>
</syntax>
<description>
<para>FAXOPT can be used to override the settings for a FAX session listed in <filename>res_fax.conf</filename>,
it can also be used to retreive information about a FAX session that has finished eg. pages/status.</para>
</description>
<see-also>
<ref type="application">ReceiveFax</ref>
<ref type="application">SendFax</ref>
</see-also>
</function>
***/
static const char app_receivefax[] = "ReceiveFAX";
static const char app_sendfax[] = "SendFAX";
static const char synopsis_sendfax[] = "Sends a specified TIFF/F file as a FAX.";
static const char descrip_sendfax[] = "SendFAX(filename[&filename[&filename]][,options]):\n"
" The SendFAX() application sends the specified TIFF/F file(s) as a FAX.\n"
" The application arguments are:\n"
" 'd' - enables FAX debugging\n"
" 'f' - allow audio fallback FAX transfer on T.38 capable channels\n"
" 'z' - initiate a T.38 reinvite on the channel if the remote end does not\n"
" 's' - send progress Manager events (overrides statusevents setting in res_fax.conf)\n"
"\n"
" Use the FAXOPT function to specify session arguments prior to calling SendFAX()\n"
" and use FAXOPT after SendFAX completes to query result status for the session.\n"
" The SendFAX() application is provided by res_fax, which is a FAX technology agnostic module\n"
" that utilizes FAX technology resource modules to complete a FAX transmission.\n";
struct debug_info_history {
unsigned int consec_frames;
@ -2302,35 +2411,6 @@ static int acf_faxopt_write(struct ast_channel *chan, const char *cmd, char *dat
/*! \brief FAXOPT dialplan function */
struct ast_custom_function acf_faxopt = {
.name = "FAXOPT",
.synopsis = "Set options for use with the SendFAX and ReceiveFAX functions, or read options after a FAX transmission completes",
.syntax =
"FAXOPT(<option>)\n"
" To write an option:\n"
" exten => blah,n,Set(FAXOPT(minrate)=4800)\n"
" To read an option:\n"
" exten => blah,n,NoOp(result: ${FAXOPT(status)})",
.desc =
"The following table outlines the <options> that can be used with FAXOPT\n\n"
" OPTION TYPE DESCRIPTION\n"
" ------ ---- -----------\n"
" ecm RW Specify Error Correction Mode (ECM) with 'yes', disable with 'no'.\n"
" error RO Read the FAX transmission error upon failure.\n"
" filename RO Read the filename of the first file of the FAX transmission.\n"
" filenames RO Read the filenames of all of the files in the FAX transmission (comma separated).\n"
" headerinfo RW Specify or read the FAX header.\n"
" localstationid RW Specify or read the local station identification\n"
" maxrate RW Specify or read the maximum transfer rate before transmission\n"
" minrate RW Specify or read the minimum transfer rate before transmission\n"
" modem RW Specify or read the FAX modem\n"
" pages RO Read the number of pages transferred\n"
" rate RO Read the negotiated transmission rate\n"
" remotestationid RO Read the remote station identification after the transmission\n"
" resolution RO Read the negotiated image resolution after the transmission\n"
" sessionid RO Read the session ID of the FAX transmission\n"
" status RO Read the result status of the FAX transmission\n"
" statusstr RO Read a verbose result status of the FAX transmission\n"
"\n RO : Read Only\n RW : Read/Write\n WO : Write Only\n"
"",
.read = acf_faxopt_read,
.write = acf_faxopt_write,
};
@ -2379,12 +2459,12 @@ static int load_module(void)
}
/* register CLI operations and applications */
if (ast_register_application(app_sendfax, sendfax_exec, synopsis_sendfax, descrip_sendfax) < 0) {
if (ast_register_application_xml(app_sendfax, sendfax_exec) < 0) {
ast_log(LOG_WARNING, "failed to register '%s'.\n", app_sendfax);
ao2_ref(faxregistry.container, -1);
return AST_MODULE_LOAD_DECLINE;
}
if (ast_register_application(app_receivefax, receivefax_exec, synopsis_receivefax, descrip_receivefax) < 0) {
if (ast_register_application_xml(app_receivefax, receivefax_exec) < 0) {
ast_log(LOG_WARNING, "failed to register '%s'.\n", app_receivefax);
ast_unregister_application(app_sendfax);
ao2_ref(faxregistry.container, -1);