< Previous by Date | Date Index | Next by Date > |
< Previous in Thread | Thread Index | Next in Thread > |
I
found this example from treg.cxx, looks like you may need to cast to an
outgoingevent object. virtual ProcessingResult process(Message*
msg) {
OutgoingEvent* og = dynamic_cast<OutgoingEvent*>(msg);
if (og)
{
SharedPtr<SipMessage> sip = og->message();
if (sip->isRequest() &&
sip->exists(h_Contacts) &&
sip->header(h_Contacts).size() == 1)
{
sip->header(h_Contacts).front().uri().host() = mContact.host();
sip->header(h_Contacts).front().uri().port() = mContact.port();
}
}
return DumFeature::FeatureDone;
} -justin From: Karlsson
[mailto:boost.regex@xxxxxxxxx] If delete sipMsg->remove, the application still get crash,
same line. On Sat, Oct 4, 2008 at 8:57 PM, Justin Matthews <jmatthewsr@xxxxxxxxx> wrote: Not sure why the dynamic_cast is always
returning 0. Are you running the cast in a project that does not have
RTTI enabled in the project/compiler settings? sipMsg->remove: look at the
implementation for SipMessage::setRawHeader. -justin From: Karlsson [mailto:boost.regex@xxxxxxxxx]
I have DEBUG it, the SipMessage* sipMsg
= dynamic_cast<SipMessage*>(msg); always return 0, it's never
succeed. And I have wrote these code: SipMessage* sipMsg = (SipMessage*)msg; Data Text = Data::From(*sipMsg); MessageBox(NULL, Text.c_str(),
"message", MB_ICONINFORMATION); The message box show it's SIP message
correctly, so I don't know why the dynamic_cast return 0. I have read your code, I saw you have delete
the sipMsg->remove(*headerBase); why ? Thanks On Sat, Oct 4, 2008 at 7:42 PM, Justin Matthews <jmatthewsr@xxxxxxxxx>
wrote: You need to dynamic cast the Message pointer
and if it's 0 then it's not a SipMessage and you should ignore it. Also, I think you still need to make a copy
of the HeaderFieldValue to allocate a buffer that is owned by the underlying
HeaderFieldValue. Untested code: DumFeature::ProcessingResult
MyFeature::process(Message* msg) SipMessage* sipMsg =
dynamic_cast<SipMessage*>(msg); if (sipMsg) { const resip::Data
headerName("User-Agent"); resip::Data
headerValue("test"); Headers::Type headerType =
Headers::getType(headerName.data(), headerName.size()); if (headerType != Headers::UNKNOWN) { HeaderFieldValueList * hfvs =
new HeaderFieldValueList(); hfvs->push_back(new
HeaderFieldValue(HeaderFieldValue(headerValue.data(), headerValue.size()))); sipMsg->setRawHeader(hfvs,
headerType); } } postCommand(auto_ptr<Message>(sipMsg)); return DumFeature::FeatureDone; } From: resiprocate-devel-bounces@xxxxxxxxxxxxxxx [mailto:resiprocate-devel-bounces@xxxxxxxxxxxxxxx]
On Behalf Of Karlsson Hi all, I have write a class which derived from DumFeature, and implemented
the process function: DumFeature::ProcessingResult MyFeature::process(Message* msg) SipMessage* sipMsg = (SipMessage*)msg; resip::HeaderBase * headerBase =
HeaderBase::getInstance(resip::Headers::getType(headerName.c_str(),headerName.size())); if (headerBase)
sipMsg->setRawHeader(hfvs,
Headers::getType(headerName.data(), headerName.size())); } postCommand(auto_ptr<Message>(sipMsg)); return DumFeature::FeatureDone; My application is crashed on sipMsg->remove(*headerBase); I have
debug this function: void Above code I have using with MessageDecorator::decorateMessage
function, it's working fine. And I try to use SipMessage* sipMsg = dynamic_cast<SipMessage*>(msg);
to instead SipMessage* sipMsg = (SipMessage*)msg; but it's failed, the dynamic_cast result it 0. Thanks |