r3554 - in trunk/libminisip: include/libminisip/media include/libminisip/signaling/sdp source/subsystem_media source/subsystem_signaling/sdp

erik at minisip.org erik at minisip.org
Thu Dec 13 16:44:24 CET 2007


Author: erik
Date: 2007-12-13 16:44:23 +0100 (Thu, 13 Dec 2007)
New Revision: 3554

Modified:
   trunk/libminisip/include/libminisip/media/MediaStream.h
   trunk/libminisip/include/libminisip/signaling/sdp/SdpHeaderM.h
   trunk/libminisip/include/libminisip/signaling/sdp/SdpPacket.h
   trunk/libminisip/source/subsystem_media/MediaStream.cxx
   trunk/libminisip/source/subsystem_media/Session.cxx
   trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderM.cxx
   trunk/libminisip/source/subsystem_signaling/sdp/SdpPacket.cxx
Log:

libminisip:
  * Format types in SDP "m=" lines were handled as integers.
    This is always true for (S)RTP media, but it is not true
    for other kinds of media.

    Now formats are handled as strings instead to support
    other media than what is carried inside SRTP packets.




Modified: trunk/libminisip/include/libminisip/media/MediaStream.h
===================================================================
--- trunk/libminisip/include/libminisip/media/MediaStream.h	2007-12-13 12:18:12 UTC (rev 3553)
+++ trunk/libminisip/include/libminisip/media/MediaStream.h	2007-12-13 15:44:23 UTC (rev 3554)
@@ -165,7 +165,7 @@
 		MRef<RealtimeMedia *> media;
 		uint32_t csbId;
 
-		uint8_t localPayloadType;
+		std::string localPayloadType; //For RTP media, this is a number
 
 		MRef<CryptoContext *> initCrypto( uint32_t ssrc, uint16_t seq_no );
 		MRef<KeyAgreement *> ka;
@@ -480,7 +480,7 @@
 		MRef<IPAddress *> remoteAddress;
 		Mutex senderLock;
 
-		uint8_t payloadType;
+		std::string payloadType;
 		MRef<CodecState *> selectedCodec;
 
 		//Cesc -- does it conflict with bool disabled???

Modified: trunk/libminisip/include/libminisip/signaling/sdp/SdpHeaderM.h
===================================================================
--- trunk/libminisip/include/libminisip/signaling/sdp/SdpHeaderM.h	2007-12-13 12:18:12 UTC (rev 3553)
+++ trunk/libminisip/include/libminisip/signaling/sdp/SdpHeaderM.h	2007-12-13 15:44:23 UTC (rev 3554)
@@ -53,9 +53,9 @@
 
 		virtual std::string getMemObjectType() const {return "SdpHeaderM";}
 
-		void addFormat(int32_t format);
+		void addFormat(std::string format);
 		int32_t getNrFormats();
-		int32_t getFormat(int32_t i);
+		std::string getFormat(int32_t i);
 
 		std::string getMedia();
 		void setMedia(std::string m);
@@ -75,9 +75,9 @@
 		std::string getAttribute(std::string key, uint32_t index);
 		std::list<MRef<SdpHeaderA*> > getAttributes();
 
-		std::string getRtpMap(uint32_t format);
+		std::string getRtpMap(std::string format);
 		
-		std::string getFmtpParam(uint32_t format);
+		std::string getFmtpParam(std::string format);
 
 		void setConnection( MRef<SdpHeaderC*> c );
 		MRef<SdpHeaderC*> getConnection();
@@ -87,7 +87,7 @@
 		int32_t port;
 		int32_t nPorts;
 		std::string transport;
-		std::vector<int32_t> formats;
+		std::vector<std::string> formats;
 		std::list<MRef<SdpHeaderA*> >attributes;
 		MRef<SdpHeaderC*> connection;
 };

Modified: trunk/libminisip/include/libminisip/signaling/sdp/SdpPacket.h
===================================================================
--- trunk/libminisip/include/libminisip/signaling/sdp/SdpPacket.h	2007-12-13 12:18:12 UTC (rev 3553)
+++ trunk/libminisip/include/libminisip/signaling/sdp/SdpPacket.h	2007-12-13 15:44:23 UTC (rev 3554)
@@ -65,9 +65,9 @@
 	
 
 		std::vector<MRef<SdpHeader*> > getHeaders();
-		int32_t getCodecMatch(SdpPacket &pack);
-		int32_t getFirstMediaFormat();
-		bool mediaFormatAvailable(int32_t f);
+		std::string getFormatMatch(SdpPacket &pack);
+		std::string getFirstMediaFormat();
+		bool mediaFormatAvailable(std::string f);
 		
 		/**
  		 * sets an attribute in the Session Level Part (before the first 'm'

Modified: trunk/libminisip/source/subsystem_media/MediaStream.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/MediaStream.cxx	2007-12-13 12:18:12 UTC (rev 3553)
+++ trunk/libminisip/source/subsystem_media/MediaStream.cxx	2007-12-13 15:44:23 UTC (rev 3554)
@@ -89,7 +89,7 @@
 	string sdpFmtpParam;
 
         //	int i;
-        uint8_t sdpPayloadType = (uint8_t) m->getFormat( formatIndex );
+        string sdpPayloadType = m->getFormat( formatIndex );
 
         media->handleMHeader( m );
 
@@ -139,7 +139,7 @@
 
                 }
                 else{
-                        if( sdpPayloadType == codecPayloadType ){
+                        if( sdpPayloadType == itoa(codecPayloadType) ){
 				localPayloadType = codecPayloadType;
                                 return true;
                         }else{
@@ -569,8 +569,8 @@
 		packet->getHeader().setPayloadType( 101 );
 	}
 	else{
-		if( payloadType != 255 )
-			packet->getHeader().setPayloadType( payloadType );
+		if( payloadType != "255" )
+			packet->getHeader().setPayloadType( atoi(payloadType.c_str() ) );
 		else
 			packet->getHeader().setPayloadType( selectedCodec->getSdpMediaType() );
 	}
@@ -673,8 +673,8 @@
 
 	if( result && !selectedCodec ){
 		selectedCodec = media->createCodecInstance(
-				localPayloadType  );
-		payloadType = (uint8_t)m->getFormat( formatIndex );
+				atoi( localPayloadType.c_str() )  );
+		payloadType = (uint8_t)atoi(m->getFormat( formatIndex ).c_str());
 	}
 
 	return result;

Modified: trunk/libminisip/source/subsystem_media/Session.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/Session.cxx	2007-12-13 12:18:12 UTC (rev 3553)
+++ trunk/libminisip/source/subsystem_media/Session.cxx	2007-12-13 15:44:23 UTC (rev 3554)
@@ -321,7 +321,7 @@
 			payloadType = (*iC)->getSdpMediaType();
 			rtpmap = (*iC)->getSdpMediaAttributes();
 			
-			m->addFormat( payloadType );
+			m->addFormat( itoa(payloadType) );
 			if( rtpmap != "" ){
 				MRef<SdpHeaderA*> a = new SdpHeaderA("a=X");
 				a->setAttributes( "rtpmap:" + itoa( payloadType) + " " + rtpmap );
@@ -334,7 +334,7 @@
 			}
 		}
 		//added static DTMF SDP headers in INVITE
-		m->addFormat(101);
+		m->addFormat( "101" );
 		MRef<SdpHeaderA*> dtmf = new SdpHeaderA("a=X");
 		dtmf->setAttributes("rtpmap:101 telephone-event/8000");
 		m->addAttribute(*dtmf);
@@ -776,15 +776,15 @@
 					
 					/* found a receiver, accept the offer */
 					//add the payload type to the offer, as accepted ...
-					int payloadTypeAccepted = offerM->getFormat( j );
-					string payloadStr = itoa( payloadTypeAccepted );
+					string payloadTypeAccepted = offerM->getFormat( j );
+					//string payloadStr = itoa( payloadTypeAccepted );
 					answerM->addFormat( payloadTypeAccepted );
 					MRef<SdpHeaderA*> rtpmap = new SdpHeaderA("a=X");
 					MRef<SdpHeaderA*> fmtp = new SdpHeaderA("a=X");
 					       
-					rtpmap->setAttributes( "fmtp:" + payloadStr
+					rtpmap->setAttributes( "fmtp:" + /*payloadStr*/ payloadTypeAccepted
 								 + " " + offerM->getRtpMap( payloadTypeAccepted ) );
-					fmtp->setAttributes(   "rtpmap:" + payloadStr
+					fmtp->setAttributes(   "rtpmap:" + /*payloadStr*/ payloadTypeAccepted
 								+ " " + offerM->getRtpMap( payloadTypeAccepted ) );
 					
 					answerM->addAttribute( *rtpmap );

Modified: trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderM.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderM.cxx	2007-12-13 12:18:12 UTC (rev 3553)
+++ trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderM.cxx	2007-12-13 15:44:23 UTC (rev 3554)
@@ -95,7 +95,7 @@
 		while (buildFrom[i]!=' ' && i<len )
 			f+=buildFrom[i++];
 		if (f.length()>0){
-			formats.push_back(atoi(f.c_str()));
+			formats.push_back( f );
 		}
 		
 		if ( i>=len )
@@ -174,7 +174,7 @@
 	this->transport=t;
 }
 
-void SdpHeaderM::addFormat(int32_t f){
+void SdpHeaderM::addFormat(string f){
 	formats.push_back(f);;
 }
 
@@ -182,7 +182,7 @@
 	return (int32_t)formats.size();
 }
 
-int32_t SdpHeaderM::getFormat(int32_t i){
+string SdpHeaderM::getFormat(int32_t i){
 	return formats[i];
 }
 
@@ -197,7 +197,7 @@
 	ret+=" "+transport;
 
 	for (unsigned i=0; i< formats.size(); i++)
-		ret+=" "+itoa(formats[i]);
+		ret+=" "+formats[i];
 
 	if( connection )
 		ret += "\r\n" + connection->getString();
@@ -224,7 +224,7 @@
 	return "";
 }
 
-string SdpHeaderM::getRtpMap(uint32_t format){
+string SdpHeaderM::getRtpMap(std::string format){
 	int i=0;
 	string attrib;
 	string value = "rtpmap";
@@ -232,7 +232,7 @@
 	while((attrib = getAttribute(value, i)) != ""){
 		size_t firstSpace = attrib.find(" ");
 // 		cerr << "SdpHeaderM::getRtpMap - value retrieved = " << attrib << "; substr = " << attrib.substr(0, firstSpace) << endl;
-		if( attrib.substr(0, firstSpace) == itoa(format) ){
+		if( attrib.substr(0, firstSpace) == format ){
 			return attrib.substr(firstSpace+1, attrib.size());
 		}
 		i++;
@@ -240,7 +240,7 @@
 	return "";
 }
 
-string SdpHeaderM::getFmtpParam(uint32_t format){
+string SdpHeaderM::getFmtpParam(string format){
 	int i=0;
 	string attrib;
 	string value = "fmtp";
@@ -248,7 +248,7 @@
 	while((attrib = getAttribute(value, i)) != ""){
 		size_t firstSpace = attrib.find(" ");
 // 		cerr << "SdpHeaderM::getFmtpParam - value retrieved = " << attrib << "; substr = " << attrib.substr(0, firstSpace) << endl;
-		if( attrib.substr(0, firstSpace) == itoa(format) ){
+		if( attrib.substr(0, firstSpace) == format ){
 			return attrib.substr(firstSpace+1, attrib.size());
 		}
 		i++;

Modified: trunk/libminisip/source/subsystem_signaling/sdp/SdpPacket.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sdp/SdpPacket.cxx	2007-12-13 12:18:12 UTC (rev 3553)
+++ trunk/libminisip/source/subsystem_signaling/sdp/SdpPacket.cxx	2007-12-13 15:44:23 UTC (rev 3554)
@@ -249,7 +249,7 @@
 }
 	
 
-int32_t SdpPacket::getCodecMatch(SdpPacket &pack){
+string SdpPacket::getFormatMatch(SdpPacket &pack){
 	MRef<SdpHeaderM*> mym;
 	MRef<SdpHeaderM*> otherm;
 
@@ -306,7 +306,7 @@
 }
 #endif
 
-int32_t SdpPacket::getFirstMediaFormat(){
+string SdpPacket::getFirstMediaFormat(){
 	MRef<SdpHeaderM*> mym;
 
 	for (unsigned i = 0 ; i< headers.size(); i++)
@@ -322,7 +322,7 @@
 
 }
 
-bool SdpPacket::mediaFormatAvailable(int32_t f){
+bool SdpPacket::mediaFormatAvailable(string f){
 	MRef<SdpHeaderM*> mym;
 
 	unsigned int i;



More information about the Minisip-devel mailing list