<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <tt>Hello,</tt><tt><br>
    </tt><tt><br>
    </tt><tt>xcap does not work with subscriber table and you cannot
      download the list of subscribers. It uses xcap table from
      database, where it can store contact list or other presence
      related records/rules.</tt><tt><br>
    </tt><tt><br>
    </tt><tt>I am pasting the routing blocks related to xcap that I have
      in one of my configs (planned to be used for updating the tutorial
      online that I wrote a while ago:
      <a class="moz-txt-link-freetext" href="http://kb.asipto.com/kamailio:presence:k31-made-simple">http://kb.asipto.com/kamailio:presence:k31-made-simple</a> -- but due
      to lack of spare time, I kept postponing).<br>
      <br>
      Hope it is useful.<br>
      <br>
      Cheers,<br>
      Daniel<br>
      <br>
      <br>
      event_route[xhttp:request] {<br>
          xdbg("===== xhttp: request [$rv] $rm => $hu\n");<br>
      <br>
          set_reply_no_connect();<br>
      <br>
      <br>
          if ($Rp != 80<br>
      #!ifdef WITH_TLS<br>
                      && $Rp != 443<br>
      #!endif<br>
                  ) {<br>
              set_reply_close();<br>
              xlog("L_WARN", "HTTP request received on $Rp\n");<br>
              xhttp_reply("403", "Forbidden", "", "");<br>
              exit;<br>
          }<br>
          <br>
          if (!www_authorize("domain.com", "subscriber"))<br>
          {<br>
              www_challenge("domain.com", "0");<br>
              exit;<br>
          }<br>
          set_reply_close();<br>
      <br>
          route(XCAPSRV);<br>
      <br>
          # other http access<br>
          xhttp_reply("200", "ok", "text/html",<br>
                      "<html><body>OK:
      $si:$sp</body></html>");<br>
          exit;<br>
      }<br>
      <br>
    </tt><tt></tt><tt><br>
    </tt><tt>route[XCAPSRV] {<br>
      #!ifdef WITH_XCAPSRV<br>
          if(! ($hu=~"^/xcap-root/")) {<br>
              return;<br>
          }<br>
          # xcap ops - break down http uri to get xcap user id<br>
          route(XCAPURI);<br>
          $xcapuri(u=>data) = $var(hu);<br>
      <br>
          if($xcapuri(u=>uri)==$null) {<br>
              xlog("==== xhttp failed uri => [$hu] ~ [$var(hu)]\n");<br>
              xhttp_reply("404", "Not Found", "text/html",<br>
                      "unsupported xcap uri");<br>
              exit;<br>
          }<br>
      <br>
          if($xcapuri(u=>xuid)=~"^<a class="moz-txt-link-freetext" href="sip:.+@.+">sip:.+@.+</a>")<br>
              $var(uri) = $xcapuri(u=>xuid);<br>
          else<br>
              $var(uri) = "sip:"+ $xcapuri(u=>xuid) + "@" + $Ri;<br>
      <br>
          # handle XCAP capability request<br>
          if($xcapuri(u=>auid)=="xcap-caps") {<br>
              if ($rm == "GET") {<br>
                  $var(xbody) =<br>
      "<?xml version='1.0' encoding='UTF-8'?><br>
      <xcap-caps xmlns='urn:ietf:params:xml:ns:xcap-caps'><br>
        <auids><br>
      " +<br>
      #!ifdef WITH_RLS<br>
      "    <auid>rls-services</auid><br>
      " +<br>
      #!endif<br>
      "    <auid>pidf-manipulation</auid><br>
          <auid>xcap-caps</auid><br>
          <auid>resource-lists</auid><br>
          <auid>pres-rules</auid><br>
          <auid>org.openmobilealliance.pres-rules</auid><br>
          <auid>org.openmobilealliance.user-profile</auid><br>
          <auid>org.openmobilealliance.pres-content</auid><br>
          <auid>org.openmobilealliance.search</auid><br>
          <auid>org.openmobilealliance.xcap-directory</auid><br>
        </auids><br>
        <extensions><br>
        </extensions><br>
        <namespaces><br>
      " +<br>
      #!ifdef WITH_RLS<br>
      "   
      <namespace>urn:ietf:params:xml:ns:rls-services</namespace><br>
      " +<br>
      #!endif<br>
      "   
      <namespace>urn:ietf:params:xml:ns:pidf</namespace><br>
         
      <namespace>urn:ietf:params:xml:ns:xcap-caps</namespace><br>
         
      <namespace>urn:ietf:params:xml:ns:resource-lists</namespace><br>
         
      <namespace>urn:ietf:params:xml:ns:pres-rules</namespace><br>
         
      <namespace>urn:oma:xml:xdm:user-profile</namespace><br>
         
      <namespace>urn:oma:xml:prs:pres-content</namespace><br>
          <namespace>urn:oma:xml:xdm:search</namespace><br>
         
      <namespace>urn:oma:xml:xdm:xcap-directory</namespace><br>
        </namespaces><br>
      </xcap-caps>";<br>
                  xhttp_reply("200", "ok", "application/xcap-caps+xml",<br>
                                  "$var(xbody)");<br>
              } else {<br>
                  append_to_reply("Allow: GET\r\n");<br>
                  xhttp_reply("405", "Method Not Allowed", "", "");<br>
              }<br>
              exit;<br>
          }<br>
      <br>
          # be sure auth user access only its documents<br>
          if ($rm!="GET" && $au!=$(var(uri){uri.user})) {<br>
              xlog("==== xhttp forbidden => [$au] !=
      [$(var(uri){uri.user})]\n");<br>
              xhttp_reply("403", "Forbidden", "text/html",<br>
                      "operation not allowed");<br>
              exit;<br>
          }<br>
      <br>
          xdbg("SCRIPT: xcap service $xcapuri(u=>auid) for
      $xcapuri(u=>xuid)\n");<br>
          switch($rm) {<br>
              case "PUT":<br>
                  xcaps_put("$var(uri)", "$var(hu)", "$rb");<br>
                  if($xcapuri(u=>auid)=~"pres-rules")<br>
                  {<br>
                      pres_update_watchers("$var(uri)", "presence");<br>
                      pres_refresh_watchers("$var(uri)", "presence", 1);<br>
      #!ifdef WITH_RLS<br>
                  } else if($xcapuri(u=>auid)=~"rls-services"<br>
                          || $xcapuri(u=>auid)=~"resource-lists") {<br>
                      rls_update_subs("$var(uri)", "presence");<br>
      #!endif<br>
                  } else if($xcapuri(u=>auid)=~"pidf-manipulation") {<br>
                      pres_refresh_watchers("$var(uri)", "presence", 2,<br>
                                  "$xcapuri(u=>uri_adoc)",
      "$xcapuri(u=>file)");<br>
                  }<br>
                  exit;<br>
              break;<br>
              case "GET":<br>
                  $var(furi) = "sip:" + $au + "@" + $ar;<br>
                  if ($au!=$(var(uri){uri.user})) {<br>
                      # be sure only auth user gets its non-profile
      documents<br>
                      if (!($xcapuri(u=>auid)=~"user-profile"<br>
                              || $xcapuri(u=>auid)=~"pres-content"))
      {<br>
                          xhttp_reply("403", "Forbidden", "", "");<br>
                          exit;<br>
                      } else {<br>
                          # be sure only permitted user gets others
      profile documents<br>
                          pres_auth_status("$var(furi)", "$var(uri)");<br>
                          $var(rc) = $rc;<br>
                          if ($var(rc) != 1) {<br>
                              xhttp_reply("403", "Forbidden", "", "");<br>
                              exit;<br>
                          }<br>
                      }<br>
                  }<br>
                  xcaps_get("$var(uri)", "$var(hu)");<br>
                  exit;<br>
              break;<br>
              case "DELETE":<br>
                  xcaps_del("$var(uri)", "$var(hu)");<br>
                  if($xcapuri(u=>auid)=~"pres-rules") {<br>
                      pres_update_watchers("$var(uri)", "presence");<br>
                      pres_refresh_watchers("$var(uri)", "presence", 1);<br>
      #!ifdef WITH_RLS<br>
                  } else if($xcapuri(u=>auid)=~"rls-services"<br>
                          || $xcapuri(u=>auid)=~"resource-lists") {<br>
                      rls_update_subs("$var(uri)", "presence");<br>
      #!endif<br>
                  } else if($xcapuri(u=>auid)=~"pidf-manipulation") {<br>
                      pres_refresh_watchers("$var(uri)", "presence", 2,<br>
                              "$xcapuri(u=>uri_adoc)",
      "$xcapuri(u=>file)");<br>
                  }<br>
                  exit;<br>
              break;<br>
              case "POST":<br>
                  if($xcapuri(u=>auid)=~"search") {<br>
                      xhttp_reply("501", "Not Implemented", "", "");<br>
                  } else {<br>
                      if($xcapuri(u=>auid)=~"xcap-directory") {<br>
                          append_to_reply("Allow: GET\r\n");<br>
                      } else {<br>
                          append_to_reply("Allow: DELETE, GET,
      PUT\r\n");<br>
                      }<br>
                      xhttp_reply("405", "Method Not Allowed", "", "");<br>
                  }<br>
                  exit;<br>
              break;<br>
          }<br>
      #!endif<br>
          return;<br>
      }<br>
      <br>
      # Return fixed XCAP URI in $var(hu)<br>
      route[XCAPURI] {<br>
      #!ifdef WITH_XCAPSRV<br>
          # Jitsi...<br>
          if ($hu=~"^/xcap-root/resource-lists/users/.*/index$") {<br>
              $var(hu) =
$(hu{re.subst,!(^/xcap-root/resource-lists/users/.*/).*$!\1generallist.xml!});<br>
          } else if ($hu=~"^/xcap-root/pres-rules/users/.*/presrules$")
      {<br>
              $var(hu) =
$(hu{re.subst,!(^/xcap-root/)pres-rules(/users/.*/)presrules!\1org.openmobilealliance.pres-rules\2pres-rules!});<br>
          } else if ($hu=~"^/xcap-root/oma_status-icon/users/.*/.*$") {<br>
              $var(hu) =
$(hu{re.subst,!(^/xcap-root/)oma_status-icon(/users/.*/).*$!\1org.openmobilealliance.pres-content\2oma_status-icon/icon_document!});<br>
      <br>
          # Bria...<br>
          } else if
      ($hu=~"^/xcap-root/resource-lists/users/.*/contacts-resource-list.xml$")
      {<br>
              $var(hu) =
$(hu{re.subst,!(^/xcap-root/resource-lists/users/.*/).*$!\1generallist.xml!});<br>
          } else if
      ($hu=~"^/xcap-root/resource-lists/users/.*/resource-list.xml$") {<br>
              $var(doc_uri) =
$(hu{re.subst,!(^/xcap-root/resource-lists/users/.*/).*$!\1generallist.xml!});<br>
              <br>
          # No modification required...<br>
          } else {<br>
              $var(hu) = $hu;<br>
          }<br>
      #!endif<br>
          return;<br>
      }<br>
      <br>
      <br>
    </tt><br>
    <br>
    <div class="moz-cite-prefix">On 7/18/13 5:54 PM, Kethzer Docteur
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAHoHPXyAg3m1HBm=4RxBcJeE0rhuHjicXOeudSfO4mc0mV14_g@mail.gmail.com"
      type="cite">
      <div dir="ltr">Im trying to run Xcap_server support on Kamailio
        but I got no luck in the configuration I load all module
        necessary for  the operation to succeed but  nothing. I guess
        I'm missing something but I can't tell cause I install all
        dependencies in order to get it running. Here is my set up
        please let me know if you can give me a hand with this I'd like
        that cause I'm stuck here
        <div>
          <br>
        </div>
        <div>
          <div># *** Value defines - IDs used later in config</div>
          <div>#!define WITH_AUTH</div>
          <div>#!define WITH_PRESENCE</div>
          <div>#!define WITH_XCAPSRV</div>
          <div>#!define WITH_NAT</div>
          <div>#!define WITH_TLS</div>
          <div>#!define WITH_ANTIFLOOD</div>
          <div>#!define WITH_MYSQL</div>
        </div>
        <div><br>
        </div>
        <div>
          <div>#!ifdef WITH_XCAPSRV</div>
          <div>tcp_accept_no_cl=yes</div>
          <div>#!endif</div>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div>
          <div>#!ifdef WITH_AUTH</div>
          <div>loadmodule "auth.so"</div>
          <div>loadmodule "auth_db.so"</div>
          <div>#!ifdef WITH_IPAUTH</div>
          <div>loadmodule "permissions.so"</div>
          <div>#!endif</div>
          <div>#!endif</div>
        </div>
        <div><br>
        </div>
        <div>
          <br>
        </div>
        <div>
          <div>#!ifdef WITH_PRESENCE</div>
          <div>loadmodule "presence.so"</div>
          <div>loadmodule "presence_xml.so"</div>
          <div>#!endif</div>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div>
          <div>#!ifdef WITH_XCAPSRV</div>
          <div>loadmodule "xhttp.so"</div>
          <div>loadmodule "xcap_server.so"</div>
          <div>#!endif</div>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div>
          <div># ----- xcap_server params -----</div>
          <div>modparam("xcap_server", "db_url",
            "mysql://kamailio:kamailiorw@localhost/kamailio")</div>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div>
          <div>event_route[xhttp:request] {</div>
          <div>    if (!www_authorize("xcap", "subscriber"))</div>
          <div>    {</div>
          <div>        www_challenge("xcap", "0");</div>
          <div>        exit;</div>
          <div>    }</div>
          <div>    if($hu=~"^/xcap-root/")</div>
          <div>    {</div>
          <div>        set_reply_close();</div>
          <div>        set_reply_no_connect();</div>
          <div>        # xcap ops - break down http uri to get xcap user
            id</div>
          <div>        $xcapuri(u=>data) = $hu;</div>
          <div>        if($xcapuri(u=>xuid)=~"^<a class="moz-txt-link-freetext" href="sip:.+@.+">sip:.+@.+</a>")</div>
          <div>            $var(uri) = $xcapuri(u=>xuid);</div>
          <div>        else</div>
          <div>            $var(uri) = "sip:"+ $xcapuri(u=>xuid) +
            "@" + $Ri;</div>
          <div><br>
          </div>
          <div>        # handle XCAP capability request</div>
          <div>        if($rm=="GET" &&
            $xcapuri(u=>auid)=="xcap-caps")</div>
          <div>        {</div>
          <div>            $var(xbody) =</div>
          <div>
            "<?xml version='1.0' encoding='UTF-8'?></div>
          <div><xcap-caps
            xmlns='urn:ietf:params:xml:ns:xcap-caps'></div>
          <div>  <auids></div>
          <div>    <auid>rls-services</auid></div>
          <div>    <auid>pidf-manipulation</auid></div>
          <div>    <auid>xcap-caps</auid></div>
          <div>    <auid>resource-lists</auid></div>
          <div>    <auid>pres-rules</auid></div>
          <div>   
            <auid>org.openmobilealliance.pres-rules</auid></div>
          <div>  </auids></div>
          <div>  <extensions></div>
          <div>  </extensions></div>
          <div>  <namespaces></div>
          <div>   
            <namespace>urn:ietf:params:xml:ns:rls-services</namespace></div>
          <div>   
            <namespace>urn:ietf:params:xml:ns:pidf</namespace></div>
          <div>   
            <namespace>urn:ietf:params:xml:ns:xcap-caps</namespace></div>
          <div>   
            <namespace>urn:ietf:params:xml:ns:resource-lists</namespace></div>
          <div>   
            <namespace>urn:ietf:params:xml:ns:pres-rules</namespace></div>
          <div>  </namespaces></div>
          <div></xcap-caps>";</div>
          <div>            xhttp_reply("200", "ok",
            "application/xcap-caps+xml",</div>
          <div>                    "$var(xbody)");</div>
          <div>            exit;</div>
          <div>        }</div>
          <div>        # be sure auth user access only its documents</div>
          <div>        if ($au!=$(var(uri){uri.user})) {</div>
          <div>            xhttp_reply("403", "Forbidden", "text/html",</div>
          <div>                    "operation not allowed");</div>
          <div>            exit;</div>
          <div>        }</div>
          <div><br>
          </div>
          <div>        xdbg("SCRIPT: xcap service $xcapuri(u=>auid)
            for $xcapuri(u=>xuid)\n");</div>
          <div>        switch($rm) {</div>
          <div>            case "PUT":</div>
          <div>                xcaps_put("$var(uri)", "$hu", "$rb");</div>
          <div>                if($xcapuri(u=>auid)=~"pres-rules")</div>
          <div>                {</div>
          <div>                    pres_update_watchers("$var(uri)",
            "presence");</div>
          <div>                    pres_refresh_watchers("$var(uri)",
            "presence", 1);</div>
          <div>                }</div>
          <div>                exit;</div>
          <div>            break;</div>
          <div>            case "GET":</div>
          <div>                xcaps_get("$var(uri)", "$hu");</div>
          <div>                exit;</div>
          <div>            break;</div>
          <div>            case "DELETE":</div>
          <div>                xcaps_del("$var(uri)", "$hu");</div>
          <div>                if($xcapuri(u=>auid)=~"pres-rules")</div>
          <div>                {</div>
          <div>                    pres_update_watchers("$var(uri)",
            "presence");</div>
          <div>                    pres_refresh_watchers("$var(uri)",
            "presence", 1);</div>
          <div>                }</div>
          <div>                exit;</div>
          <div>            break;</div>
          <div>        }</div>
          <div>    }</div>
          <div><br>
          </div>
          <div>    # other http requests</div>
          <div>    xhttp_reply("200", "OK", "text/html",</div>
          <div>            "<html><body>OK:
            $si:$sp</body></html>");</div>
          <div>    exit;</div>
          <div>}</div>
        </div>
        <div><br>
        </div>
      </div>
      <div class="gmail_extra"><br>
        <br>
        <div class="gmail_quote">On Thu, Jul 18, 2013 at 11:22 AM, Edson
          - Lists <span dir="ltr"><<a moz-do-not-send="true"
              href="mailto:4lists@gmail.com" target="_blank">4lists@gmail.com</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">Did you
            try it? What you got? What happened? What is your scenario?<br>
            <br>
            Tell, and maybe someone would help you...<br>
            <br>
            Edson.<br>
            <br>
            Em 18/07/2013 11:51, Kethzer Docteur escreveu:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div>
                <div class="h5">
                  Hello<br>
                  Im trying to get xcap service working to be able to
                  download my<br>
                  subscriber list form the subscriber table. I hope that
                  you could help me<br>
                  with this in anyway possible<br>
                  Thank you<br>
                  <br>
                  --<br>
                  Kethzer Docteur<br>
                  <br>
                  <br>
                </div>
              </div>
              _______________________________________________<br>
              SIP Express Router (SER) and Kamailio (OpenSER) - sr-users
              mailing list<br>
              <a moz-do-not-send="true"
                href="mailto:sr-users@lists.sip-router.org"
                target="_blank">sr-users@lists.sip-router.org</a><br>
              <a moz-do-not-send="true"
                href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users"
                target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a><br>
              <br>
            </blockquote>
            <br>
            _______________________________________________<br>
            SIP Express Router (SER) and Kamailio (OpenSER) - sr-users
            mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:sr-users@lists.sip-router.org"
              target="_blank">sr-users@lists.sip-router.org</a><br>
            <a moz-do-not-send="true"
              href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users"
              target="_blank">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a><br>
          </blockquote>
        </div>
        <br>
        <br clear="all">
        <div><br>
        </div>
        -- <br>
        Kethzer Docteur<br>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:sr-users@lists.sip-router.org">sr-users@lists.sip-router.org</a>
<a class="moz-txt-link-freetext" href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Daniel-Constantin Mierla - <a class="moz-txt-link-freetext" href="http://www.asipto.com">http://www.asipto.com</a>
<a class="moz-txt-link-freetext" href="http://twitter.com/#!/miconda">http://twitter.com/#!/miconda</a> - <a class="moz-txt-link-freetext" href="http://www.linkedin.com/in/miconda">http://www.linkedin.com/in/miconda</a>
</pre>
  </body>
</html>