Skip to main content.

Archive for Marzo, 2007

Detección de Fax en canales mISDN

Martes, Marzo 13th, 2007

La detección de Fax en Asterisk, es realizada de forma nativa en canales ZAP, pero para canales mISDN, esto no es así, por lo cual nos tenemos que ayudar de otras aplicaciones como puede ser NV_FaxFDetect.

NV_FaxDetect escucha si lo que nos entra por nuestro canal mISDN es un Fax (lo permite también en canales SIP y IAX) permitiéndonos además de detectar si lo que entra es un fax, detectar marcado DTMF o detección de voz.

(más…)

Parche para APP_Rxfax : Consultar estado

Miércoles, Marzo 7th, 2007

SpanDSP es una librería para el Procesamiento Digital de Señales (DSP) que necesitaremos para poder transmitir/recibir Fax a través de asterisk. Junto con SpanDSP los autores facilitan dos aplicaciones para enviar fax y recibir fax en asterisk (rx_fax y tx_fax). A pesar de que puedes encontrar buenos manuales para hacerlas funcionar no siempre consigues los resultados esperados.

Y es que si consultamos la ayuda de txFax:

----------------------------------------
TxFAX(filename[|caller][|debug]): Send a given TIFF file to the channel as a FAX.
The “caller” option makes the application behave as a calling machine,
rather than the answering machine. The default behaviour is to behave as
an answering machine.
Uses LOCALSTATIONID to identify itself to the remote end.
LOCALHEADERINFO to generate a header line on each page.
Sets REMOTESTATIONID to the receiver CSID.
Returns -1 when the user hangs up, or if the file does not exist.
Returns 0 otherwise.
—————————————-
El retorno (0 y -1) es una practica común en el desarrollo de aplicaciones para c, pero no así en asterisk, donde es mas común devolver algún valor en una variable o saltar a una prioridad +101.

Por lo que se hace muy difícil consultar el estado del envío, si se ha enviado con éxito o no, ya que la manera de actuar de esta aplicación es la siguiente:

  • Si el fax llega bien entonces se continúa con el dialplan, pero no hay NINGUNA variable para advertir ese resultado.
  • Si el fax llega mal entonces se pasa directamente a la extensión Hangup del contexto, igualmente sin dejar un resultado en una variable.

Aplicando la siguiente linea a la aplicación se consigue modificar el comportamiento de esta:


static void phase_e_handler(t30_state_t *s, void *user_data, int result)
{
struct ast_channel *chan;
char far_ident[21]; chan = (struct ast_channel *) user_data;
if (result == T30_ERR_OK)
{
t30_get_far_ident(s, far_ident);
pbx_builtin_setvar_helper(chan, “REMOTESTATIONID”, far_ident); /******************* LINEA PARA MODIFICAR ******************************/
pbx_builtin_setvar_helper(chan, “RESULTADO”, “ENVIADO”); }
else
{
ast_log(LOG_DEBUG, “==============================================================================n”);
ast_log(LOG_DEBUG, “Fax send not successful - result (%d) %s.n”,result,t30_completion_code_to_str(result));
ast_log(LOG_DEBUG, “==============================================================================n”); /******************* LINEA PARA MODIFICAR ******************************/
pbx_builtin_setvar_helper(chan, “RESULTADO”, “ERROR”);
}
}
/*- End of function ——————————————————–*/

Gracias a esa función se puede dar un valor a una variable de canal, y como ocurre cuando el resultado es correcto se continúa con el dialplan.

Aqui dejamos el parche para que app_txfax devuelva una variable de estado. Su uso es muy facil:

# cd /usr/src/asterisk/apps

# patch app_txfax.c < app_txfax.patch
2005 © Irontec S.L. :: Powered by Irontec & Wordpress
[ IRONTEC S.L. - C.I.F. B-95274890 ]
[ Ctra. Basurto-Kastrexana nº70 / Enpresaldea ]
[ 48002 - Bilbao - Bizkaia ]