r3282 - in trunk: libminisip/source/subsystem_signaling/sip libmsip/include/libmsip libmsip/source libmsip/source/dialogs libmsip/source/messages

erik at minisip.org erik at minisip.org
Tue May 22 13:27:23 CEST 2007


Author: erik
Date: 2007-05-22 13:27:22 +0200 (Tue, 22 May 2007)
New Revision: 3282

Modified:
   trunk/libminisip/source/subsystem_signaling/sip/DefaultDialogHandler.cxx
   trunk/libminisip/source/subsystem_signaling/sip/SipDialogConfVoip.cxx
   trunk/libminisip/source/subsystem_signaling/sip/SipDialogPresenceServer.cxx
   trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoip.cxx
   trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoipClient.cxx
   trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoipServer.cxx
   trunk/libmsip/include/libmsip/SipMessage.h
   trunk/libmsip/include/libmsip/SipRequest.h
   trunk/libmsip/include/libmsip/SipResponse.h
   trunk/libmsip/source/SipLayerTransport.cxx
   trunk/libmsip/source/dialogs/SipDialog.cxx
   trunk/libmsip/source/messages/SipMessage.cxx
   trunk/libmsip/source/messages/SipRequest.cxx
   trunk/libmsip/source/messages/SipResponse.cxx
Log:

 
 Improved/fixed SIP message constructors:
 * SipMessage objects does not need to be assigned a branch
   parameter when they are created. Example: Requests generated
   by a UAC will be assigned a branch by the transaction layer,
   and not when the object is created.
 * The "dummy" parameter when parsing a SIP message object from
   a buffer is removed.
 * SipRequest: Don't have a default value for the request
   uri. The branch parameter has been removed (it made no sence).
 * SipResponse objects take a SipRequest as parameter
   instead of a SipMessage (you can only respond to requests).
 * SipMessage::setDestinationBranch(string) is
   renamed to SipMessage::setBranch(string).





Modified: trunk/libminisip/source/subsystem_signaling/sip/DefaultDialogHandler.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sip/DefaultDialogHandler.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libminisip/source/subsystem_signaling/sip/DefaultDialogHandler.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -301,11 +301,10 @@
 			reasonPhrase = "Method Not Allowed";
 		}
 
-		MRef<SipMessage*> req = *pkt;
+		MRef<SipRequest*> req = (SipRequest*)*pkt;
 		string branch = req->getDestinationBranch();
 		MRef<SipResponse*> resp =
-			new SipResponse(branch, statusCode, reasonPhrase,
-					*req);
+			new SipResponse(branch, statusCode, reasonPhrase, req);
 
 		if (statusCode==405)
 			resp->addHeader(new SipHeader(new SipHeaderValueAllow("INVITE,MESSAGE,BYE,ACK,OPTIONS,PRACK") ));
@@ -967,7 +966,7 @@
 
 
 void DefaultDialogHandler::sendIMOk(MRef<SipRequest*> bye, const string &branch){
-        MRef<SipResponse*> ok= new SipResponse( branch, 200,"OK", MRef<SipMessage*>(*bye) );
+        MRef<SipResponse*> ok= new SipResponse( branch, 200,"OK", bye );
         ok->getHeaderValueTo()->setParameter("tag","libminisip");
 
         MRef<SipMessage*> pref(*ok);

Modified: trunk/libminisip/source/subsystem_signaling/sip/SipDialogConfVoip.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sip/SipDialogConfVoip.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libminisip/source/subsystem_signaling/sip/SipDialogConfVoip.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -1187,7 +1187,7 @@
 }
 
 void SipDialogConfVoip::sendInviteOk(const string &branch){
-	MRef<SipResponse*> ok= new SipResponse(branch, 200,"OK", MRef<SipMessage*>(*getLastInvite()));	
+	MRef<SipResponse*> ok= new SipResponse(branch, 200,"OK", getLastInvite());	
 	ok->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
 
 //      There might be so that there are no SDP. Check!
@@ -1233,7 +1233,7 @@
 }
 
 void SipDialogConfVoip::sendByeOk(MRef<SipRequest*> bye, const string &branch){
-	MRef<SipResponse*> ok= new SipResponse( branch, 200,"OK", MRef<SipMessage*>(*bye) );
+	MRef<SipResponse*> ok= new SipResponse( branch, 200,"OK", bye );
 	ok->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
 
         MRef<SipMessage*> pref(*ok);
@@ -1242,7 +1242,7 @@
 }
 
 void SipDialogConfVoip::sendReject(const string &branch){
-	MRef<SipResponse*> ringing = new SipResponse(branch,486,"Temporary unavailable", MRef<SipMessage*>(*getLastInvite()));	
+	MRef<SipResponse*> ringing = new SipResponse(branch,486,"Temporary unavailable", getLastInvite());	
 	ringing->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
         MRef<SipMessage*> pref(*ringing);
         SipSMCommand cmd( pref,SipSMCommand::dialog_layer, SipSMCommand::transaction_layer);
@@ -1250,7 +1250,7 @@
 }
 
 void SipDialogConfVoip::sendRinging(const string &branch){
-	MRef<SipResponse*> ringing = new SipResponse(branch,180,"Ringing", MRef<SipMessage*>(*getLastInvite()));	
+	MRef<SipResponse*> ringing = new SipResponse(branch,180,"Ringing", getLastInvite());	
 	ringing->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
         MRef<SipMessage*> pref(*ringing);
         SipSMCommand cmd( pref, SipSMCommand::dialog_layer, SipSMCommand::transaction_layer);
@@ -1258,7 +1258,7 @@
 }
 
 void SipDialogConfVoip::sendNotAcceptable(const string &branch){
-	MRef<SipResponse*> not_acceptable = new SipResponse(branch,606,"Not Acceptable", MRef<SipMessage*>(*getLastInvite()));	
+	MRef<SipResponse*> not_acceptable = new SipResponse(branch,606,"Not Acceptable", getLastInvite());	
 	if( mediaSession && mediaSession->getErrorString() != "" ){
 		not_acceptable->addHeader( 
 			new SipHeader(new SipHeaderValueWarning(getSipStack()->getStackConfig()->externalContactIP, 399, mediaSession->getErrorString() ) ));

Modified: trunk/libminisip/source/subsystem_signaling/sip/SipDialogPresenceServer.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sip/SipDialogPresenceServer.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libminisip/source/subsystem_signaling/sip/SipDialogPresenceServer.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -253,7 +253,7 @@
 
 void SipDialogPresenceServer::sendSubscribeOk(MRef<SipRequest*> sub){
 	
-	MRef<SipResponse*> ok= new SipResponse("", 200,"OK", MRef<SipMessage*>(*sub));
+	MRef<SipResponse*> ok= new SipResponse("", 200,"OK", sub);
 	ok->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
 
         MRef<SipMessage*> pref(*ok);

Modified: trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoip.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoip.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoip.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -638,7 +638,7 @@
 }
 
 void SipDialogVoip::sendReferOk(const string &branch){
-	MRef<SipResponse*> ok= new SipResponse(branch, 202,"OK", MRef<SipMessage*>(*lastRefer));	
+	MRef<SipResponse*> ok= new SipResponse(branch, 202,"OK", lastRefer);	
 	ok->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
 	MRef<SipHeaderValue *> contact = 
 		new SipHeaderValueContact( 
@@ -652,7 +652,7 @@
 }
 
 void SipDialogVoip::sendByeOk(MRef<SipRequest*> bye, const string &branch){
-	MRef<SipResponse*> ok= new SipResponse( branch, 200,"OK", MRef<SipMessage*>(*bye) );
+	MRef<SipResponse*> ok= new SipResponse( branch, 200,"OK", bye );
 	ok->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
 
 	MRef<SipMessage*> pref(*ok);
@@ -661,7 +661,7 @@
 }
 
 void SipDialogVoip::sendNotifyOk(MRef<SipRequest*> notif, const string &branch){
-	MRef<SipResponse*> ok= new SipResponse( branch, 200, "OK", MRef<SipMessage*>(*notif) );
+	MRef<SipResponse*> ok= new SipResponse( branch, 200, "OK", notif );
 	ok->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
 
 	MRef<SipMessage*> pref(*ok);

Modified: trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoipClient.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoipClient.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoipClient.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -615,7 +615,7 @@
 }
 
 void SipDialogVoipClient::sendInviteOk(const string &branch){
-	MRef<SipResponse*> ok= new SipResponse(branch, 200,"OK", MRef<SipMessage*>(*getLastInvite()));	
+	MRef<SipResponse*> ok= new SipResponse(branch, 200,"OK", getLastInvite());	
 	ok->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
 	
 	MRef<SipHeaderValue *> contact = 

Modified: trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoipServer.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoipServer.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libminisip/source/subsystem_signaling/sip/SipDialogVoipServer.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -350,7 +350,7 @@
 		getSipStack()->enqueueCommand(cancelledCmd, HIGH_PRIO_QUEUE);
 
 		// Send 200 OK for CANCEL
-		MRef<SipResponse*> okResp = new SipResponse( branch, 200,"OK", MRef<SipMessage*>(*cancel) );
+		MRef<SipResponse*> okResp = new SipResponse( branch, 200,"OK", cancel );
 		okResp->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
 		MRef<SipMessage*> okMsg(*okResp);
 		SipSMCommand okCmd( okMsg, SipSMCommand::dialog_layer,
@@ -615,7 +615,7 @@
 
 
 void SipDialogVoipServer::sendInviteOk(const string &branch){
-	MRef<SipResponse*> ok= new SipResponse(branch, 200,"OK", MRef<SipMessage*>(*getLastInvite()));	
+	MRef<SipResponse*> ok= new SipResponse(branch, 200,"OK", getLastInvite() );	
 	ok->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
 	
 	MRef<SipHeaderValue *> contact = 
@@ -668,7 +668,7 @@
 }
 
 void SipDialogVoipServer::sendReject(const string &branch){
-	MRef<SipResponse*> ringing = new SipResponse(branch,486,"Temporary unavailable", MRef<SipMessage*>(*getLastInvite()));	
+	MRef<SipResponse*> ringing = new SipResponse(branch,486,"Temporary unavailable", getLastInvite());	
 	ringing->getHeaderValueTo()->setParameter("tag",dialogState.localTag);
 	MRef<SipMessage*> pref(*ringing);
 	SipSMCommand cmd( pref,SipSMCommand::dialog_layer, SipSMCommand::transaction_layer);
@@ -696,7 +696,7 @@
 }
 
 void SipDialogVoipServer::sendNotAcceptable(const string &branch){
-	MRef<SipResponse*> not_acceptable = new SipResponse(branch,406,"Not Acceptable", MRef<SipMessage*>(*getLastInvite()));	
+	MRef<SipResponse*> not_acceptable = new SipResponse(branch,406,"Not Acceptable", getLastInvite());	
 	if( mediaSession && mediaSession->getErrorString() != "" ){
 		not_acceptable->addHeader( 
 			new SipHeader(

Modified: trunk/libmsip/include/libmsip/SipMessage.h
===================================================================
--- trunk/libmsip/include/libmsip/SipMessage.h	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libmsip/include/libmsip/SipMessage.h	2007-05-22 11:27:22 UTC (rev 3282)
@@ -93,7 +93,7 @@
 		 * 			"INVITE"), and for a response it
 		 * 			is the string in SipResponse::type.
 		 */
-		SipMessage(std::string branch);
+		SipMessage();
 
 
 
@@ -102,7 +102,7 @@
 		 * Creates a SIP message from a buffer. This superclass
 		 * parses the buffer and creates headers and content.
 		 */
-		SipMessage(int dummy, std::string &build_from);
+		SipMessage(std::string &build_from);
 	public:
 		
 		virtual ~SipMessage();
@@ -349,7 +349,7 @@
 		MRef<SipHeaderValueWWWAuthenticate*> getHeaderValueWWWAuthenticate(int i);
 
 	protected:
-		void setDestinationBranch(std::string b){branch = b;}
+		void setBranch(std::string b){branch = b;}
 
 		/**
 		 * Parses one line of text to a SIP header and adds it to

Modified: trunk/libmsip/include/libmsip/SipRequest.h
===================================================================
--- trunk/libmsip/include/libmsip/SipRequest.h	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libmsip/include/libmsip/SipRequest.h	2007-05-22 11:27:22 UTC (rev 3282)
@@ -118,8 +118,7 @@
 
 		SipRequest(std::string &build_from);
 
-		SipRequest(std::string branch, const std::string &method,
-				const std::string &uri = "");
+		SipRequest(const std::string &method, const SipUri &uri);
 
 		virtual ~SipRequest();
 
@@ -132,8 +131,6 @@
 		virtual void setMethod(const std::string &method);
 		virtual std::string getMethod() const;
 
-// 		virtual void setUri(const std::string &uri);
-
 		virtual void setUri(const SipUri &uri);
 		virtual const SipUri& getUri() const;
 

Modified: trunk/libmsip/include/libmsip/SipResponse.h
===================================================================
--- trunk/libmsip/include/libmsip/SipResponse.h	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libmsip/include/libmsip/SipResponse.h	2007-05-22 11:27:22 UTC (rev 3282)
@@ -37,6 +37,7 @@
 #include<libmsip/libmsip_config.h>
 
 #include<libmsip/SipMessage.h>
+#include<libmsip/SipRequest.h>
 
 /**
  * 
@@ -48,7 +49,7 @@
 	public:
 		static const std::string type;
 
-		SipResponse(std::string branch, int32_t status, std::string status_desc, MRef<SipMessage*> inv);
+		SipResponse(std::string branch, int32_t status, std::string status_desc, MRef<SipRequest*> inv);
 
 
 		virtual std::string getMemObjectType() const {return "SipResponse";}

Modified: trunk/libmsip/source/SipLayerTransport.cxx
===================================================================
--- trunk/libmsip/source/SipLayerTransport.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libmsip/source/SipLayerTransport.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -781,7 +781,7 @@
 			|| (isInvite && !msg->getHeaderValueNo(SIP_HEADER_TYPE_CONTACT,0))){
 		if (isRequest){
 			MRef<SipMessage*> resp = new SipResponse(msg->getFirstViaBranch(),
-				   400, "Required header missing", msg );
+				   400, "Required header missing", (SipRequest*)*msg );
 			resp->setSocket(msg->getSocket());
 			sendMessage(resp, "TL", false);
 		}

Modified: trunk/libmsip/source/dialogs/SipDialog.cxx
===================================================================
--- trunk/libmsip/source/dialogs/SipDialog.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libmsip/source/dialogs/SipDialog.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -196,7 +196,7 @@
 }
 
 MRef<SipRequest*> SipDialog::createSipMessageSeq( const std::string &method, int seqNo ){
-	MRef<SipRequest*> req = new SipRequest("", method);
+	MRef<SipRequest*> req = new SipRequest(method, dialogState.getRemoteTarget());
 	
 	req->setUri( dialogState.getRemoteTarget() );
 	

Modified: trunk/libmsip/source/messages/SipMessage.cxx
===================================================================
--- trunk/libmsip/source/messages/SipMessage.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libmsip/source/messages/SipMessage.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -118,8 +118,7 @@
 
 
 
-SipMessage::SipMessage(string b):branch(b){
-	content=NULL;
+SipMessage::SipMessage(){
 }
 
 
@@ -226,7 +225,7 @@
 	return i;
 }
 
-SipMessage::SipMessage(int, string &buildFrom)
+SipMessage::SipMessage(string &buildFrom)
 {
 	uint32_t i;
 

Modified: trunk/libmsip/source/messages/SipRequest.cxx
===================================================================
--- trunk/libmsip/source/messages/SipRequest.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libmsip/source/messages/SipRequest.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -66,8 +66,7 @@
 	}else{
 		method = "ACK";
 	}
-	MRef<SipRequest*> req = new SipRequest(branch, method);
-	req->setUri(origReq->getUri());
+	MRef<SipRequest*> req = new SipRequest(method, origReq->getUri() );
 
 	req->addHeader(new SipHeader(new SipHeaderValueMaxForwards(70)));
 	
@@ -99,8 +98,7 @@
 // 							string to_uri
 							)
 {
-	MRef<SipRequest*> req = new SipRequest(branch, "CANCEL");
-	req->setUri(inv->getUri());
+	MRef<SipRequest*> req = new SipRequest("CANCEL", inv->getUri());
 
 	req->addHeader(new SipHeader( new SipHeaderValueMaxForwards(70)));
 	
@@ -148,8 +146,7 @@
 							int32_t seqNo,
 							const string& msg)
 {
-	MRef<SipRequest*> req = new SipRequest(branch, "MESSAGE");
-	req->setUri(toUri);
+	MRef<SipRequest*> req = new SipRequest("MESSAGE", toUri);
 	req->addDefaultHeaders(fromUri,toUri,"MESSAGE",seqNo,callId);
 	req->addHeader(new SipHeader(new SipHeaderValueUserAgent(HEADER_USER_AGENT_DEFAULT)));
 	req->setContent(new SipMessageContentIM(msg));
@@ -178,8 +175,7 @@
 							MRef<SipStack*> stack
                 )
 {
-	MRef<SipRequest*> req = new SipRequest(branch,"INVITE");
-	req->setUri(toUri);
+	MRef<SipRequest*> req = new SipRequest("INVITE", toUri);
 
 	req->addDefaultHeaders( fromUri, toUri, "INVITE", seq_no, call_id );
 	addHeaders(req, contact, stack);
@@ -194,8 +190,7 @@
 							int32_t seqNo
 							)
 {
-	MRef<SipRequest*> req = new SipRequest(branch, "NOTIFY");
-	req->setUri(toUri);
+	MRef<SipRequest*> req = new SipRequest("NOTIFY", toUri);
 	req->addDefaultHeaders(fromUri, toUri,"NOTIFY",seqNo,callId);
 	req->addHeader(new SipHeader(new SipHeaderValueUserAgent(HEADER_USER_AGENT_DEFAULT)));
 	req->addHeader(new SipHeader(new SipHeaderValueEvent("presence")));
@@ -209,8 +204,7 @@
 						       MRef<SipHeaderValueContact *> contactHdr,
 						       int32_t seq_no)
 {
-	MRef<SipRequest*> req = new SipRequest(branch, "REGISTER");
-	req->setUri( registrar );
+	MRef<SipRequest*> req = new SipRequest("REGISTER", registrar);
 
 	req->addDefaultHeaders(fromUri,fromUri,"REGISTER",seq_no,call_id);
 
@@ -229,10 +223,8 @@
 							const SipUri &contact,
 							int32_t seq_no)
 {
-	MRef<SipRequest*> req = new SipRequest(branch, "SUBSCRIBE", toUri.getString() );
+	MRef<SipRequest*> req = new SipRequest("SUBSCRIBE", toUri );
 
-	req->setUri(toUri);
-
 	req->addDefaultHeaders(fromUri, toUri,"SUBSCRIBE",seq_no, call_id);
 	req->addHeader(new SipHeader(new SipHeaderValueContact(contact)));
 	req->addHeader(new SipHeader(new SipHeaderValueEvent("presence")));
@@ -255,16 +247,14 @@
 }
 
 
-SipRequest::SipRequest(string branch, const string &method,
-		       const string &uri) :
-		SipMessage(branch), method(method),
+SipRequest::SipRequest(const string &method,
+		       const SipUri &uri) :
+		method(method),
 		uri(uri)
 {
-// 	if( this->uri == "" )
-// 		this->uri = "sip:";
 }
 
-SipRequest::SipRequest(string &build_from): SipMessage(-1, build_from){
+SipRequest::SipRequest(string &build_from): SipMessage(build_from){
 	init(build_from);
 }
 

Modified: trunk/libmsip/source/messages/SipResponse.cxx
===================================================================
--- trunk/libmsip/source/messages/SipResponse.cxx	2007-05-21 13:09:11 UTC (rev 3281)
+++ trunk/libmsip/source/messages/SipResponse.cxx	2007-05-22 11:27:22 UTC (rev 3282)
@@ -54,9 +54,9 @@
 SipResponse::SipResponse(string branch, 
 		int32_t status, 
 		string status_desc, 
-		MRef<SipMessage*> inv)
-			:SipMessage(branch)
+		MRef<SipRequest*> req)
 {
+	setBranch(branch);
 	setContent(NULL);
 
 	this->status_code=status;
@@ -65,9 +65,9 @@
 	MRef<SipHeaderValue*> mf = new SipHeaderValueMaxForwards(70);
 	addHeader(new SipHeader(*mf));
 	
-	int noHeaders = inv->getNoHeaders();
+	int noHeaders = req->getNoHeaders();
 	for (int i=0 ; i < noHeaders; i++){			//FIX: deep copy
-		MRef<SipHeader*> header = inv->getHeaderNo(i);
+		MRef<SipHeader*> header = req->getHeaderNo(i);
 		int headerType = header->getType();
 		switch (headerType){
 			case SIP_HEADER_TYPE_VIA:
@@ -83,7 +83,7 @@
 }
 
 //TODO: This constructor needs rewriting (re-use from sipmessage)
-SipResponse::SipResponse(string &resp): SipMessage(-1, resp)
+SipResponse::SipResponse(string &resp): SipMessage(resp)
 {
 	int len = resp.size();
 



More information about the Minisip-devel mailing list