> But the name of the header changes for each transaction/dialog?
Yes, that's intended - I do not want to store AVPs in
a contact-specific way (otherwise, if I use i:11 from
Bogdan's example, the script overwrites previous values
on a second call from the same terminal, nonregarding
that the first call might not yet be closed) but in a
call-specific manner, i.e. the attribute name (string)
identifies the call-id that the value stored in the AVP
belongs to.
Like stated in a previous answer - it's about creating
a P-Charging-Vector according to RFC 3455 in the core
and inserting it into all forward and reply messages.
The AVP name should be created and last exactly for the
duration of a SIP transaction. The timestamp is required
to guarantee the uniqueness of the value (must not be
re-used for a duration of at least one month).
A distinct AVP name is required for any call (identified
by a distinct call id).
--Joachim
> Joachim Fabini wrote:
> >>Not sure if I understand the problem correctly. Does the
> name of the
> >>header change?
> >
> >
> > No, it does not change during the lifetime of the AVP.
> > The name is set to the call-id and stays constant as
> > long as the AVP exists.
> > The problem is imho the content of pseudo-variables
> > can not be used as the names of AVPs.
> >
> > --Joachim
> >
> >
> >># AVP 101 with alias
> >>modparam("avpops","avp_aliases","myheaderavp=I:101");
> >>
> >>avp_printf("$myheaderavp", "$hdr(call-id)-$Ts");
> >>avp_pushto("$Myheader","$myheaderavp");
> >>
> >>klaus
> >>
> >>Joachim Fabini wrote:
> >>
> >>>Hi,
> >>>
> >>>Is there a way or workaround to generate AVPs with header
> >>>values as AVP name? It seems to me that the current AVP
> >>>concept defines the AVPs at OpenSER startup, so
> >>>header-value-based names are not feasible.
> >>>
> >>>What I need is the following: Store/retrieve a (key,value)
> >>>pair where the key is the current message's call-id and
> >>>the value some combination of header values and pseudo-
> >>>variables.
> >>>
> >>>e.g. use the ops
> >>>avp_printf("$hdr(call-id)", "$hdr(call-id)-$Ts");
> >>>avp_pushto("$Myheader","$hdr(call-id)");
> >>>
> >>>in order to append the following header to the SIP message:
> >>>Myheader: 23459(a)10.0.0.1-4235627623
> >>>
> >>>Any idea how to do this in OpenSER?
> >>>
> >>>thanks in advance
> >>>--Joachim
> >>>
> >>>
> >>>_______________________________________________
> >>>Users mailing list
> >>>Users(a)openser.org
> >>>http://openser.org/cgi-bin/mailman/listinfo/users
> >>>
> >>>
> >>
> >
> >
>
HI HO!
Correct me if I'm wrong, but it seems you trying to use the AVPops to capture a time stamp of the very first INVITE of a transaction? To get this same information, I've used the acc module.
For billing and user call logging purposes, I needed this info and have used:
acc_db_request("CallStart", "acc");
in openser.cfg.
This logs a record to the acc table containing the sip_callid, timestamps, and in "sip_status" is the string "CallStart". I then had various scripts parse acc to the format I needed for the end user.
Hope this helps,
jj
------------------------------
Message: 7
Date: Thu, 15 Dec 2005 13:09:20 +0100
From: Klaus Darilion <klaus.mailinglists(a)pernau.at>
Subject: Re: [Users] AVPops question
To: Joachim Fabini <Joachim.Fabini(a)tuwien.ac.at>
Cc: 'Joachim Fabini' <joachim.fabini(a)gmx.net>, users(a)openser.org
Message-ID: <43A15CF0.3070206(a)pernau.at>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
But the name of the header changes for each transaction/dialog?
klaus
Joachim Fabini wrote:
>>Not sure if I understand the problem correctly. Does the name of the
>>header change?
>
>
> No, it does not change during the lifetime of the AVP.
> The name is set to the call-id and stays constant as
> long as the AVP exists.
> The problem is imho the content of pseudo-variables
> can not be used as the names of AVPs.
>
> --Joachim
>
>
>># AVP 101 with alias
>>modparam("avpops","avp_aliases","myheaderavp=I:101");
>>
>>avp_printf("$myheaderavp", "$hdr(call-id)-$Ts");
>>avp_pushto("$Myheader","$myheaderavp");
>>
>>klaus
>>
>>Joachim Fabini wrote:
>>
>>>Hi,
>>>
>>>Is there a way or workaround to generate AVPs with header
>>>values as AVP name? It seems to me that the current AVP
>>>concept defines the AVPs at OpenSER startup, so
>>>header-value-based names are not feasible.
>>>
>>>What I need is the following: Store/retrieve a (key,value)
>>>pair where the key is the current message's call-id and
>>>the value some combination of header values and pseudo-
>>>variables.
>>>
>>>e.g. use the ops
>>>avp_printf("$hdr(call-id)", "$hdr(call-id)-$Ts");
>>>avp_pushto("$Myheader","$hdr(call-id)");
>>>
>>>in order to append the following header to the SIP message:
>>>Myheader: 23459(a)10.0.0.1-4235627623
>>>
>>>Any idea how to do this in OpenSER?
>>>
>>>thanks in advance
>>>--Joachim
>>>
>>>
>>>_______________________________________________
>>>Users mailing list
>>>Users(a)openser.org
>>>http://openser.org/cgi-bin/mailman/listinfo/users
>>>
>>>
>>
>
>
Hello,
Im configuring Openser with LCR module and Im having an extrange
behavior, I have 2 gateways, GW1(preference1) and GW2(preference2),
GW1(pref.1)
/ \
ClientA --> OpenSer --> Client B
\ GW2 (pref.2) /
When I call from Client A to Client B using GW1, all works fine, its the
same when hang up Client B or Client A, but when GW1 fail(I provoke it
changing codec) and use failure route (GW 2) then if Client A hang up all
works fine, but the problem is when is Client B who hang up, its like a new
conversation, GW 2 send BYE to openser and Openser just send "503 Service
Not avilable - No gateways" to GW2, but doesnt send nothing to ClientA, any
idea ????
Thx in advance
this is my basic configuration( I have attached full config file):
route{
if (!method=="REGISTER") {
record_route();
};
if (loose_route()) {
append_hf("P-hint: rr-enforced\r\n");
route(1);
};
if (!uri==myself) {
append_hf("P-hint: outbound\r\n");
route(1);
};
if (uri==myself) {
if (method=="REGISTER") {
save("location");
exit;
};
if (method=="INVITE") {
if (!lookup("location")) {
if (!load_gws()) {
sl_send_reply("500", "Server Internal Error
- Cannot load gateways");
return;
};
};
if (!next_gw()) {
sl_send_reply("503", "Service not available - No gateways");
return;
};
};
};
};
t_on_failure("1");
route(1);
}
route[1] {
if (!t_relay()) {
sl_send_reply("666","t_relay fallido");
return;
};
exit;
}
failure_route[1] {
if (!next_gw()) {
t_reply("503", "Service not available - No gateways 1");
return;
};
if (!t_relay()) {
t_reply("666","t_relay fallido");
return;
};
}
Is there any useful information ANYWHERE about avp's? I mean, don't take this the wrong way, but I've never had so much trouble interpreting/finding documentation on a subject. I can't even find out how to print the value of an avp with xlog. Is this ACTUALLY DOCUMENTED anywhere? I finally found an example somewhere from a newsgroup posting and used:
xlog ("L_INFO","$avp($foo)");
but openser complains with:
Dec 15 13:21:01 bil-pdev-3 openser[24718]: ERROR:xl_parse_name: unknow avp alias"foo"
Dec 15 13:21:01 bil-pdev-3 openser[24718]: XLOG:xdbg_fixup: ERROR: wrong format[$avp($foo)]!
-----Original Message-----
From: Bogdan-Andrei Iancu [mailto:bogdan@voice-system.ro]
Sent: Thursday, December 15, 2005 3:43 AM
To: Douglas Garstang
Cc: users(a)openser.org
Subject: Re: [Users] Variables
Hi Doug,
use avp_printf() or avp_subst() to process the content of an avp - this
function covers the assigning operation.
regards,
bogdan
Douglas Garstang wrote:
>All,
>
>I can't find any documentation of OpenSER use of variables. I'm sending a lot of info to syslog with xlog(), and with multiple threads (processes?) and multiple calls running, all the output is out of sequence. As a result, I'd like to prefix the debug output with the call-id. The call-id however is very long and I'd like to cut it down and only display a portion of it.
>
>How can I extract a string from a SIP message, cut it up, extract the portion I want, and print that portion? OpenSER doesn't seem to have any concept of assigning variables by:
>
>variable = value
>
>Thanks,
>Doug.
>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Users mailing list
>Users(a)openser.org
>http://openser.org/cgi-bin/mailman/listinfo/users
>
>
Klaus,
All calls are going through OpenSER from the phones. However, they don't go BACK to OpenSER. Asterisk terminates the call. Putting all calls BACK through OpenSER would be a nightmare. It would make a lot of Asterisk features such as ACD Queues, MeetMe Conferencing etc very hard to manage. I'm not even sure if they would work.
Doug.
-----Original Message-----
From: Klaus Darilion [mailto:klaus.mailinglists@pernau.at]
Sent: Thursday, December 15, 2005 8:23 AM
To: Douglas Garstang
Cc: users(a)openser.org
Subject: Re: [Users] Transaction already in Process
I can't explain it, but I do not like the idea replicating with failure
routes ...
IMO it would be better to modify t_replicate to allow to replicate to
moultiple instances.
Would i be possible to route all calls via openser? Then you do not need
the location info in the Asterisks.
regards
klaus
Douglas Garstang wrote:
> Klaus,
>
> Asterisk can't use a database for location/contact information. It also has no native means to transfer registrations between itself and another Asterisk system. It can't even perform a user defined action when a phone registers... doesn't leave us with many options. Right now, using OpenSER to replicate (forward,t_relay,t_replicate whatever) seems to be working ok. Do you have any reason to believe it wouldn't scale up well?
>
> Doug.
>
> -----Original Message-----
> From: Klaus Darilion [mailto:klaus.mailinglists@pernau.at]
> Sent: Thursday, December 15, 2005 3:23 AM
> To: Douglas Garstang
> Cc: users(a)openser.org
> Subject: Re: [Users] Transaction already in Process
>
>
> Hi Douglas!
>
> I still think it is a bad idea to replicate REGISTER to Asterisk 4
> times. Where does Asterisk store the location table? In a database? Why
> not replicate the location data on DB level?
>
> regards
> klaus
>
> Douglas Garstang wrote:
>
>>Arrgh!
>>
>>Now I'm getting "t_newtran: transaction already in process" messages whenever I try to call t_relay() or t_replicate twice, even when the first attempt has FAILED. In the case of t_relay() I have new addresses in the destination set and I still get this error. Why? When you attempt to deliver, and it fails, how can to attempt again without getting those messages? What fundamental piece am I missing?
>>
>>How could I do this? Forget the fancy stuff. I don't care about checking for failure anymore.
>>
>>t_replicate("192.168.10.7","5060");
>>t_replicate("192.168.10.8","5060");
>>t_replicate("192.168.10.200","5060");
>>
>>Doug.
>>
>>_______________________________________________
>>Users mailing list
>>Users(a)openser.org
>>http://openser.org/cgi-bin/mailman/listinfo/users
>>
>>
>
>
>
So... using an example I found, if I have something like this...
avp_printf("i:20", "This is a $rm request with the call-id $hdr(call-id)");
how do I print the value "i:20"? or whatever the heck that means....?
-----Original Message-----
From: Bogdan-Andrei Iancu [mailto:bogdan@voice-system.ro]
Sent: Thursday, December 15, 2005 3:43 AM
To: Douglas Garstang
Cc: users(a)openser.org
Subject: Re: [Users] Variables
Hi Doug,
use avp_printf() or avp_subst() to process the content of an avp - this
function covers the assigning operation.
regards,
bogdan
Douglas Garstang wrote:
>All,
>
>I can't find any documentation of OpenSER use of variables. I'm sending a lot of info to syslog with xlog(), and with multiple threads (processes?) and multiple calls running, all the output is out of sequence. As a result, I'd like to prefix the debug output with the call-id. The call-id however is very long and I'd like to cut it down and only display a portion of it.
>
>How can I extract a string from a SIP message, cut it up, extract the portion I want, and print that portion? OpenSER doesn't seem to have any concept of assigning variables by:
>
>variable = value
>
>Thanks,
>Doug.
>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Users mailing list
>Users(a)openser.org
>http://openser.org/cgi-bin/mailman/listinfo/users
>
>
Sorry, dont know why but the text is missing, here we go again:
Hello,
Im configuring Openser with LCR module and Im having an extrange
behavior, I have 2 gateways, GW1(preference1) and GW2(preference2),
GW1(pref.1)
/ \
ClientA --> OpenSer --> Client B
\ GW2 (pref.2) /
When I call from Client A to Client B using GW1, all works fine, its the
same when hang up Client B or Client A, but when GW1 fail(I provoke it
changing codec) and use failure route (GW 2) then if Client A hang up all
works fine, but the problem is when is Client B who hang up, its like a new
conversation, GW 2 send BYE to openser and Openser just send "503 Service
Not avilable - No gateways" to GW2, but doesnt send nothing to ClientA, any
idea ????
Thx in advance
this is my basic configuration( I have attached full config file):
route{
if (!method=="REGISTER") {
record_route();
};
if (loose_route()) {
append_hf("P-hint: rr-enforced\r\n");
route(1);
};
if (!uri==myself) {
append_hf("P-hint: outbound\r\n");
route(1);
};
if (uri==myself) {
if (method=="REGISTER") {
save("location");
exit;
};
if (method=="INVITE") {
if (!lookup("location")) {
if (!load_gws()) {
sl_send_reply("500", "Server Internal Error
- Cannot load gateways");
return;
};
};
if (!next_gw()) {
sl_send_reply("503", "Service not available - No gateways");
return;
};
};
};
};
t_on_failure("1");
route(1);
}
route[1] {
if (!t_relay()) {
sl_send_reply("666","t_relay fallido");
return;
};
exit;
}
failure_route[1] {
if (!next_gw()) {
t_reply("503", "Service not available - No gateways 1");
return;
};
if (!t_relay()) {
t_reply("666","t_relay fallido");
return;
};
}