<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Peter,<br>
    <br>
    thanks for the patches. I will add them to the module.<br>
    <br>
    Also, I will start a new wiki page for the presence+xcap sever
    config that should be valid for development version (to be released
    3.2.0), in order to make it easy for those willing to play with
    latest additions in this regard.<br>
    <br>
    Cheers,<br>
    Daniel<br>
    <br>
    On 5/12/11 12:32 PM, Peter Dunkley wrote:
    <blockquote cite="mid:1305196362.3248.21.camel@pd-laptop-linux"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <meta name="GENERATOR" content="GtkHTML/3.32.2">
      Hello,<br>
      <br>
      Please find attached a patch to add oma user-profile and
      pres-content (avatar) support to the xcap_server module.<br>
      <br>
      To make use of these changes I also had to update my kamailio.cfg
      (based on the example from <a moz-do-not-send="true"
        href="http://kb.asipto.com/kamailio:presence:k31-made-simple%29.%A0">http://kb.asipto.com/kamailio:presence:k31-made-simple).&nbsp;</a>
      In particular I had to update the event_route[xhttp:request]
      clause so that:
      <ul>
        <li>the xcap-caps response includes the auids and namespace
          entries for user-profile and pres-content </li>
        <li>modify the auth user checking because (unlike the XML
          documents that were already there) any user can retrieve
          user-profile and pres-content, but only the owner can update
          them.
        </li>
      </ul>
      <br>
      For reference, my updated event_route[xhttp:request] clause is
      included below.<br>
      <br>
      Regards,<br>
      <br>
      Peter<br>
      <br>
      <pre>event_route[xhttp:request] {
#!ifdef WITH_PRESENCE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xdbg("===== xhttp: request [$rv] $rm =&gt; $hu\n");
#!ifdef WITH_XHTTPAUTH
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!www_authorize("xcap", "subscriber")) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; www_challenge("xcap", "0");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
#!endif

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if($hu=~"^/xcap-root/") {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set_reply_close();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set_reply_no_connect();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # xcap ops
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $xcapuri(u=&gt;data) = $hu;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if($xcapuri(u=&gt;xuid)=~"^<a class="moz-txt-link-freetext" href="sip:.+@.+">sip:.+@.+</a>")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $var(uri) = $xcapuri(u=&gt;xuid);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if($xcapuri(u=&gt;xuid)=~<a class="moz-txt-link-rfc2396E" href="mailto:.+@.+">".+@.+"</a>)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $var(uri) = "sip:" + $xcapuri(u=&gt;xuid);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $var(uri) = "sip:"+ $xcapuri(u=&gt;xuid) + "@" + $Ri;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if($xcapuri(u=&gt;auid)=="xcap-caps") {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $var(xbody) =
"&lt;?xml version='1.0' encoding='UTF-8'?&gt;
&lt;xcap-caps xmlns='urn:ietf:params:xml:ns:xcap-caps'&gt;
&nbsp; &lt;auids&gt;
&nbsp;&nbsp;&nbsp; &lt;auid&gt;rls-services&lt;/auid&gt;
&nbsp;&nbsp;&nbsp; &lt;auid&gt;pidf-manipulation&lt;/auid&gt;
&nbsp;&nbsp;&nbsp; &lt;auid&gt;xcap-caps&lt;/auid&gt;
&nbsp;&nbsp;&nbsp; &lt;auid&gt;resource-lists&lt;/auid&gt;
&nbsp;&nbsp;&nbsp; &lt;auid&gt;pres-rules&lt;/auid&gt;
&nbsp;&nbsp;&nbsp; &lt;auid&gt;org.openmobilealliance.pres-rules&lt;/auid&gt;
&nbsp;&nbsp;&nbsp; &lt;auid&gt;org.openmobilealliance.user-profile&lt;/auid&gt; 
&nbsp;&nbsp;&nbsp; &lt;auid&gt;org.openmobilealliance.pres-conent&lt;/auid&gt;
&nbsp; &lt;/auids&gt;
&nbsp; &lt;extensions&gt;
&nbsp; &lt;/extensions&gt;
&nbsp; &lt;namespaces&gt;
&nbsp;&nbsp;&nbsp; &lt;namespace&gt;urn:ietf:params:xml:ns:rls-services&lt;/namespace&gt;
&nbsp;&nbsp;&nbsp; &lt;namespace&gt;urn:ietf:params:xml:ns:pidf&lt;/namespace&gt;
&nbsp;&nbsp;&nbsp; &lt;namespace&gt;urn:ietf:params:xml:ns:xcap-caps&lt;/namespace&gt;
&nbsp;&nbsp;&nbsp; &lt;namespace&gt;urn:ietf:params:xml:ns:resource-lists&lt;/namespace&gt;
&nbsp;&nbsp;&nbsp; &lt;namespace&gt;urn:ietf:params:xml:ns:pres-rules&lt;/namespace&gt;
&nbsp;&nbsp;&nbsp; &lt;namespace&gt;urn:oma:xml:xdm:user-profile&lt;/namespace&gt;
&nbsp;&nbsp;&nbsp; &lt;namespace&gt;urn:oma:xml:prs:pres-content&lt;/namespace&gt;
&nbsp; &lt;/namespaces&gt;
&lt;/xcap-caps&gt;";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xhttp_reply("200", "ok", "application/xcap-caps+xml",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "$var(xbody)");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch($rm) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "PUT":
#!ifdef WITH_XHTTPAUTH
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # be sure only auth user updates its documents
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($au!=$(var(uri){uri.user})) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xhttp_reply("403", "Forbidden", "text/html",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;html&gt;&lt;body&gt;$si:$sp&lt;/body&gt;&lt;/html&gt;");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
#!endif 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xcaps_put("$var(uri)", "$hu", "$rb");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if($xcapuri(u=&gt;auid)=~"pres-rules") {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pres_update_watchers("$var(uri)", "presence");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pres_refresh_watchers("$var(uri)", "presence", 1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "GET":
#!ifdef WITH_XHTTPAUTH
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!($xcapuri(u=&gt;auid)=~"user-profile" || $xcapuri(u=&gt;auid)=~"pres-content")) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # be sure only auth user gets non-profile documents
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($au!=$(var(uri){uri.user})) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xhttp_reply("403", "Forbidden", "text/html",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;html&gt;&lt;body&gt;$si:$sp&lt;/body&gt;&lt;/html&gt;");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
#!endif 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xcaps_get("$var(uri)", "$hu");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "DELETE":
#!ifdef WITH_XHTTPAUTH
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # be sure only auth user deletes its documents
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($au!=$(var(uri){uri.user})) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xhttp_reply("403", "Forbidden", "text/html",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;html&gt;&lt;body&gt;$si:$sp&lt;/body&gt;&lt;/html&gt;");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
#!endif 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xcaps_del("$var(uri)", "$hu");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if($xcapuri(u=&gt;auid)=~"pres-rules") {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pres_update_watchers("$var(uri)", "presence");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pres_refresh_watchers("$var(uri)", "presence", 1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # http ops
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xhttp_reply("200", "ok", "text/html", "&lt;html&gt;&lt;body&gt;OK: $si:$sp&lt;/body&gt;&lt;/html&gt;");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;
#!endif
}
</pre>
      <br>
      <table cellpadding="0" cellspacing="0" width="100%">
        <tbody>
          <tr>
            <td>
              <pre>-- 
Peter Dunkley
Technical Director
Crocodile RCS Ltd
</pre>
            </td>
          </tr>
        </tbody>
      </table>
      <br>
      <fieldset class="mimeAttachmentHeader"><legend
          class="mimeAttachmentHeaderName">user_profile_avatar.patch</legend></fieldset>
      <br>
      <pre wrap="">diff -ru kamailio-orig/modules_k/xcap_client/xcap_callbacks.h kamailio-updated/modules_k/xcap_client/xcap_callbacks.h
--- kamailio-orig/modules_k/xcap_client/xcap_callbacks.h        2011-03-07 13:43:33.914172000 +0000
+++ kamailio-updated/modules_k/xcap_client/xcap_callbacks.h        2011-05-11 17:37:13.067141000 +0100
@@ -36,6 +36,8 @@
 #define RLS_SERVICE        1&lt;&lt;3
 #define PIDF_MANIPULATION  1&lt;&lt;4
 #define XCAP_CAPS          1&lt;&lt;5
+#define USER_PROFILE       1&lt;&lt;6
+#define PRES_CONTENT       1&lt;&lt;7
 
 
 /* callback function prototype */
diff -ru kamailio-orig/modules_k/xcap_server/xcap_misc.c kamailio-updated/modules_k/xcap_server/xcap_misc.c
--- kamailio-orig/modules_k/xcap_server/xcap_misc.c        2011-03-07 13:43:33.914172000 +0000
+++ kamailio-updated/modules_k/xcap_server/xcap_misc.c        2011-05-11 17:37:13.067141000 +0100
@@ -153,6 +153,14 @@
                 LM_DBG("matched xcap-caps\n");
                 xuri-&gt;type = XCAP_CAPS;
                 xuri-&gt;auid.len = 9;
+        } else if(s.len&gt; 36 &amp;&amp; strncmp(s.s, "org.openmobilealliance.user-profile/", 36)==0) {
+                LM_DBG("matched oma user-profile\n");
+                xuri-&gt;type = USER_PROFILE;
+                xuri-&gt;auid.len = 35;
+        } else if(s.len&gt; 36 &amp;&amp; strncmp(s.s, "org.openmobilealliance.pres-content/", 36)==0) {
+                LM_DBG("matched oma pres-content\n");
+                xuri-&gt;type = PRES_CONTENT;
+                xuri-&gt;auid.len = 35;
         } else {
                 LM_ERR("unsupported auid in [%.*s]\n", xuri-&gt;uri.len,
                                 xuri-&gt;uri.s);
diff -ru kamailio-orig/modules_k/xcap_server/xcap_server.c kamailio-updated/modules_k/xcap_server/xcap_server.c
--- kamailio-orig/modules_k/xcap_server/xcap_server.c        2011-05-05 12:59:29.739128000 +0100
+++ kamailio-updated/modules_k/xcap_server/xcap_server.c        2011-05-11 17:37:13.067141000 +0100
@@ -410,6 +410,8 @@
 static str xcaps_str_appxcxml   = {"application/xcap-caps+xml", 25};
 #endif
 static str xcaps_str_appapxml   = {"application/auth-policy+xml", 27};
+static str xcaps_str_appupxml        = {"application/vnd.oma.user-profile+xml", 36}; 
+static str xcaps_str_apppcxml        = {"application/vnd.oma.pres-content+xml", 36};
 
 
 /**
@@ -787,6 +789,10 @@
                         ctype = &amp;xcaps_str_appapxml;
                 else if(xuri.type==RLS_SERVICE)
                         ctype = &amp;xcaps_str_apprsxml;
+                else if(xuri.type==USER_PROFILE)
+                        ctype = &amp;xcaps_str_appupxml;
+                else if(xuri.type==PRES_CONTENT)
+                        ctype = &amp;xcaps_str_apppcxml;
                 xcaps_send_reply(msg, 200, &amp;xcaps_str_ok, &amp;etag,
                                 ctype, &amp;body);
         } else {
@@ -1004,38 +1010,62 @@
         c = s.s[s.len];
         s.s[s.len] = '\0';
 
-        if(s.len&gt;12
-                        &amp;&amp; strstr(s.s, "/pres-rules/")!=NULL)
+        if(s.len&gt;12 &amp;&amp; strstr(s.s, "/pres-rules/")!=NULL)
         {
                 LM_DBG("matched pres-rules\n");
                 ret = PRES_RULES;
                 goto done;
         }
 
-        if(s.len&gt;14
-                        &amp;&amp; strstr(s.s, "/rls-services/")!=NULL)
+        if(s.len&gt;35 &amp;&amp; strstr(s.s, "/org.openmobilealliance.pres-rules/")!=NULL)
+        {
+                LM_DBG("matched oma pres-rules\n");
+                ret = PRES_RULES;
+                goto done;
+        }
+
+        if(s.len&gt;14 &amp;&amp; strstr(s.s, "/rls-services/")!=NULL)
         {
                 LM_DBG("matched rls-services\n");
                 ret = RLS_SERVICE;
                 goto done;
         }
 
-        if(s.len&gt;19
-                        &amp;&amp; strstr(s.s, "pidf-manipulation")!=NULL)
+        if(s.len&gt;19 &amp;&amp; strstr(s.s, "pidf-manipulation")!=NULL)
         {
                 LM_DBG("matched pidf-manipulation\n");
                 ret = PIDF_MANIPULATION;
                 goto done;
         }
 
-        if(s.len&gt;16
-                        &amp;&amp; strstr(s.s, "/resource-lists/")!=NULL)
+        if(s.len&gt;16 &amp;&amp; strstr(s.s, "/resource-lists/")!=NULL)
         {
                 LM_DBG("matched resource-lists\n");
                 ret = RESOURCE_LIST;
                 goto done;
         }
 
+        if(s.len&gt;11 &amp;&amp; strstr(s.s, "/xcap-caps/")!=NULL)
+        {
+                LM_DBG("matched xcap-caps\n");
+                ret = XCAP_CAPS;
+                goto done;
+        }
+
+        if(s.len&gt; 37 &amp;&amp; strstr(s.s, "/org.openmobilealliance.user-profile/")!=NULL)
+        {
+                LM_DBG("matched oma user-profile\n");
+                ret = USER_PROFILE;
+                goto done;
+        }
+
+        if(s.len&gt; 37 &amp;&amp; strstr(s.s, "/org.openmobilealliance.pres-content/")!=NULL)
+        {
+                LM_DBG("matched oma pres-content\n");
+                ret = PRES_CONTENT;
+                goto done;
+        }
+
 done:
         s.s[s.len] = c;
         return ret;
</pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
sr-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:sr-dev@lists.sip-router.org">sr-dev@lists.sip-router.org</a>
<a class="moz-txt-link-freetext" href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev</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></pre>
  </body>
</html>