[Serusers] Notify in the pa module

Klaus Darilion klaus.mailinglists at pernau.at
Tue Jun 21 15:21:24 CEST 2005


Maybe a problem of incompatibel xml-tags?

The PUBLISH is of type application/pidf+xml (which client?).

The NOTIFY uses type application/xpidf+xml.

Maybe the pa module does not handle <im:im>busy</im:im> correct. I 
suggest take a look at the code.

regards,
klaus


Jesús M. Movilla wrote:
> Hi to all,
> 
> I finally got to make my pa module SER to work but I found  a strange
> behaviour with METHOD Notify :(maybe this is just the way it works :-)).
> 
> When I tried to change my presence state from connected to busy, SER
> notifies to which is suscribed but instead of sending a busy status, it send
> a OPEN status. In fact any change on status presence is notified as OPEN.
> Whe the user is disconnected then SER notifies with CLOSED. Does the pa
> module workds like this?, if not, how cani configure my SER to make it send
> the right state presence?.
> 
> Publish:
> 
> PUBLISH sip:jesus at guadalmar.hi.inet SIP/2.0
> Via: SIP/2.0/TCP
> 10.95.25.230:5060;branch=z9hG4bK-a372ca3c-b6bb-4933-9653-99c0a12cd4e9.1;rpor
> t
> To: <sip:jesus at guadalmar.hi.inet>
> From: "Jesus Movilla"
> <sip:jesus at guadalmar.hi.inet>;tag=1fa5881c-8205-46c9-886f-65c93269c876
> Call-ID: b5155dd8-6426-46a3-a1c8-c0d0402d53e8
> CSeq: 1 PUBLISH
> Max-Forwards: 70
> Expires: 3600
> Event: presence
> Content-Type: application/pidf+xml
> 
> <?xml version="1.0" encoding="UTF-8"?>
>    <presence xmlns="urn:ietf:params:xml:ns:pidf"
>         xmlns:im="urn:ietf:params:xml:ns:pidf:im"
>         xmlns:myex="http://id.example.com/presence/"
>         entity="pres:jesus at guadalmar.hi.inet">
>      <tuple id="bs35r9">
>        <status>
>          <basic>open</basic>
>          <im:im>busy</im:im>
>          <myex:location>home</myex:location>
>        </status>
>        <contact priority="0.8">im:someone at mobilecarrier.net</contact>
>        <note xml:lang="en">Don't Disturb Please!</note>
>        <note xml:lang="fr">Ne derangez pas, s'il vous plait</note>
>        <timestamp>2001-10-27T16:49:29Z</timestamp>
>      </tuple>
>     </presence>
> 
> This is the notification that I recieve (from myself ;-)).
> 
> 
> ---- Receiving -----
> NOTIFY sip:10.95.25.230:5060;transport=UDP SIP/2.0
> Via: SIP/2.0/UDP 10.95.9.205;branch=z9hG4bK5787.84649d21.0
> To: "Jesus Movilla"
> <sip:jesus at guadalmar.hi.inet>;tag=06d1960d-88fe-4030-a562-aff7b921a76c
> From:
> <sip:jesus at guadalmar.hi.inet>;tag=a6a1c5f60faecf035a1ae5b6e96e979a-0b47
> CSeq: 3 NOTIFY
> Call-ID: 4ee63060-a7a6-41b9-9b8e-057bb318f00c
> Content-Length: 330
> User-Agent: Sip EXpress router(0.10.99+cvs20050519 (i386/linux))
> Event: presence
> Content-Type: application/xpidf+xml
> Subscription-State: active;expires=3468
> 
> <?xml version="1.0"?>
> <!DOCTYPE presence PUBLIC "//IETF//DTD RFCxxxx XPIDF 1.0//EN" "xpidf.dtd">
> <presence>
> <presentity uri="sip:jesus at guadalmar.hi.inet;method=SUBSCRIBE"/>
> <atom id="9r28r49">
> <address uri="sip:jesus at guadalmar.hi.inet;user=ip" priority="0,800000">
> <status status="open"/>
> </address>
> </atom>
> </presence>
> 
> Ths status would be CLOSED if the presentity is not connected.
> 
> 
> 
> I also include the ser.cfg that I am using. The ser version is cvs
> "ser_0.10.99+cvs20050519"
> 
> By the way, anyone who wants to implement pa module in SER could take this
> ser.cfg as example ;-))
> 
> Thanks in advance.
> 
>             Jesús
> 
> 
> *****************************************************
> 
> #
> # $Id: ser.cfg,v 1.27 2005/03/10 14:16:25 andrei Exp $
> #
> # simple quick-start config script
> #
> 
> # ----------- global configuration parameters ------------------------
> 
> debug=3         # debug level (cmd line: -dddddddddd)
> #fork=yes
> #log_stderror=no # (cmd line: -E)
> #memlog=5 # memory debug log level
> #log_facility=LOG_LOCAL0 # sets the facility used for logging (see
> syslog(3))
> 
> /* Uncomment these lines to enter debugging mode */
> fork=yes
> log_stderror=yes
> 
> 
> check_via=no # (cmd. line: -v)
> dns=no           # (cmd. line: -r)
> rev_dns=no      # (cmd. line: -R)
> #port=5060
> #children=4
> fifo="/tmp/ser_fifo"
> #user=ser
> #group=ser
> #fifo_user=ser # owner of the ser fifo
> #fifo_group=ser
> #fifo_mode=0660 # fifo's permissions
> fifo_db_url="mysql://ser:heslo@localhost/ser"
> #disable_core=yes #disables core dumping
> #open_fd_limit=1024 # sets the open file descriptors limit
> #mhomed=yes  # usefull for multihomed hosts, small performance penalty
> #disable_tcp=yes
> #tcp_accept_aliases=yes # accepts the tcp alias via option (see NEWS)
> 
> #Connection 'mysql://ser:heslo@localhost/ser' not found in pool
> # ------------------ module loading ----------------------------------
> 
> # Uncomment this if you want to use SQL database
> loadmodule "/usr/local/lib/ser/modules/mysql.so"
> 
> loadmodule "/usr/local/lib/ser/modules/sl.so"
> loadmodule "/usr/local/lib/ser/modules/tm.so"
> loadmodule "/usr/local/lib/ser/modules/rr.so"
> loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
> loadmodule "/usr/local/lib/ser/modules/usrloc.so"
> loadmodule "/usr/local/lib/ser/modules/registrar.so"
> loadmodule "/usr/local/lib/ser/modules/textops.so"
> loadmodule "/usr/local/lib/ser/modules/pa.so"
> 
> # Uncomment this if you want digest authentication
> # mysql.so must be loaded !
> loadmodule "/usr/local/lib/ser/modules/auth.so"
> #loadmodule "/usr/local/lib/ser/modules/auth_db.so"
> 
> # ----------------- setting module-specific parameters ---------------
> 
> # -- usrloc params --
> 
> #modparam("usrloc", "db_mode",   0)
> 
> # Uncomment this if you want to use SQL database
> # for persistent storage and comment the previous line
> modparam("usrloc", "db_mode", 2)
> modparam("usrloc", "db_url", "mysql://ser:heslo@localhost/ser")
> 
> # -- auth params --
> # Uncomment if you are using auth module
> #
> #modparam("auth_db", "calculate_ha1", yes)
> #
> # If you set "calculate_ha1" parameter to yes (which true in this config),
> # uncomment also the following parameter)
> #
> #modparam("auth_db", "password_column", "password")
> #aumodparam("auth_db", "db_url", "mysql://ser:heslo@localhost/ser")
> 
> # -- rr params --
> # add value to ;lr param to make some broken UAs happy
> modparam("rr", "enable_full_lr", 1)
> 
> # --pa -- params
> modparam("pa", "db_url", "mysql://ser:heslo@localhost/ser")
> # -------------------------  request routing logic -------------------
> 
> # main routing logic
> 
> route{
> 
>  # initial sanity checks -- messages with
>  # max_forwards==0, or excessively long requests
>  if (!mf_process_maxfwd_header("10")) {
>   sl_send_reply("483","Too Many Hops");
>   break;
>  };
>  if (msg:len >=  max_len ) {
>   sl_send_reply("513", "Message too big");
>   break;
>  };
> 
>  # we record-route all messages -- to make sure that
>  # subsequent messages will go through our proxy; that's
>  # particularly good if upstream and downstream entities
>  # use different transport protocol
>  if (!method=="REGISTER") record_route();
> 
>  # subsequent messages withing a dialog should take the
>  # path determined by record-routing
>  if (loose_route()) {
>   # mark routing logic in request
>   append_hf("P-hint: rr-enforced\r\n");
>   route(1);
>   break;
>  };
> 
>  #if (!uri==myself) {
>  if (!uri=~"hi.inet") {
>   # mark routing logic in request
>   append_hf("P-hint: outbound\r\n");
>   route(1);
>   break;
>  };
> 
>  # if the request is for other domain use UsrLoc
>  # (in case, it does not work, use the following command
>  # with proper names and addresses in it)
>  if (uri=~"hi.inet") {
> 
>   if (method=="REGISTER") {
> 
> # Uncomment this if you want to use digest authentication
>    #if (!www_authorize("hi.inet", "subscriber")) {
>    # www_challenge("hi.inet", "0");
>    # break;
>    #};
> 
>    save("location");
>    break;
>   };
> 
>   if (method=="SUBSCRIBE") {
> 
>    log(1,"Subscribe\n");
>    if (t_newtran()) {
>     log(1,"Register\n");
>     handle_subscription("registrar");
>    };
>    break;
>   };
> 
> 
>   if (method=="PUBLISH") {
> 
>    log(1,"Publish\n");
>    if (!t_newtran()) {
>     log(1,"newtran error\n");
>     sl_reply_error();
>    };
>    handle_publish("registrar");
>    log(1,"publish handled\n");
>    break;
>   };
> 
>   lookup("aliases");
>   #if (!uri==myself) {
>   if (!uri=~"hi.inet") {
>    append_hf("P-hint: outbound alias\r\n");
>    route(1);
>    break;
>   };
> 
>   # native SIP destinations are handled using our USRLOC DB
>   if (!lookup("location")) {
>    sl_send_reply("404", "Not Found");
>    break;
>   };
>  };
>  append_hf("P-hint: usrloc applied\r\n");
>  route(1);
> }
> 
> route[1]
> {
>  # send it out now; use stateful forwarding as it works reliably
>  # even for UDP2TCP
>  if (!t_relay()) {
>   sl_reply_error();
>  };
> }
> 
> _______________________________________________
> Serusers mailing list
> serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
> 
> 




More information about the sr-users mailing list