summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/ScreenSharing/IncomingScreenSharing.cpp')
-rw-r--r--Swiften/ScreenSharing/IncomingScreenSharing.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/Swiften/ScreenSharing/IncomingScreenSharing.cpp b/Swiften/ScreenSharing/IncomingScreenSharing.cpp
new file mode 100644
index 0000000..d5ee56e
--- /dev/null
+++ b/Swiften/ScreenSharing/IncomingScreenSharing.cpp
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2012 Yoann Blein
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
+#include <Swiften/ScreenSharing/IncomingScreenSharing.h>
+
+#include <Swiften/Jingle/JingleSession.h>
+#include <Swiften/Elements/JingleRawUDPTransportPayload.h>
+#include <Swiften/Network/UDPSocketFactory.h>
+#include <Swiften/Network/UDPSocket.h>
+
+namespace Swift {
+
+IncomingScreenSharing::IncomingScreenSharing(boost::shared_ptr<JingleSession> session, UDPSocketFactory* udpSocketFactory,
+ boost::shared_ptr<JingleContentPayload> content)
+ : ScreenSharing(session, udpSocketFactory),
+ initialContent(content)
+{
+ onStateChange(ScreenSharing::WaitingForAccept);
+}
+
+IncomingScreenSharing::~IncomingScreenSharing()
+{
+}
+
+void IncomingScreenSharing::cancel()
+{
+ session->sendTerminate(JinglePayload::Reason::Cancel);
+ clientSocket->close();
+ onStateChange(ScreenSharing::Canceled);
+}
+
+void IncomingScreenSharing::accept()
+{
+ JingleRawUDPTransportPayload::ref transport = boost::make_shared<JingleRawUDPTransportPayload>();
+ addBestCandidate(transport);
+ // TODO: create a valid description instead of copying the initator's one
+ session->sendAccept(getContentID(), initialContent->getDescriptions().front(), transport);
+
+ JingleRawUDPTransportPayload::ref initialTransport = initialContent->getTransport<JingleRawUDPTransportPayload>();
+ clientSocket = udpSocketFactory->createUDPSocket();
+ clientSocket->connect(initialTransport->getCandidates().front().hostAddressPort);
+ // Send a empty packet to let the server know about us
+ SafeByteArray data(1, 0);
+ clientSocket->send(data);
+
+ onStateChange(ScreenSharing::Connecting);
+}
+
+JingleContentID IncomingScreenSharing::getContentID() const
+{
+ return JingleContentID(initialContent->getName(), initialContent->getCreator());
+}
+
+}