r3555 - in trunk/libminisip: . include/libminisip/media source/subsystem_media source/subsystem_media/vnc

erik at minisip.org erik at minisip.org
Fri Dec 14 11:08:50 CET 2007


Author: erik
Date: 2007-12-14 11:08:50 +0100 (Fri, 14 Dec 2007)
New Revision: 3555

Added:
   trunk/libminisip/source/subsystem_media/vnc/
   trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspace.cxx
   trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspace.h
   trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspacePlugin.cxx
   trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspacePlugin.h
Modified:
   trunk/libminisip/Makefile.am
   trunk/libminisip/configure.ac
   trunk/libminisip/include/libminisip/media/MediaStream.h
   trunk/libminisip/include/libminisip/media/ReliableMedia.h
   trunk/libminisip/source/subsystem_media/Media.cxx
   trunk/libminisip/source/subsystem_media/MediaHandler.cxx
   trunk/libminisip/source/subsystem_media/MediaStream.cxx
   trunk/libminisip/source/subsystem_media/ReliableMedia.cxx
   trunk/libminisip/source/subsystem_media/Session.cxx
   trunk/libminisip/source/subsystem_media/Session.h
Log:
libminisip:
 * Added presentaiton sharing plugin embryo to libminisip.

   Okay, I have some problems creating a new plugin. I can't
   call pure virtual functions in the new plugin (I call 
   it on a reference to a ReliableMedia, and the method is 
   implemented in the plugin, but I don't get it to work).

   Perhaps I have not missed some limitation of dynamic 
   loading of code (at one point I had an ABI error 
   message). With hope that there is something else wrong I
   add the code as a built in codec with "configure --enable-vnc"
   while testing.

   Note that "--enable-vnc" will make minisip add SDP lines
   that does not make any sence (minisip will not set up
   any application sharing media).





Modified: trunk/libminisip/Makefile.am
===================================================================
--- trunk/libminisip/Makefile.am	2007-12-13 15:44:23 UTC (rev 3554)
+++ trunk/libminisip/Makefile.am	2007-12-14 10:08:50 UTC (rev 3555)
@@ -258,6 +258,21 @@
 libspaudio_src = source/subsystem_media/spaudio/SpAudio.cxx
 
 #
+# VNC plugin
+#
+if VNC_SUPPORT
+libvnc_src = source/subsystem_media/vnc/MediaSharedWorkspace.cxx \
+		source/subsystem_media/vnc/MediaSharedWorkspace.h \
+		source/subsystem_media/vnc/MediaSharedWorkspacePlugin.cxx \
+		source/subsystem_media/vnc/MediaSharedWorkspacePlugin.h
+else
+libvnc_src =
+endif
+
+
+
+
+#
 # Video plugin
 #
 if VIDEO_SUPPORT
@@ -279,6 +294,9 @@
         libvideo_libadd =
         display_src = source/subsystem_media/video/display/VideoDisplay.cxx
 
+
+
+
 #
 # X11 display plugin
 #
@@ -442,6 +460,7 @@
 			$(libp2t_src) \
 			$(librtp_src) \
 			$(libmsrp_src) \
+			$(libvnc_src) \
 			$(libzrtp_src) \
 			$(libsdp_src) \
 			$(libsoundcard_src) \

Modified: trunk/libminisip/configure.ac
===================================================================
--- trunk/libminisip/configure.ac	2007-12-13 15:44:23 UTC (rev 3554)
+++ trunk/libminisip/configure.ac	2007-12-14 10:08:50 UTC (rev 3555)
@@ -270,7 +270,23 @@
 AM_CONDITIONAL(ONLINECONF_SUPPORT, [test "x${onlineconf_support}" = "xyes"])
 
 
+# VNC SUPPORT
 
+AC_ARG_ENABLE(vnc,
+    AS_HELP_STRING([--enable-vnc],
+    	[enables support for presentation sharing using vnc-rfb (under development).])
+   )
+
+
+if test "x${enable_vnc}" = "xyes"; then
+   vnc_support="yes"
+   AC_DEFINE(VNC_SUPPORT, [], [Support configuration stored online])
+fi
+AM_CONDITIONAL(VNC_SUPPORT, [test "x${vnc_support}" = "xyes"])
+
+
+
+
 dnl #############
 dnl VIDEO SUPPORT
 dnl #############

Modified: trunk/libminisip/include/libminisip/media/MediaStream.h
===================================================================
--- trunk/libminisip/include/libminisip/media/MediaStream.h	2007-12-13 15:44:23 UTC (rev 3554)
+++ trunk/libminisip/include/libminisip/media/MediaStream.h	2007-12-14 10:08:50 UTC (rev 3555)
@@ -31,6 +31,7 @@
 
 #include<libminisip/media/rtp/CryptoContext.h>
 #include<libminisip/media/RealtimeMedia.h>
+#include<libminisip/media/ReliableMedia.h>
 #include"RtpReceiver.h"
 #include<libminisip/media/rtp/SRtpPacket.h>
 
@@ -45,57 +46,115 @@
 class SdpHeaderM;
 class IpProvider;
 class RealtimeMedia;
+class ReliableMedia;
 
-/**
- * Abstract class that implements common functions to a
- * MediaStreamSender and MediaStreamReceiver
- */
 
-class LIBMINISIP_API RealtimeMediaStream : public MObject{
-	public:
-		/**
-		 * Starts the transmission or reception of a the stream.
-		 */
-		virtual void start() = 0;
+class LIBMINISIP_API MediaStream : public MObject {
+public:
+	MediaStream(std::string callId_, MRef<Media*> m): callId(callId_),media(m){
+	
+	}
+	/**
+	 * Starts the transmission or reception of a the stream.
+	 */
+	virtual void start() = 0;
 
-		/**
-		 * Stops the transmission or reception of a the stream.
-		 */
-		virtual void stop() = 0;
+	/**
+	 * Stops the transmission or reception of a the stream.
+	 */
+	virtual void stop() = 0;
 
 #ifdef DEBUG_OUTPUT
-		virtual std::string getDebugString();
+	virtual std::string getDebugString();
 #endif
 
-		/**
-		 * Returns the media type corresponding to this stream
-		 * (video, audio...) as it appears in the session
-		 * description (SDP).
-		 * @returns the type as a string
-		 */
-		std::string getSdpMediaType();/* audio, video, application... */
+	/**
+	 * Returns the media type corresponding to this stream
+	 * (video, audio...) as it appears in the session
+	 * description (SDP).
+	 * @returns the type as a string
+	 */
+	std::string getSdpMediaType();/* audio, video, application... */
 
-		/**
-		 * Returns additional media attributes that are to appear
-		 * in the session description (SDP) as a: header.
-		 * @returns the attributes as a list of string, each
-		 * of them should go into a a: header
-		 */
-		std::list<std::string> getSdpAttributes();
+	/**
+	 * Returns additional media attributes that are to appear
+	 * in the session description (SDP) as a: header.
+	 * @returns the attributes as a list of string, each
+	 * of them should go into a a: header
+	 */
+	std::list<std::string> getSdpAttributes();
 
+
+	std::string getCallId(){return callId;}
+
+	/**
+	 * Used to query the port on which the media is received for
+	 * a receiver, respectively where it is sent to for a sender
+	 * @returns the port.
+	 */
+	virtual uint16_t getPort()=0;
+
+	/**
+	  Returns an MRef to the Media object used by this media stream.
+	  Use with care.
+	  */
+	MRef<Media *> getMedia() { return media; }
+
+protected:
+	std::string callId;
+	MRef<Media *> media;
+};
+
+class LIBMINISIP_API ReliableMediaStream : public MediaStream {
+public:
+	ReliableMediaStream(std::string callId, MRef<ReliableMedia*> m);
+
+	std::string getTransport(){return "TCP";} //TODO: support other (secure) transports
+
+	/**
+	 * Examples
+	 *                      Media formats
+	 *                         vvvvvv
+	 * m = audio 12345 RTP/AVP 0 1 99
+	 *
+	 *                     vvv
+	 * m = image 12345 TCP t38
+	 *
+	 * @return  The list of formats supported by the reliable media
+	 * 	    session.
+	 */
+	virtual std::string getMediaFormats(){
+		return mediaFormats;
+	}
+
+	virtual void start(){}
+	virtual void stop(){}
+
+	virtual uint16_t getPort();
+	virtual uint16_t getPort(std::string type);
+
+protected:
+	uint16_t port;
+	std::string mediaFormats;
+
+
+
+private:
+
+};
+
+
+/**
+ * Abstract class that implements common functions to a
+ * RealtimeMediaStreamSender and RealtimeMediaStreamReceiver
+ */
+class LIBMINISIP_API RealtimeMediaStream : public MediaStream {
+	public:
+
 		virtual std::string getMemObjectType() const {return "RealtimeMediaStream";}
 		bool disabled;
 
-		std::string getCallId(){return callId;}
-
 		/**
-		 * Used to query the port on which the media is received for
-		 * a receiver, respectively where it is sent to for a sender
-		 * @returns the port.
-		 */
-		virtual uint16_t getPort()=0;
-
-		/**
 		 * Used to check a m: header in a session description
 		 * against the media stream for compatibility
 		 * @param m a reference to the object representing the m:
@@ -117,11 +176,6 @@
 		 */
 		void setKeyAgreement( MRef<KeyAgreement *> ka );
 
-		/**
-		Returns an MRef to the Media object used by this media stream.
-		Use with care.
-		*/
-		MRef<RealtimeMedia *> getMedia() { return media; }
 #ifdef ZRTP_SUPPORT
 		/**
 		 * Set the ZRTP implementation host brigde for this media stream.
@@ -161,8 +215,7 @@
 	protected:
 		MRef<CryptoContext *> getCryptoContext( uint32_t ssrc, uint16_t seq_no );
 		RealtimeMediaStream( std::string callId, MRef<RealtimeMedia *> );
-		std::string callId;
-		MRef<RealtimeMedia *> media;
+		MRef<RealtimeMedia *> realtimeMedia;
 		uint32_t csbId;
 
 		std::string localPayloadType; //For RTP media, this is a number

Modified: trunk/libminisip/include/libminisip/media/ReliableMedia.h
===================================================================
--- trunk/libminisip/include/libminisip/media/ReliableMedia.h	2007-12-13 15:44:23 UTC (rev 3554)
+++ trunk/libminisip/include/libminisip/media/ReliableMedia.h	2007-12-14 10:08:50 UTC (rev 3555)
@@ -30,10 +30,9 @@
 #include<libminisip/libminisip_config.h>
 
 #include<libminisip/media/Media.h>
-#include<libminisip/media/codecs/Codec.h>
-#include<libminisip/media/rtp/RtpPacket.h>
 #include<libminisip/media/MediaStream.h>
 
+class ReliableMediaStream;
 /**
  * Handles RTP based media (typically audio and video streams).
  * It holds a list of the CODEC relevant for
@@ -45,11 +44,13 @@
 class LIBMINISIP_API ReliableMedia : public Media {
 	public:
 
-		bool isClient;
-		bool isServer;
+//		bool isClient;
+//		bool isServer;
 
 		~ReliableMedia();
 
+		virtual MRef<ReliableMediaStream*> createMediaStream(std::string callId)=0;
+
 		virtual std::string getSdpMediaType();
 
 

Modified: trunk/libminisip/source/subsystem_media/Media.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/Media.cxx	2007-12-13 15:44:23 UTC (rev 3554)
+++ trunk/libminisip/source/subsystem_media/Media.cxx	2007-12-14 10:08:50 UTC (rev 3555)
@@ -40,6 +40,7 @@
 #endif
 
 #include"AudioPlugin.h"
+#include"vnc/MediaSharedWorkspacePlugin.h"
 
 using namespace std;
 
@@ -70,5 +71,6 @@
 
 MediaRegistry::MediaRegistry(){
 	registerPlugin( new AudioPlugin( NULL ) );
+	registerPlugin( new SharedWorkspacePlugin( NULL ) );
 }
 

Modified: trunk/libminisip/source/subsystem_media/MediaHandler.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/MediaHandler.cxx	2007-12-13 15:44:23 UTC (rev 3554)
+++ trunk/libminisip/source/subsystem_media/MediaHandler.cxx	2007-12-14 10:08:50 UTC (rev 3555)
@@ -126,16 +126,7 @@
 		MRef<ReliableMedia*> relm = dynamic_cast<ReliableMedia*>(*m);
 
 		if (relm){
-			//TODO: SDP support for reliable media not implemented
-			if (relm->isClient){
-			
-			
-			}
-			if (relm->isServer){
-				
-				
-			}
-		
+			session->addReliableMediaSession( relm->createMediaStream(callId) );
 		}
 
 		if( rtm && rtm->receive ){

Modified: trunk/libminisip/source/subsystem_media/MediaStream.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/MediaStream.cxx	2007-12-13 15:44:23 UTC (rev 3554)
+++ trunk/libminisip/source/subsystem_media/MediaStream.cxx	2007-12-14 10:08:50 UTC (rev 3555)
@@ -47,21 +47,21 @@
 
 using namespace std;
 
-RealtimeMediaStream::RealtimeMediaStream( string cid, MRef<RealtimeMedia *> m) : callId(cid), media(m),ka(NULL) {
+RealtimeMediaStream::RealtimeMediaStream( string cid, MRef<RealtimeMedia *> m) : MediaStream(cid,*m), realtimeMedia(m) /*callId(cid), media(m)*/,ka(NULL) {
 	disabled = false;
 #ifdef ZRTP_SUPPORT
 	zrtpBridge = NULL;
 #endif
 }
 
-std::string RealtimeMediaStream::getSdpMediaType(){
+std::string MediaStream::getSdpMediaType(){
 	if( media ){
 		return media->getSdpMediaType();
 	}
 	return "";
 }
 
-list<string> RealtimeMediaStream::getSdpAttributes(){
+list<string> MediaStream::getSdpAttributes(){
 	return media->getSdpAttributes();
 }
 
@@ -91,7 +91,7 @@
         //	int i;
         string sdpPayloadType = m->getFormat( formatIndex );
 
-        media->handleMHeader( m );
+        realtimeMedia->handleMHeader( m );
 
         // pn507 This checks for "Audio"
         if( m->getMedia() != getSdpMediaType() ){
@@ -101,7 +101,7 @@
         sdpRtpMap = m->getRtpMap( sdpPayloadType );
 	sdpFmtpParam = m->getFmtpParam( sdpPayloadType );
 
-	std::list<MRef<Codec *> > codecs = media->getAvailableCodecs();
+	std::list<MRef<Codec *> > codecs = realtimeMedia->getAvailableCodecs();
 	std::list<MRef<Codec *> >::iterator iC;
 	string sdpName;
 	string sdpRate;
@@ -149,6 +149,25 @@
         return false;
 }
 
+
+ReliableMediaStream::ReliableMediaStream(std::string callId, MRef<ReliableMedia*> m) 
+		: MediaStream(callId, *m)
+{
+	
+
+}
+
+
+uint16_t ReliableMediaStream::getPort(){
+	return 33333; //FIXME: Fixed when RFB source is commited... blame Erik
+}
+
+uint16_t ReliableMediaStream::getPort(std::string type){
+	return 33333;
+}
+
+
+
 MRef<CryptoContext *> RealtimeMediaStream::initCrypto( uint32_t ssrc, uint16_t seq_no ){
 	MRef<CryptoContext *> cryptoContext;
 
@@ -322,7 +341,7 @@
 
 	ssrcListLock.lock();
 	for( i = ssrcList.begin(); i != ssrcList.end(); i++ ){
-		media->unregisterMediaSource( *i );
+		realtimeMedia->unregisterMediaSource( *i );
 	}
 	ssrcList.clear();
 	ssrcListLock.unlock();
@@ -409,7 +428,7 @@
 
 	gotSsrc( packetSsrc, callId );
 
-	media->playData( *packet );
+	realtimeMedia->playData( *packet );
 }
 
 void RealtimeMediaStreamReceiver::gotSsrc( uint32_t ssrc, string callId ){
@@ -424,7 +443,7 @@
 	}
 
 	massert(callId.size()>0);
-	media->registerMediaSource( ssrc, callId );
+	realtimeMedia->registerMediaSource( ssrc, callId );
 	ssrcList.push_back( ssrc );
 	ssrcListLock.unlock();
 }
@@ -467,11 +486,11 @@
 }
 
 void RealtimeMediaStreamSender::start(){
-	media->registerRealtimeMediaSender( this );
+	realtimeMedia->registerRealtimeMediaSender( this );
 }
 
 void RealtimeMediaStreamSender::stop(){
-	media->unregisterRealtimeMediaSender( this );
+	realtimeMedia->unregisterRealtimeMediaSender( this );
 	senderSock = NULL;
 	sender6Sock = NULL;
 
@@ -614,7 +633,7 @@
 }
 
 #ifdef DEBUG_OUTPUT
-string RealtimeMediaStream::getDebugString() {
+string MediaStream::getDebugString() {
 	string ret;
 	ret = getMemObjectType() + " this=" + itoa(reinterpret_cast<int64_t>(this)) +
 		": port=" + itoa(getPort());
@@ -672,7 +691,7 @@
 	bool result = RealtimeMediaStream::matches( m, formatIndex );
 
 	if( result && !selectedCodec ){
-		selectedCodec = media->createCodecInstance(
+		selectedCodec = realtimeMedia->createCodecInstance(
 				atoi( localPayloadType.c_str() )  );
 		payloadType = (uint8_t)atoi(m->getFormat( formatIndex ).c_str());
 	}
@@ -683,3 +702,4 @@
 uint32_t RealtimeMediaStreamSender::getSsrc(){
 	return ssrc;
 }
+

Modified: trunk/libminisip/source/subsystem_media/ReliableMedia.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/ReliableMedia.cxx	2007-12-13 15:44:23 UTC (rev 3554)
+++ trunk/libminisip/source/subsystem_media/ReliableMedia.cxx	2007-12-14 10:08:50 UTC (rev 3555)
@@ -6,8 +6,8 @@
 using namespace std;
 
 ReliableMedia::ReliableMedia(string type, bool isClient_, bool isServer_)
-		: isClient(isClient_),
-		isServer(isServer_), 
+		: /*isClient(isClient_),
+		isServer(isServer_), */
 		sdpType(type)
 {
 

Modified: trunk/libminisip/source/subsystem_media/Session.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/Session.cxx	2007-12-13 15:44:23 UTC (rev 3554)
+++ trunk/libminisip/source/subsystem_media/Session.cxx	2007-12-14 10:08:50 UTC (rev 3555)
@@ -406,7 +406,97 @@
 
 }
 
+bool Session::addReliableMediaToOffer(MRef<SdpPacket*> result, const string &peerUri, bool anatSupported){
+	list< MRef<ReliableMediaStream*> >::iterator i;
+	std::list<std::string>::iterator iAttribute;
+	std::list<std::string> attributes;
 
+	string type;
+	uint16_t localPort = 0;
+	MRef<SdpHeaderM *> m;
+	std::list<MRef<Codec *> > codecs;
+	std::list<MRef<Codec *> >::iterator iC;
+//	uint8_t payloadType;
+	string rtpmap;
+//	bool anat = false;
+
+	for( i = reliableMediaSessions.begin(); i != reliableMediaSessions.end(); i++ ){
+		massert(*i);
+		type = (*i)->getSdpMediaType();
+		m = new SdpHeaderM( type, localPort, 1, (*i)->getTransport() );
+
+		//cerr << "EEEE: trying to add formats <"<<(*i)->getMediaFormats()<<">"<<endl;
+		m->addFormat( "vnc" /*(*i)->getMediaFormats()*/ );
+		result->addHeader( *m );
+
+		attributes = (*i)->getSdpAttributes();
+		for( iAttribute = attributes.begin(); iAttribute != attributes.end(); iAttribute ++ ){
+			MRef<SdpHeaderA*> a = new SdpHeaderA("a=X");
+			a->setAttributes( *iAttribute );
+			m->addAttribute( *a );
+		}
+
+#if ADD_ANAT_HEADER_TO_RELIABLE_MEDIA_FIXME
+		if( anat ){
+			MRef<SdpHeaderM*> m4 = m;
+			MRef<SdpHeaderM*> m6 = new SdpHeaderM( **m );
+
+			// IPv4
+			m4->setPort( (*i)->getPort("IP4") );
+
+			MRef<SdpHeaderA*> mid2 = new SdpHeaderA( "a=mid:2" );
+
+			m4->addAttribute( mid2 );
+
+			MRef<SdpHeaderC*> conn4 = new SdpHeaderC( "IN", "IP4", localIpString );
+			conn4->set_priority( m4->getPriority() );
+			m4->setConnection( *conn4 );
+
+			// IPv6
+			m6->setPort( (*i)->getPort("IP6") );
+
+			MRef<SdpHeaderA*> mid1 = new SdpHeaderA( "a=mid:1" );
+			m6->addAttribute( mid1 );
+
+
+			MRef<SdpHeaderC*> conn6 = new SdpHeaderC( "IN", "IP6", localIp6String );
+			conn6->set_priority( m6->getPriority() );
+			m6->setConnection( *conn6 );
+
+			result->addHeader( *m6 );
+		}
+		else
+#endif
+		{
+			string ipString;
+			string addrtype;
+
+			if( !localIpString.empty() ){
+				ipString = localIpString;
+				addrtype = "IP4";
+			}
+			else{
+				ipString = localIp6String;
+				addrtype = "IP6";
+			}
+
+			MRef<SdpHeaderC*> c = new SdpHeaderC("IN", addrtype, ipString );
+			m->setConnection(c);
+
+			m->setPort( (*i)->getPort( addrtype ) );
+		}
+
+	}
+
+#ifdef DEBUG_OUTPUT	
+	cerr << "Session::getSdpOffer: " << endl << result->getString() << endl << endl;
+#endif
+
+	return true;
+}
+
+
+
 MRef<SdpPacket *> Session::getSdpOffer( const string &peerUri, bool anatSupported ){ // used by the initiator when creating the first message
 	string keyMgmtMessage;
 	const char *transport = NULL;
@@ -458,11 +548,13 @@
 		transport = "RTP/AVP";
 	}
 
-
-
 	if (!addRealtimeMediaToOffer(result, peerUri, anatSupported, transport)){
 		return NULL;
 	}
+	if (!addReliableMediaToOffer(result, peerUri, anatSupported) ){
+		return NULL;
+	}
+
 	return result;
 }
 

Modified: trunk/libminisip/source/subsystem_media/Session.h
===================================================================
--- trunk/libminisip/source/subsystem_media/Session.h	2007-12-13 15:44:23 UTC (rev 3554)
+++ trunk/libminisip/source/subsystem_media/Session.h	2007-12-14 10:08:50 UTC (rev 3555)
@@ -122,6 +122,12 @@
 		 */
 		bool setSdpOffer ( MRef<SdpPacket *> offer, std::string peerUri );
 
+		void addReliableMediaSession(MRef<ReliableMediaStream*> rsess){
+			realtimeMediaStreamSendersLock.lock();
+			reliableMediaSessions.push_back(rsess);
+			realtimeMediaStreamSendersLock.unlock();
+		}
+
 		/**
 		 * Adds a RealtimeMediaStreamReceiver to this media session. Used
 		 * by the media handler to add a media stream per
@@ -261,6 +267,7 @@
 		 * packet can not be used.
 		 */
 		bool addRealtimeMediaToOffer(MRef<SdpPacket*> result, const std::string &peerUri, bool anatSupported, std::string transport);
+		bool addReliableMediaToOffer(MRef<SdpPacket*> result, const std::string &peerUri, bool anatSupported);
 
 		bool started;
 		void addStreams();
@@ -272,6 +279,8 @@
 		MRef<RealtimeMediaStreamReceiver *> matchFormat( MRef<SdpHeaderM *> m, 
 			uint32_t iFormat, MRef<IPAddress *> &remoteAddress );
 
+		std::list<MRef<ReliableMediaStream*> > reliableMediaSessions;
+
 		typedef std::list< MRef<RealtimeMediaStreamSender *> > RealtimeMediaStreamSenders;
 		std::list< MRef<RealtimeMediaStreamReceiver *> > realtimeMediaStreamReceivers;
 		std::list< MRef<RealtimeMediaStreamSender *> > realtimeMediaStreamSenders;

Added: trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspace.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspace.cxx	                        (rev 0)
+++ trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspace.cxx	2007-12-14 10:08:50 UTC (rev 3555)
@@ -0,0 +1,34 @@
+
+#include<config.h>
+
+#include"MediaSharedWorkspace.h"
+#include<libminisip/media/MediaStream.h>
+
+using namespace std;
+
+class SWSMediaStream : public ReliableMediaStream {
+public:
+	SWSMediaStream( std::string callId, MRef<ReliableMedia*> m );
+	std::string getSdpMediaType();
+};
+
+SWSMediaStream::SWSMediaStream( std::string callId, MRef<ReliableMedia*> m ) : ReliableMediaStream(callId,m) {
+
+}
+
+string SWSMediaStream::getSdpMediaType(){
+	return "vnc";
+}
+
+string MediaSharedWorkspace::getSdpMediaType(){
+	return "application";
+}
+
+MediaSharedWorkspace::MediaSharedWorkspace() : ReliableMedia("application", true,true) {
+}
+
+MRef<ReliableMediaStream*> MediaSharedWorkspace::createMediaStream(string callId){
+	MRef<ReliableMediaStream*> m =  new SWSMediaStream(callId, this);
+	return m;
+}
+

Added: trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspace.h
===================================================================
--- trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspace.h	                        (rev 0)
+++ trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspace.h	2007-12-14 10:08:50 UTC (rev 3555)
@@ -0,0 +1,22 @@
+#ifndef MEDIA_SHARED_WORKSPACE_H
+#define MEDIA_SHARED_WORKSPACE_H
+
+#include<string>
+#include<libminisip/media/ReliableMedia.h>
+
+
+class MediaSharedWorkspace : public ReliableMedia {
+	public:
+		MediaSharedWorkspace();
+		
+		virtual std::string getMediaFormats(){return "vnc";}
+
+		virtual MRef<ReliableMediaStream*> createMediaStream(std::string callId);
+
+		virtual std::string getSdpMediaType();
+
+	private:
+};
+
+
+#endif

Added: trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspacePlugin.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspacePlugin.cxx	                        (rev 0)
+++ trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspacePlugin.cxx	2007-12-14 10:08:50 UTC (rev 3555)
@@ -0,0 +1,75 @@
+
+#include<config.h>
+
+#include<libmutil/Library.h>
+#include<libminisip/media/Media.h>
+
+#include"MediaSharedWorkspace.h"
+
+#include<iostream>
+
+using namespace std;
+
+class SharedWorkspacePlugin : public MediaPlugin {
+public:
+	SharedWorkspacePlugin(MRef<Library*> lib);
+	~SharedWorkspacePlugin();
+
+	virtual MRef<Media*> createMedia( MRef<SipSoftPhoneConfiguration *> config );
+	virtual std::string getMemObjectType() const{ return "SharedWorkspacePlugin"; }
+	virtual std::string getName() const;
+	virtual uint32_t getVersion() const;
+	virtual std::string getDescription() const;
+
+private:
+
+
+};
+
+static std::list<std::string> pluginList;
+
+static bool initialized;
+
+
+
+extern "C" LIBMINISIP_API
+std::list<std::string> *msws_LTX_listPlugins( MRef<Library*> lib ){
+	if( !initialized ){
+		pluginList.push_back("getPlugin");
+		initialized = true;
+	}
+
+	return &pluginList;
+}
+
+extern "C" LIBMINISIP_API
+MPlugin * msws_LTX_getPlugin( MRef<Library*> lib ){
+	return new SharedWorkspacePlugin( lib );
+}
+
+SharedWorkspacePlugin::SharedWorkspacePlugin( MRef<Library*> lib ): MediaPlugin( lib ){
+}
+
+SharedWorkspacePlugin::~SharedWorkspacePlugin(){
+}
+
+MRef<MediaSharedWorkspace*> swsm;
+
+MRef<Media*> SharedWorkspacePlugin::createMedia( MRef<SipSoftPhoneConfiguration *> config ){
+	MRef<MediaSharedWorkspace*> swsMedia = new MediaSharedWorkspace();
+	swsm = swsMedia;
+	return *swsMedia;
+}
+
+std::string SharedWorkspacePlugin::getName() const{
+	return "sharedworkspace";
+}
+
+uint32_t SharedWorkspacePlugin::getVersion() const{
+	return 0x00000001;
+}
+
+std::string SharedWorkspacePlugin::getDescription() const{
+	return "presentation sharing plugin";
+}
+

Added: trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspacePlugin.h
===================================================================
--- trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspacePlugin.h	                        (rev 0)
+++ trunk/libminisip/source/subsystem_media/vnc/MediaSharedWorkspacePlugin.h	2007-12-14 10:08:50 UTC (rev 3555)
@@ -0,0 +1,26 @@
+#ifndef SWSPLUGIN_H
+#define SWSPLUGIN_H
+
+
+#include<libmutil/Library.h>
+#include<libminisip/media/Media.h>
+
+#include"MediaSharedWorkspace.h"
+
+class SharedWorkspacePlugin : public MediaPlugin {
+public:
+	SharedWorkspacePlugin(MRef<Library*> lib);
+	~SharedWorkspacePlugin();
+
+	virtual MRef<Media*> createMedia( MRef<SipSoftPhoneConfiguration *> config );
+	virtual std::string getMemObjectType() const{ return "SharedWorkspacePlugin"; }
+	virtual std::string getName() const;
+	virtual uint32_t getVersion() const;
+	virtual std::string getDescription() const;
+
+private:
+
+
+};
+
+#endif



More information about the Minisip-devel mailing list