Our full history is:

http://fisheye.freeswitch.org/changelog/FreeSWITCH/libs/sofia-sip?max=30&view=fe

or just pull directly from freeswitch git tree... the issue is, some of our 
fixes change behavior statically instead of having a tag to change behavior, so 
all the patches may not be appropriate.. Its on my list to start moving the 
good patches back into the sofia-sip tree, but i never seem to find the time.  
That being said, if you want to put some time in to that, I'd be happy to do 
the actual pushes to gitorious tree, just let me know.

Mike


On Apr 24, 2014, at 10:56 AM, Dave Horton <d...@dchorton.com> wrote:

> Thanks, that looks exactly like the same bug (and fix). Just out of interest, 
> what kind of problem and what platform did you see problems manifest that led 
> you to make this fix ?  
> 
> I haven't looked closely at the freeswitch fixes that haven't been ported 
> back anywhere, but now I think I should.  Can you send me a link to a commit 
> history?
> 
> Dave
> On Apr 24, 2014, at 10:52 AM, Michael Jerris <m...@jerris.com> wrote:
> 
> Looks about right.. i had something very similar from the FreeSWITCH tree:
> 
> diff --git a/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.c 
> b/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.c
> index d75b975..c312445 100644
> --- a/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.c
> +++ b/libs/sofia-sip/libsofia-sip-ua/msg/msg_parser.c
> @@ -2470,8 +2470,6 @@ int msg_header_prepend(msg_t *msg,
>  msg_header_t **
>  msg_hclass_offset(msg_mclass_t const *mc, msg_pub_t const *mo, msg_hclass_t 
> *hc)
>  {
> -  int i;
> -
>    assert(mc && hc);
>  
>    if (mc == NULL || hc == NULL)
> @@ -2483,12 +2481,16 @@ msg_hclass_offset(msg_mclass_t const *mc, msg_pub_t 
> const *mo, msg_hclass_t *hc)
>        if (mc->mc_hash[j].hr_class == hc) {
>         return (msg_header_t **)((char *)mo + mc->mc_hash[j].hr_offset);
>        }
> -  }
> -  else
> +  } else {
>      /* Header has no name. */
> -    for (i = 0; i <= 6; i++)
> -      if (hc->hc_hash == mc->mc_request[i].hr_class->hc_hash)
> -       return (msg_header_t **)((char *)mo + mc->mc_request[i].hr_offset);
> +    if (hc->hc_hash == mc->mc_request[0].hr_class->hc_hash) return 
> (msg_header_t **)((char *)mo + mc->mc_request[0].hr_offset);
> +    if (hc->hc_hash == mc->mc_status[0].hr_class->hc_hash) return 
> (msg_header_t **)((char *)mo + mc->mc_status[0].hr_offset);
> +    if (hc->hc_hash == mc->mc_separator[0].hr_class->hc_hash) return 
> (msg_header_t **)((char *)mo + mc->mc_separator[0].hr_offset);
> +    if (hc->hc_hash == mc->mc_payload[0].hr_class->hc_hash) return 
> (msg_header_t **)((char *)mo + mc->mc_payload[0].hr_offset);
> +    if (hc->hc_hash == mc->mc_unknown[0].hr_class->hc_hash) return 
> (msg_header_t **)((char *)mo + mc->mc_unknown[0].hr_offset);
> +    if (hc->hc_hash == mc->mc_error[0].hr_class->hc_hash) return 
> (msg_header_t **)((char *)mo + mc->mc_error[0].hr_offset);
> +    if (hc->hc_hash == mc->mc_multipart[0].hr_class->hc_hash) return 
> (msg_header_t **)((char *)mo + mc->mc_multipart[0].hr_offset);
> +  }
>  
>    return NULL;
>  }
> 
> 
> On Apr 24, 2014, at 10:26 AM, Dave Horton <d...@dchorton.com> wrote:
> 
>> I recently came across a problem that manifested only on Fedora 20 and Mint 
>> (not on Ubunto or Centos 6.x).  When using SIPTAG_PAYLOAD_STR to add a body 
>> to an outgoing SIP message, the message goes out without any body; i.e., 
>> it's as if that tag was silently ignored.  My program would also subsquently 
>> crash.  Again, this problem was only experienced on certain Linux distros
>> 
>> I eventually tracked it to this code in the msg_hclass_offset function in 
>> msg_parser.c.
>> 
>>   else
>>     /* Header has no name. */
>>     for (i = 0; i <= 6; i++)
>>       if (hc->hc_hash == mc->mc_request[i].hr_class->hc_hash)
>>      return (msg_header_t **)((char *)mo + mc->mc_request[i].hr_offset);
>> 
>> 
>> Something in that non-standard way of iterating through the msg_href_t 
>> elements in the msg_mclass_s structure was causing weird results.  When I 
>> stepped through the code, which is supposed to iterate across the bolded 
>> elements in the struct below (you can see that I call it "non-standard" 
>> because it is incrementing across an array that has only one member, but 
>> using that as a device to check each of the 6 members) what I saw was that 
>> an incorrect match was returned, and thus the offset to the sip_payload_t 
>> member which this function returns was incorrect.  Hence the bad things 
>> happened.  
>> 
>> struct msg_mclass_s
>> {
>>   struct msg_hclass_s
>>                 mc_hclass[1];     /**< Recursive header class */
>>   char const   *mc_name;     /**< Protocol name, e.g., "SIP/2.0" */
>>   void         *mc_tag;          /**< Protocol-specific tag */
>>   unsigned      mc_flags;     /**< Default flags */
>>   unsigned      mc_msize;     /**< Size of public message structure */
>>   /** Function extracting the message contents. */
>>   issize_t    (*mc_extract_body)(msg_t *msg, msg_pub_t *pub,
>>                      char b[], isize_t bsiz, int eos);
>> 
>>   msg_href_t    mc_request[1];     /**< Request line reference */
>>   msg_href_t    mc_status[1];     /**< Status line reference */
>>   msg_href_t    mc_separator[1];/**< Separator line reference */
>>   msg_href_t    mc_payload[1];     /**< Message body reference */
>>   msg_href_t    mc_unknown[1];     /**< Reference for unknown headers */
>>   msg_href_t    mc_error[1];     /**< Reference for erroneous header */
>>   msg_href_t    mc_multipart[1];/**< Multipart body reference */
>>   msg_href_t const *
>>                 mc_short;     /**< Short forms (or NULL) */
>>   short         mc_hash_size;     /**< Size of parsing table  */
>>   short         mc_hash_used;     /**< Number of headers in parsing table */
>>   /** Hash table for parsing containing reference for each header. */
>>   msg_href_t    mc_hash[MC_HASH_SIZE];
>> };
>> 
>> Here is my commit that fixed things in my public repo: 
>> https://github.com/davehorton/sofia-sip/commit/51bb86448d952a5997a8d7e38c545c164fa112a2
>> 
>> Dave
>> ------------------------------------------------------------------------------
>> Start Your Social Network Today - Download eXo Platform
>> Build your Enterprise Intranet with eXo Platform Software
>> Java Based Open Source Intranet - Social, Extensible, Cloud Ready
>> Get Started Now And Turn Your Intranet Into A Collaboration Platform
>> http://p.sf.net/sfu/ExoPlatform_______________________________________________
>> Sofia-sip-devel mailing list
>> Sofia-sip-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/sofia-sip-devel
> 
> 

------------------------------------------------------------------------------
Start Your Social Network Today - Download eXo Platform
Build your Enterprise Intranet with eXo Platform Software
Java Based Open Source Intranet - Social, Extensible, Cloud Ready
Get Started Now And Turn Your Intranet Into A Collaboration Platform
http://p.sf.net/sfu/ExoPlatform
_______________________________________________
Sofia-sip-devel mailing list
Sofia-sip-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sofia-sip-devel

Reply via email to