¿Alguna indicación?
--
Raúl Alexis Betancor Santana
Dimensión Virtual S.L.
No se si es lo que andas buscando exactamente.
Julián J. M.
Si, pero nó, es una variable de solo lectura, no se puede setear.
¿Alguna sugerencia de como setearla?
--
Saludos.
exten => _X.,1,Set(SIP_URI_OPTIONS="loquesea")
exten => _X.,2,Dial(SIP/proveedor/${EXTEN})
No lo he probado, pero viendo el código de chan_sip.c:
/* If custom URI options have been provided, append them */
if (p->options && p->options->uri_options)
ast_build_string(&invite, &invite_max, ";%s",
p->options->uri_options);
Es decir, añade a uri un punto y coma, seguido de lo que contenga la
variable SIP_URI_OPTIONS.
Julian J. M.
Yo no dije que fuera función, dije que era una variable de solo lectura
> exten => _X.,1,Set(SIP_URI_OPTIONS="loquesea")
> exten => _X.,2,Dial(SIP/proveedor/${EXTEN})
>
> No lo he probado, pero viendo el código de chan_sip.c:
Yo si lo he probado y es de solo lectura, además de estar marcada en el
AstVar.html como variable de canal de solo lectura.
>
> /* If custom URI options have been provided, append them */
> if (p->options && p->options->uri_options)
> ast_build_string(&invite, &invite_max, ";%s",
> p->options->uri_options);
>
>
> Es decir, añade a uri un punto y coma, seguido de lo que contenga la
> variable SIP_URI_OPTIONS.
Si, pero a que no encuentras la parte del código que setea la variable
¿? ;-) , es que no existe.
Las variables de solo lectura no existen. No hay nada que te impida
asignarle un valor a una variable.
>
> > exten => _X.,1,Set(SIP_URI_OPTIONS="loquesea")
> > exten => _X.,2,Dial(SIP/proveedor/${EXTEN})
> >
> > No lo he probado, pero viendo el código de chan_sip.c:
>
> Yo si lo he probado y es de solo lectura, además de estar marcada en el
> AstVar.html como variable de canal de solo lectura.
Reconozco que hay un error en el ejemplo anterior, pero no es el que
crees. La variable SIP_URI_OPTIONS no se está copiando al nuevo canal.
Y por eso no se tiene en cuenta su valor. Si le añadimos un guión bajo
(_) delante de SIP_URI_OPTIONS, la variable pasa al nuevo canal
(SIP/proveedor-3b3b3b3), y cuando hace el invite, añade su contenido
al uri. Ejemplo:
exten => 205,1,Set(_SIP_URI_OPTIONS="PRUEBA")
exten => 205,2,Dial(SIP/${EXTEN})
Reliably Transmitting (no NAT) to 10.200.0.2:41522:
INVITE sip:2...@10.200.0.2:41522;rinstance=2ffb445bc1c20491;transport=udp;PRUEBA
SIP/2.0
Via: SIP/2.0/UDP 10.200.0.1:5060;branch=z9hG4bK0769ac19
From: "device" <sip:2...@10.200.0.1>;tag=as5daf31ed
To: <sip:2...@10.200.0.2:41522;rinstance=2ffb445bc1c20491;transport=udp;PRUEBA>
Contact: <sip:2...@10.200.0.1>
[...]
> > /* If custom URI options have been provided, append them */
> > if (p->options && p->options->uri_options)
> > ast_build_string(&invite, &invite_max, ";%s",
> > p->options->uri_options);
> >
> >
> > Es decir, añade a uri un punto y coma, seguido de lo que contenga la
> > variable SIP_URI_OPTIONS.
>
> Si, pero a que no encuentras la parte del código que setea la variable
> ¿? ;-) , es que no existe.
Esa variable la asignas tú desde el dialplan. La parte en la que el
canal "lee" esa variable, está aproximadamente en la línea 2914 de
chan_sip:
} else if (!p->options->uri_options &&
!strcasecmp(ast_var_name(current), "SIP_URI_OPTIONS")) {
p->options->uri_options = ast_var_value(current);
}
Y luego, más adelante, en la función initreqprep(), es cuando utiliza
el valor de options->uri_options.
Saludos
Julián J. Menéndez
Extraido de la documentacion de AstVar:
...
Variables marked with a * are builtin functions and can't be set,
only read in the dialplan. Writes to such variables are silently
ignored.
...
${SIP_URI_OPTIONS} * additional options to add to the URI for an outgoing call
...
Con un Set(SIP_URI_OPTIONS= ...) no pasa nada.
> Reconozco que hay un error en el ejemplo anterior, pero no es el que
> crees. La variable SIP_URI_OPTIONS no se está copiando al nuevo canal.
> Y por eso no se tiene en cuenta su valor. Si le añadimos un guión bajo
> (_) delante de SIP_URI_OPTIONS, la variable pasa al nuevo canal
> (SIP/proveedor-3b3b3b3), y cuando hace el invite, añade su contenido
> al uri. Ejemplo:
> exten => 205,1,Set(_SIP_URI_OPTIONS="PRUEBA")
> exten => 205,2,Dial(SIP/${EXTEN})
Umm, no había pensado en la malicia de la herencia de variables, voy a
probarlo.
> Reliably Transmitting (no NAT) to 10.200.0.2:41522:
> INVITE
> sip:2...@10.200.0.2:41522;rinstance=2ffb445bc1c20491;transport=udp;PRUEBA
> SIP/2.0
> Via: SIP/2.0/UDP 10.200.0.1:5060;branch=z9hG4bK0769ac19
> From: "device" <sip:2...@10.200.0.1>;tag=as5daf31ed
> To:
> <sip:2...@10.200.0.2:41522;rinstance=2ffb445bc1c20491;transport=udp;PRUEBA>
> Contact: <sip:2...@10.200.0.1>
En realidad yo necesito añadir cosas al From: (from-spec)
> Esa variable la asignas tú desde el dialplan. La parte en la que el
> canal "lee" esa variable, está aproximadamente en la línea 2914 de
> chan_sip:
> } else if (!p->options->uri_options &&
> !strcasecmp(ast_var_name(current), "SIP_URI_OPTIONS")) {
> p->options->uri_options = ast_var_value(current);
> }
>
> Y luego, más adelante, en la función initreqprep(), es cuando utiliza
> el valor de options->uri_options.
Ok, volveré a probar con lo de la herencia.
--
La documentación dice una cosa, y el código otra... Seguramente en
algún momento, SIP_URI_OPTIONS fuese una función, o estuviese en
proceso de serlo.
> > Reliably Transmitting (no NAT) to 10.200.0.2:41522:
> > INVITE
> > sip:2...@10.200.0.2:41522;rinstance=2ffb445bc1c20491;transport=udp;PRUEBA
> > SIP/2.0
> > Via: SIP/2.0/UDP 10.200.0.1:5060;branch=z9hG4bK0769ac19
> > From: "device" <sip:2...@10.200.0.1>;tag=as5daf31ed
> > To:
> > <sip:2...@10.200.0.2:41522;rinstance=2ffb445bc1c20491;transport=udp;PRUEBA>
> > Contact: <sip:2...@10.200.0.1>
>
> En realidad yo necesito añadir cosas al From: (from-spec)
He revisado el código, y no hay forma de añadirle nada. Solo es
cuestión de un miniparche de 4 a 6 líneas ;)
Julián J. Menéndez
> > En realidad yo necesito añadir cosas al From: (from-spec)
>
> He revisado el código, y no hay forma de añadirle nada. Solo es
> cuestión de un miniparche de 4 a 6 líneas ;)
Si, ya he visto donde ... joder .. cada vez que tengo que leer algo del código
de chan_sip me dan mareos .. XDD
--
Saludos.
Eso sirve para "extraer" cabeceras y ponerlas en variables, dice textualmente
la documentación:
...
Bugs and limitations
Contrary to previously claimed,SIP_HEADER is read-only.
This example does "not" work!
exten => s,1,Set(SIP_HEADER(headername)=Foo Fighters)
De todas formas creo que voy a terminar pasando bastante de Asterisk para lo
que estaba montando y usaré sippy o algún otro software que actúe de b2bua y
me permita hacer "marranadas" con los paquetes.
--
Saludos.
02899 } else if (!p->options->addsipheaders &&
!strncasecmp(ast_var_name(current), "SIPADDHEADER",
strlen("SIPADDHEADER"))) {
02900 /* Check whether there is a variable with a name
starting with SIPADDHEADER */
El 27/09/07, Adrià Vidal <adria...@gmail.com> escribió:
--
Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de disketes."
----------------------------------------------------------------
http://www.saghul.net/
Julian J. M.
On 9/27/07, Saúl Ibarra <sag...@gmail.com> wrote:
> Parece que modificando el valor de la variable SIPADDHEADER puedes
> a�adir cabeceras... Te sirve?