Hello,
the error message is printed in case of an invalid xml document.
Can you edit modules/xcap_server/xcap_misc.c and add inside function:
int xcaps_check_doc_validity(str *doc)
the log:
LM_ERR("xmld document is: [[%.*s]]\n", doc->len, doc->s);
before the line with:
docxml = xmlParseMemory(doc->s, doc->len);
Re-compile and re-install. Then run a test and send here the output of this line.
Cheers, Daniel
On 29/05/14 01:30, Alex Villacís Lasso wrote:
I am trying to set up XCAP support for SIP SIMPLE, and using jitsi as the sample client. The kamailio database was previously configured using ODBC and kamailio-4.1.3 and was apparently working correctly. I was following the guide at http://nil.uniza.sk/instant-messaging/simple/configuring-xcap-support-im-and... as well as the standard documentation at http://kamailio.org/docs/modules/4.1.x/modules/xcap_server.html . However, the rls support is currently disabled. When I use jitsi to connect, and add one contact to the empty contact list, I see the database being populated (mysql backend):
mysql> select * from xcap; +----+-------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+-----------------------+--------+-----------------------------------------------------------------------+------+
| id | username | domain | doc | doc_type | etag | source | doc_uri | port | +----+-------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+-----------------------+--------+-----------------------------------------------------------------------+------+
| 3 | avillacisIM | pbx.elastix.com | <?xml version="1.0" encoding="UTF-8" standalone="no"?><resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists"><list name="RootGroup"><entry uri="sip:bmacias@pbx.elastix.com"><display-name>bmacias</display-name></entry></list></resource-lists> | 4 | sr-1401316328-31413-1 | 0 | /xcap-root/resource-lists/users/sip:avillacisIM@pbx.elastix.com/index | 0 | | 4 | avillacisIM | pbx.elastix.com | <?xml version="1.0" encoding="UTF-8" standalone="no"?><ruleset xmlns="urn:ietf:params:xml:ns:common-policy"><rule id="presence_allow"><conditions><identity><one id="sip:bmacias@pbx.elastix.com"/></identity></conditions><actions><sub-handling xmlns="urn:ietf:params:xml:ns:pres-rules">allow</sub-handling></actions><transformations><provide-devices xmlns="urn:ietf:params:xml:ns:pres-rules"><all-devices/></provide-devices><provide-persons xmlns="urn:ietf:params:xml:ns:pres-rules"><all-persons/></provide-persons><provide-services xmlns="urn:ietf:params:xml:ns:pres-rules"><all-services/></provide-services></transformations></rule></ruleset> | 2 | sr-1401316328-31416-1 | 0 | /xcap-root/pres-rules/users/sip:avillacisIM@pbx.elastix.com/presrules | 0 | +----+-------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+-----------------------+--------+-----------------------------------------------------------------------+------+
2 rows in set (0.00 sec)
As far as I can see, both XML documents are well formed.
However, if I shutdown and then restart jitsi, I see (with wireshark) that the server returned a 500 Server Error when trying to fetch resource-lists . At the same time, the following appears on the log:
May 28 17:39:12 elx /usr/sbin/kamailio[31421]: ALERT: <script>: ===== xhttp: request [HTTP/1.1] GET => /xcap-root/xcap-caps/global/index May 28 17:39:12 elx /usr/sbin/kamailio[31421]: ALERT: <script>: ===== xhttp: request [HTTP/1.1] GET => /xcap-root/xcap-caps/global/index May 28 17:39:12 elx /usr/sbin/kamailio[31421]: ALERT: <script>: ===== xhttp: xcap-caps : <null> May 28 17:39:12 elx /usr/sbin/kamailio[31413]: ALERT: <script>: ===== xhttp: request [HTTP/1.1] GET => /xcap-root/resource-lists/users/sip:avillacisIM@pbx.elastix.com/index May 28 17:39:12 elx /usr/sbin/kamailio[31413]: ALERT: <script>: ===== xhttp: request [HTTP/1.1] GET => /xcap-root/resource-lists/users/sip:avillacisIM@pbx.elastix.com/index May 28 17:39:12 elx /usr/sbin/kamailio[31413]: ALERT: <script>: ===== xhttp: resource-lists : sip:avillacisIM@pbx.elastix.com May 28 17:39:12 elx /usr/sbin/kamailio[31413]: ERROR: xcap_server [xcap_server.c:758]: xcaps_get_db_doc(): invalid xml doc retrieved from database May 28 17:39:12 elx /usr/sbin/kamailio[31413]: ERROR: xcap_server [xcap_server.c:1171]: w_xcaps_get(): could not fetch xcap document
What can I do to solve this issue. This is preventing contacts from being retrieved or added once the first contact is stored.
My event-route looks like this (WITH_XCAPSRV is defined elsewhere in the configuration):
#!ifdef WITH_XHTTP event_route[xhttp:request] { #!ifdef WITH_XHTTP_RPC $var(xhttp_rpc_root) = $(hu{s.substr,0,9}); if ($var(xhttp_rpc_root) == "/http_rpc") { dispatch_xhttp_rpc(); } #!endif #!ifdef WITH_XHTTP_PI $var(xhttp_rpc_root) = $(hu{s.substr,0,8}); if ($var(xhttp_rpc_root) == "/http_pi") { dispatch_xhttp_pi(); } #!endif #!ifdef WITH_XCAPSRV if ($hu =~ "^/xcap-root/") { route(XCAPSRV); } #!endif
set_reply_close(); set_reply_no_connect();
# if ($Rp != 80 ##!ifdef WITH_TLS # && $Rp != 443 ##!endif # ) { # # xlog("L_WARN", "HTTP request received on $Rp\n"); # xhttp_reply("403", "Forbidden", "text/html", "Forbidden"); # exit; # }
xlog("L_DBG", "HTTP Request Received\n"); if ($hdr(Upgrade)=~"websocket" && $hdr(Connection)=~"Upgrade" && $rm=~"GET") { # Validate Host - make sure the client is using the
correct # alias for WebSockets if ($hdr(Host) == $null || !is_myself("sip:" + $hdr(Host))) { xlog("L_WARN", "Bad host $hdr(Host)\n"); xhttp_reply("403", "Forbidden", "", ""); exit; }
# Optional... validate Origin - make sure the client
is from an # authorised website. For example, # # if ($hdr(Origin) != "http://communicator.MY_DOMAIN" # && $hdr(Origin) != "https://communicator.MY_DOMAIN") { # xlog("L_WARN", "Unauthorised client $hdr(Origin)\n"); # xhttp_reply("403", "Forbidden", "", ""); # exit; # }
# Optional... perform HTTP authentication # ws_handle_handshake() exits (no further
configuration file # processing of the request) when complete. if (ws_handle_handshake()) { # Optional... cache some information about the # successful connection exit; } }
xhttp_reply("200", "OK", "text/html", "<html><body>Wrong URL $hu</body></html>");
} #!endif
#!ifdef WITH_XCAPSRV route[XCAPSRV] { xlog("L_ALERT", "===== xhttp: request [$rv] $rm => $hu\n");
# Remove port specification from Host header and use as
authentication domain $var(http_domain) = $(hdr(Host){s.select,0,:}); if (!www_authorize("$var(http_domain)", "subscriber")) { www_challenge("$var(http_domain)", "0"); exit; }
set_reply_close(); set_reply_no_connect(); if ($hu=~"^/xcap-root/oma_status-icon/users/.*/.*$") $var(doc_uri) =
$(hu{re.subst,/(^/xcap-root/)oma_status-icon(/users/.*/).*$/\1org.openmobilealliance.pres-content\2oma_status-icon/preseImage/}); else $var(doc_uri) = $hu;
# xcap ops $xcapuri(u=>data) = $var(doc_uri); if($xcapuri(u=>xuid)=~"^sip:.+@.+") $var(uri) = $xcapuri(u=>xuid); else if($xcapuri(u=>xuid)=~".+@.+") $var(uri) = "sip:" + $xcapuri(u=>xuid); else $var(uri) = "sip:"+ $xcapuri(u=>xuid) + "@" + $Ri; xlog("L_ALERT", "===== xhttp: $xcapuri(u=>auid) :
$xcapuri(u=>xuid)\n");
if ($xcapuri(u=>auid) == "xcap-caps") { if ($rm == "GET") { $var(xbody) =
"<?xml version='1.0' encoding='UTF-8'?>
<xcap-caps xmlns='urn:ietf:params:xml:ns:xcap-caps'> <auids> <auid>rls-services</auid> <auid>pidf-manipulation</auid> <auid>xcap-caps</auid> <auid>resource-lists</auid> <auid>pres-rules</auid> <auid>org.openmobilealliance.pres-rules</auid> <auid>org.openmobilealliance.user-profile</auid> <auid>org.openmobilealliance.pres-content</auid> <auid>org.openmobilealliance.search</auid> <auid>org.openmobilealliance.xcap-directory</auid> </auids> <extensions></extensions> <namespaces> <namespace>urn:ietf:params:xml:ns:rls-services</namespace> <namespace>urn:ietf:params:xml:ns:pidf</namespace> <namespace>urn:ietf:params:xml:ns:xcap-caps</namespace> <namespace>urn:ietf:params:xml:ns:resource-lists</namespace> <namespace>urn:ietf:params:xml:ns:pres-rules</namespace> <namespace>urn:oma:xml:xdm:user-profile</namespace> <namespace>urn:oma:xml:prs:pres-content</namespace> <namespace>urn:oma:xml:xdm:search</namespace> <namespace>urn:oma:xml:xdm:xcap-directory</namespace> </namespaces> </xcap-caps>"; xhttp_reply("200", "OK", "application/xcap-caps+xml", "$var(xbody)"); } else { append_to_reply("Allow: GET\r\n"); xhttp_reply("405", "Method Not Allowed", "", ""); } exit; }
# be sure auth user access only its documents if ($au != $(var(uri){uri.user})) { xhttp_reply("403", "Forbidden", "text/html",
"<html><body>$si:$sp</body></html>"); exit; }
switch($rm) { case "PUT": xcaps_put("$var(uri)", "$var(doc_uri)", "$rb"); if ($xcapuri(u=>auid) =~ "pres-rules") { pres_update_watchers("$var(uri)", "presence"); pres_refresh_watchers("$var(uri)", "presence", 1);
# } else if ($xcapuri(u=>auid) =~ "rls-services" || $xcapuri(u=>auid) =~ "resource-lists") { # rls_update_subs("$var(uri)", "presence"); } else if ($xcapuri(u=>auid) =~ "pidf-manipulation") { pres_refresh_watchers("$var(uri)", "presence", 2, "$xcapuri(u=>uri_adoc)", "$xcapuri(u=>file)"); } exit; break; case "GET": xcaps_get("$var(uri)", "$var(doc_uri)"); exit; break; case "DELETE": xcaps_del("$var(uri)", "$var(doc_uri)"); if ($xcapuri(u=>auid) =~ "pres-rules") { pres_update_watchers("$var(uri)", "presence"); pres_refresh_watchers("$var(uri)", "presence", 1); # } else if ($xcapuri(u=>auid) =~ "rls-services" || $xcapuri(u=>auid) =~ "resource-lists") { # rls_update_subs("$var(uri)", "presence"); } else if ($xcapuri(u=>auid) =~ "pidf-manipulation") { pres_refresh_watchers("$var(uri)", "presence", 2, "$xcapuri(u=>uri_adoc)", "$xcapuri(u=>file)"); } exit; break; case "POST": if ($xcapuri(u=>auid) =~ "search") { xhttp_reply("501", "Not Implemented", "", ""); } else { if ($xcapuri(u=>auid) =~ "xcap-directory") { append_to_reply("Allow: GET\r\n"); } else { append_to_reply("Allow: DELETE, GET, PUT\r\n"); } xhttp_reply("405", "Method Not Allowed", "", ""); } exit; break; }
# other http requests xhttp_reply("404", "Not Found", "", ""); exit;
} #!endif
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users