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