[OpenSIPS-Devel] Interaction with Mobicents XDMS

Andaleeb Roomy andaleebcse at gmail.com
Wed Aug 5 07:51:13 CEST 2009


> I don't see issues in the response. Well, I see one: "Content-Type"
> includes a parameter "charset" different than UTF-8, while RFC 4825
> (XCAP) requires UTF-8 for all the documents.

I was finally able to find where the error was occurring. It was not
the charset.

libcurl doc says that if the callback function set by
CURLOPT_WRITEFUNCTION returns a value that differs from the amount of
data passed the function, it will signal an error. The same applies
for CURLOPT_HEADERFUNCTION. This was happening in my case because
get_xcap_etag in xcap_functions.c was returning a different value
because of deducting ETAG_HDR_LEN from size*nmemb.
	int len= 0;
        .
        .
	if(strncasecmp(ptr, ETAG_HDR, ETAG_HDR_LEN)== 0)
	{
		len= size* nmemb- ETAG_HDR_LEN;
               .
               .
	}
	return len;


Same thing happened with write_function returning buff->len instead of
size*nmemb. buff->len may have been right in case this callback was
called only once with all the data of the message body, but in
reality, it is called whenever libcurl thinks that some data needs to
saved, according to libcurl doc. In this case, buff->len was returning
the aggregate length of the message which differs from the size*nmemb
of a single call.



I also found issues with pointers, like passing &etag instead of just
etag, which is already a char**, as CURLOPT_WRITEHEADER. This was
causing the etag to be written in a wrong location.
	..
	curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, &etag);
	..



I guess OpenSIPS presence modules need to be developed and tested more
to work with third party XDMSs and clients. Currently I am facing a
difficulty because it does not follow resource-list childs under
services element in an rls-services doc. This is required to subscribe
to all the presentities of a presence list set by Mercuro IMS client.

Thanks,

Andaleeb



More information about the Devel mailing list