[OpenSER-Users] Snom number-guessing and OpenSER
Edoardo Serra
eserra at exsorsa.it
Mon Oct 8 10:25:54 CEST 2007
Tnx Klaus for your answer.
If I dump the packet from Perl I cannot see the Via header added by
OpenSER, is something wrong in my openser.cfg or perl module 'sees' the
packet before OpenSER manipulation ??
About the to-tag I'll have a look at Net::SIP if it has a way to
generate one.
regards
Edoardo
Klaus Darilion ha scritto:
> Some hints:
>
> A reply should have a to-tag.
> Openser adds a Via header during forwarding (with a generated
> branch.id). This branch.id is also used for transaction matching.
>
> regards
> klaus
>
>
> Edoardo Serra schrieb:
>> Hi all,
>> I'm trying to develop an extension to support SNOM's number
>> guessing feature (I don't know if it's somehow a standard but
>> description on how it works is here:
>> http://kb.snom.com/kb/index.php?View=entry&CategoryID=14&EntryID=14)
>>
>> As I have to do some 'complicated' db queries I was thinking to use
>> PERL module to handle number guessing request from the phone.
>>
>> I see there's no way (please correct me if I'm wrong) from OpenSER,
>> neither from OpenSER::Message, to send a stateless reply with a
>> customized body (SNOM says that possible number completion shoud be
>> included in the body of a 200 OK reply).
>>
>> For this reason I have to use Net::SIP to generate the reply packet
>> but I'm doing something wrong as OpenSER is not forwarding it back to
>> the client.
>>
>> Test client is a Snom 360 and is behind a NAT, OpenSER has a public IP
>>
>> Here is my routing logic in openser.cfg
>>
>> ------------------- BEGIN openser.cfg
>> route{
>>
>> if (!mf_process_maxfwd_header("10")) {
>> sl_send_reply("483","Too Many Hops");
>> exit;
>> };
>> if (msg:len >= 2048 ) {
>> sl_send_reply("513", "Message too big");
>> exit;
>> };
>>
>> if (nat_uac_test("19")) {
>> fix_nated_contact();
>> force_rport();
>> setbflag(6);
>> }
>>
>>
>> if (method=="PUBLISH") {
>> if ($hdr(Event)=="number-guessing") {
>> log("- Initial PUBLISH\n");
>> t_newtran();
>> t_on_reply("1");
>> perl_exec("numberguessing");
>> exit;
>> }
>> sl_send_reply("501", "Not implemented");
>> exit;
>> }
>>
>> if (method=="REGISTER") {
>> if (nat_uac_test("19")) {
>> fix_nated_contact();
>> force_rport();
>> setbflag(6);
>> }
>> save("location");
>> exit;
>> };
>>
>> exit;
>> }
>>
>> route[1] {
>> log("--------------------- Stateful Reply\n");
>> if (!t_relay()) {
>> sl_reply_error();
>> };
>> exit;
>> }
>> ------------------- END openser.cfg
>>
>> Here is my Simple Perl
>>
>>
>> ------------------- BEGIN net-sip.pl
>> use OpenSER qw ( log );
>> use OpenSER::Constants;
>> use Net::SIP;
>>
>> # Predefined body, not querying db yet
>> my $body = '"Franky Chang"
>> sip:101 at 192.168.0.1;user=phone
>> "Steven Jones" sip:102 at 192.168.0.1;user=phone
>> "Marie Sun" sip:103 at 192.168.0.1;user=phone
>> ';
>>
>>
>> sub numberguessing {
>> my $m = shift;
>> my $pkt = Net::SIP::Request->new( $m->getMessage() );
>> my $resp = $pkt->create_response(200, "OK");
>> $resp->set_body($body);
>> $resp->add_header('Content-Type','application/number-guessing');
>>
>> my $leg = Net::SIP::Leg->new(
>> addr => '111.222.333.444', port => '5061');
>>
>> $leg->deliver( $resp, '111.222.333.444:5060' );
>>
>> # 111.222.333.444 is the IP of OpenSER
>> # I'm sending from port 5061 to port 5060
>>
>> return 1;
>> }
>> ------------------- END net-sip.pl
>>
>> OpenSER in verbose debugging module says that it cannot find a
>> matching transaction for the 200 OK reply (probably because is
>> originated from port 5061 and it has never forwarded it to that port ? )
>>
>> Here is OpenSER DEBUG log:
>>
>> 0(24828) SIP Reply (status):
>> 0(24828) version: <SIP/2.0>
>> 0(24828) status: <200>
>> 0(24828) reason: <OK>
>> 0(24828) parse_headers: flags=2
>> 0(24828) get_hdr_field: cseq <cseq>: <1> <PUBLISH>
>> 0(24828) DEBUG:parse_to:end of header reached, state=10
>> 0(24828) DBUG:parse_to: display={"Edoardo"},
>> ruri={sip:eserra at 111.222.333.444}
>> 0(24828) DEBUG: get_hdr_field: <to> [43];
>> uri=[sip:eserra at 111.222.333.444]
>> 0(24828) DEBUG: to body ["Edoardo"
>> <sip:eserra at 111.222.333.444>
>> ]
>> 0(24828) Found param type 232, <branch> = <z9hG4bK-m3j054b6d8q6>;
>> state=6
>> 0(24828) Found param type 235, <rport> = <n/a>; state=17
>> 0(24828) end of header reached, state=5
>> 0(24828) parse_headers: Via found, flags=2
>> 0(24828) parse_headers: this is the first via
>> 0(24828) After parse_msg...
>> 0(24828) DEBUG:forward_reply: found module tm, passing reply to it
>> 0(24828) DEBUG: t_check: start=0xffffffff
>> 0(24828) parse_headers: flags=22
>> 0(24828) DEBUG: t_reply_matching: failure to match a transaction
>> 0(24828) DEBUG: t_check: end=(nil)
>> 0(24828) parse_headers: flags=4
>> 0(24828) DEBUG: get_hdr_body : content_length=135
>> 0(24828) found end of header
>> 0(24828) ERROR:forward_reply: no 2nd via found in reply
>> 0(24828) DEBUG:destroy_avp_list: destroying list (nil)
>> 0(24828) receive_msg: cleaning up
>>
>> Here is also the tshark dump of the 2 packets (PUBLISH and its reply)
>>
>> Request-Line: PUBLISH
>> sip:eserra at 213.92.23.108 SIP/2.0
>> Message Header
>> Via: SIP/2.0/UDP
>> 192.168.254.151:2051;branch=z9hG4bK-ma9r5n0t4jfq;rport
>> From: "Edoardo"
>> <sip:eserra at 111.222.333.444>;tag=39wlni6ex1
>> To: "Edoardo" <sip:eserra at 111.222.333.444>
>> Call-ID: 3c27c039249b-jml9w7t9sywx
>> CSeq: 1 PUBLISH
>> Max-Forwards: 70
>> Event: number-guessing
>> Content-Type: application/text
>> Content-Length: 25
>> Message body
>> Number: 10\r\n
>> Max-Hits: 3\r\n
>>
>>
>> Status-Line: SIP/2.0 200 OK
>> Message Header
>> call-id: 3c27c0daa600-emnlo1xcejtn
>> cseq: 1 PUBLISH
>> from: "Edoardo"
>> <sip:eserra at 111.222.333.444>;tag=6c1y8pp3fb
>> to: "Edoardo" <sip:eserra at 111.222.333.444>
>> via: SIP/2.0/UDP
>> 192.168.254.151:2051;branch=z9hG4bK-623oddiyzg56;rport
>> content-type: application/number-guessing
>> Content-Length: 135
>> Message body
>> "Franky Chang"
>> sip:101 at 192.168.0.1;user=phone\n
>> "Steven Jones"
>> sip:102 at 192.168.0.1;user=phone\n
>> "Marie Sun"
>> sip:103 at 192.168.0.1;user=phone\n
>>
>> Hope this info is enough for a debug :)
>>
>> Tnx in advance
>>
>> Regards
>>
>> Edoardo Serra
>> EXSORSA LLC
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at openser.org
>> http://openser.org/cgi-bin/mailman/listinfo/users
>
More information about the Users
mailing list