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