Thanks Andy, it works like magic, you saved my day On Thu, Sep 5, 2013 at 11:12 AM, Andreas Wehrmann <andreas_wehrmann at yahoo.at > wrote: > If you read the documentation *carefully* (and examine the code > implementing pjsip_generic_string_hdr_**init2() ) > you'll find out, that this function only creates a reference to the > key-value pair. > Thus, if you call the function a second time with the same string_hdr > reference, you'll overwrite the previous reference. > What you're basically doing is adding the same header structure over and > over again. > > I know about this because I had the exact same problem. > My solution is to explicitly allocate a header structure for each header > that I want to add: > > SipHeaderMap::const_iterator hit( additional_header.begin() ); > for(; additional_header.end() != hit; ++hit ) > { > PLOG_NOTICE( "adding additional SIP header: %s = %s", > hit->first.c_str(), > hit->second.c_str() ); > pj_str_t add_hdr_name; > pj_str_t add_hdr_value; > > pj_cstr( &add_hdr_name, hit->first.c_str() ); > pj_cstr( &add_hdr_value, hit->second.c_str() ); > > pjsip_generic_string_hdr* add_hdr = pjsip_generic_string_hdr_**create( > PeerRef.privatePool(), &add_hdr_name, &add_hdr_value ); > pj_list_push_back(&msg_data.**hdr_list, add_hdr); > } > > Of course if you do it like that, you'll have to have a memory pool to > allocate from. > In my case every call creates its own private pool, so the pool is > released as soon as the call is gone. > > Regards, > Andy > > > > On 09/04/2013 05:09 PM, Rohit Singh wrote: > >> sorry for bad format ill post the code again >> >> pjsua_msg_data msg_data; >> pjsip_generic_string_hdr subject; >> pj_str_t hvalue, hname; >> >> >> for( /* all keys and value */){ >> >> pjsua_msg_data_init(&msg_data)**; >> hname = // key >> char * headerValue = //value >> hvalue = pj_str(headerValue); >> pjsip_generic_string_hdr_init2 (&subject, &hname, &hvalue); >> >> pj_list_push_back(&msg_data.**hdr_list, &subject); >> >> >> } >> when i log i get all keys and values but in case of headers i only get the >> last one >> >> >> >> >> >> On Wed, Sep 4, 2013 at 8:27 PM, Rohit Singh <soulgamebits at gmail.com> >> wrote: >> >> Hi guys, >>> i am developing an ios app using pjsip as sip stack >>> i am trying to send multiple custom headers in my invite, but the code >>> adds only the last one >>> >>> i am looping this code >>> like >>> >>> >>> pjsua_msg_data msg_data; >>> pjsip_generic_string_hdr subject; >>> >>> pj_str_t hvalue, hname; >>> >>> for(NSString *key in [headers allKeys]){ >>> >>> >>> >>> NSLog(@"Call.m key value in call %@,%@",key,[headers >>> objectForKey:key] ); >>> >>> pjsua_msg_data_init(&msg_data)**; >>> >>> >>> >>> hname = pj_str((char *)[key UTF8String]); >>> >>> >>> >>> char * headerValue=(char *)[(NSString *)[headers >>> objectForKey:key] >>> UTF8String]; >>> >>> >>> >>> hvalue = pj_str(headerValue); >>> >>> >>> >>> // pjsip_generic_string_hdr_**create(pool1, &hname, &hvalue); >>> >>> pjsip_generic_string_hdr_init2 (&subject, &hname, &hvalue); >>> >>> >>> >>> pj_list_push_back(&msg_data.**hdr_list, &subject); >>> >>> >>> } >>> >>> >> >> ______________________________**_________________ >> Visit our blog: http://blog.pjsip.org >> >> pjsip mailing list >> pjsip at lists.pjsip.org >> http://lists.pjsip.org/**mailman/listinfo/pjsip_lists.**pjsip.org<http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org> >> > > > ______________________________**_________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/**mailman/listinfo/pjsip_lists.**pjsip.org<http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org> > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20130905/ba11daeb/attachment-0001.html>