Hi,

If the purpose of printing all incoming SIP messages is to debug the
call flow, maybe it's worth mentioning that you can set environment
variable SOFIA_DEBUG to let Sofia-SIP stack directly print all
incoming and outgoing SIP messages. See these two links for more
details:

http://wiki.freeswitch.org/wiki/Sofia

http://sofia-sip.sourceforge.net/refdocs/debug_logs.html

BR

Tan

On Mon, Aug 4, 2008 at 9:07 PM, Pekka Pessi <[EMAIL PROTECTED]> wrote:
> 2008/7/30 Stefano Sabatini <[EMAIL PROTECTED]>:
>> On 7/30/08, Stefano Sabatini <[EMAIL PROTECTED]> wrote:
>>> On Wed, Jul 30, 2008 at 10:31 AM, Stefano Sabatini
>>> <[EMAIL PROTECTED]> wrote:
>>>> Hi all,
>>>> can you say if there is a simple way to convert a sip_t object to a char*
>>>> and viceversa?
>>>>
>>>> For example I would like to print all the incoming SIP messages from
>>>> the the event callback function.
>> [...]
>>
>> >From a textual representation to a msg_t and to a sip_t:
>> msg_data = "...";
>> msg_t* msg = msg_make (sip_default_mclass(), 0, msg_data, sizeof (msg_data));
>> if (!msg) {
>>    fprintf(stderr, "Impossible to parse message\n");
>>    exit(1);
>> }
>> sip_t* sip = sip_object(msg);
>>
>> Still I don't know if there exists a function which returns a textual
>> representation of a message,
>> there is a sip_header_as_string(home, sip) function but not one which
>> prints the whole message.
>
> Try msg_as_string()..
>
>> Also how can I get the headers from a sip_t struct, and how can I
>> iterate thrugh them?
>
> sip_t has pointers to each header fields, e.g., sip_via is pointer to
> a list of Via header fields. You can iterate through Via header fields
> with a loop like this:
>
> sip_t *sip = sip_object(sip);
> sip_via_t *via;
>
> for (via = sip->sip_via; via; via = via->v_next) {
>  ...
> }
>
> If you want to iterate through each header field in the message, you
> should start from msg_chain_head(msg) and then proceed in order, e.g.,
>
> for (next = msg_chain_head(msg); *next; next = &(*next)->sh_next) {
>  sip_header_t *sh = (*next);
>  msg_hclass_t const *hc = sh->sh_class;
>  if (sip_is_via(sh) {
>    sip_via_t const*via = (sip_via_t *)sh;
>    ....
>  }
>  ...
> }
>
> The list of all the message components ("chain") also includes some
> non-header elements, like request-line, status-line and message body.
> There is also some complications with so called "list" headers like
> Require, their values are combined with their first occurrence, so
> headers like
>
> Require: 100rel
> Supported: timer
> Require: xyzzy
>
> will have one sip_require_t structure with tokens "100rel" and
> "xyzzy", one sip_supported_t structure with "timer" and a dummy
> sip_require_t structure in the chain.
>
> --
> Pekka.Pessi mail at nokia.com
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Sofia-sip-devel mailing list
> Sofia-sip-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sofia-sip-devel
>



-- 
Best Regards
Tan Miaoqing
Master's Programme in Mobile Computing - Services and Security
Helsinki University of Technology
http://users.tkk.fi/~mitan

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Sofia-sip-devel mailing list
Sofia-sip-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sofia-sip-devel

Reply via email to