r3576 - in trunk/libmsip: include/libmsip source/messages
erik at minisip.org
erik at minisip.org
Fri Apr 18 13:13:39 CEST 2008
Author: erik
Date: 2008-04-18 13:13:38 +0200 (Fri, 18 Apr 2008)
New Revision: 3576
Modified:
trunk/libmsip/include/libmsip/SipMessage.h
trunk/libmsip/source/messages/SipMessage.cxx
Log:
* Added method to make it easy to remove a header value from a SipMessage
Modified: trunk/libmsip/include/libmsip/SipMessage.h
===================================================================
--- trunk/libmsip/include/libmsip/SipMessage.h 2008-04-17 15:30:58 UTC (rev 3575)
+++ trunk/libmsip/include/libmsip/SipMessage.h 2008-04-18 11:13:38 UTC (rev 3576)
@@ -333,6 +333,14 @@
*/
MRef<SipHeaderValueWWWAuthenticate*> getHeaderValueWWWAuthenticate(int i);
+
+ /**
+ * Removes a header value from the packet. If it is the
+ * only value in the header then the entire header is
+ * removed as well.
+ */
+ void removeHeaderValue(MRef<SipHeaderValue*>);
+
protected:
/**
@@ -343,14 +351,17 @@
*/
bool addLine(std::string line);
+
+ void removeHeader(MRef<SipHeader*> header);
+
/**
* Gets the i:th header of a certain type. In most cases,
- * users are
+ * users want to access header values, and then they should
+ * use getHeaderValueNo() instead.
*/
MRef<SipHeader*> getHeaderOfType(int t, int i=0);
-
- void removeHeader(MRef<SipHeader*> header);
+
private:
minilist<MRef<SipHeader*> > headers;
MRef<SipMessageContent*> content;
Modified: trunk/libmsip/source/messages/SipMessage.cxx
===================================================================
--- trunk/libmsip/source/messages/SipMessage.cxx 2008-04-17 15:30:58 UTC (rev 3575)
+++ trunk/libmsip/source/messages/SipMessage.cxx 2008-04-18 11:13:38 UTC (rev 3576)
@@ -344,6 +344,24 @@
}
}
+void SipMessage::removeHeaderValue(MRef<SipHeaderValue*> hval){
+ int hi=0;
+ MRef<SipHeader*> hdr;
+ for (; hdr=getHeaderOfType( hval->getType(), hi ) ; hi++ ){
+ for (int vi=0; vi<hdr->getNoValues(); vi++){
+ if (hval== hdr->getHeaderValue(vi) ){
+ if (hdr->getNoValues()>1){
+ hdr->removeHeaderValue(vi);
+ }else{
+ removeHeader(hdr);
+ }
+ }
+
+ }
+
+ }
+}
+
string SipMessage::getBranch(){
MRef<SipHeaderValue*> firstVia = getHeaderValueNo( SIP_HEADER_TYPE_VIA, 0 );
if (firstVia){
More information about the Minisip-devel
mailing list