[OpenSIPS-Users] struct sip_msg

Ghaith ALKAYYEM ghaith.alkayyem at telecom-bretagne.eu
Wed Sep 2 15:16:55 CEST 2009


Thank you very much for these valuable information, actually I'm trying
to learn how to develop new module, and i expected that those fields
should be filled upon the receipt of any external message.
Regards.

On Wed, 2009-09-02 at 15:37 +0300, Anca Vamanu wrote:
> Hi Ghaith,
> 
> You must explicitly call parse_headers for the message to be parsed and 
> for the fields in sip_msg to be filled.
> Example:
>     parse_headers(msg,HDR_EOH_F, 0); -  will parse all headers.
> 
> However beware that this function will not parse the headers value also. 
> You must call the parse function for that header and it will fill the 
> 'parsed' filed of the struct hdr_field with a structure specific for 
> that filed
> Example: If you want to parse the value of the Contact header filed, you 
> call
>     parse_contact(msg->contact).
> and it will fill the parsed filed with a contact_body_t structure that 
> contains the parsed value of the Contact header.
>     (contact_body_t* )msg->contact->parsed;
> 
> I suggest learning by example technique :), look in other modules that 
> use the parser and see how it is done there. One option is function 
> *extract_sdialog_info* function from modules/presence/subscribe.c file.
> 
> Regards,
> Anca
> 
> Ghaith ALKAYYEM wrote:
> > Hello list,
> >
> > I was trying to play with the SIP header, So when i tried to access the
> > fields (to,from) in the sip_msg structure through a module c function
> > they were NULL and everything was included in the field headers.
> > I'd like to know whether there's something wrong or it's natural for
> > these fields to be NULL.
> >
> > struct sip_msg {
> > 	unsigned int id;               /* message id, unique/process*/
> > 	struct msg_start first_line;   /* Message first line */
> > 	struct via_body* via1;         /* The first via */
> > 	struct via_body* via2;         /* The second via */
> > 	struct hdr_field* headers;     /* All the parsed headers*/
> > 	struct hdr_field* last_header; /* Pointer to the last parsed header*/
> > 	hdr_flags_t parsed_flag;       /* Already parsed header field types */
> >
> > 	/* Via, To, CSeq, Call-Id, From, end of header*/
> > 	/* pointers to the first occurrences of these headers;
> > 	 * everything is also saved in 'headers' (see above)
> > 	 */
> >
> > 	/* shorcuts to known headers */
> > 	struct hdr_field* h_via1;
> > 	struct hdr_field* h_via2;
> > 	struct hdr_field* callid;
> > 	struct hdr_field* to;
> > 	struct hdr_field* cseq;
> > 	struct hdr_field* from;
> > 	...
> > 	...
> >
> >
> > _______________________________________________
> > Users mailing list
> > Users at lists.opensips.org
> > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> >
> >   
> 
> 
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> 




More information about the Users mailing list