summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordknn <yoann.blein@free.fr>2012-07-11 16:06:01 (GMT)
committerdknn <yoann.blein@free.fr>2012-09-22 09:01:48 (GMT)
commit6d458439d9536be1736ba1a98c51040b64946284 (patch)
tree74894bc65dce3db5ccaf822f9769d3efd1e0dd6e /Swiften/ScreenSharing/RTPSessionImpl.cpp
parent79ee86a4deeb29c1be6d6838e54aae32d4c3e1ec (diff)
downloadswift-contrib-6d458439d9536be1736ba1a98c51040b64946284.zip
swift-contrib-6d458439d9536be1736ba1a98c51040b64946284.tar.bz2
Add disco for RTP + bugfix
Diffstat (limited to 'Swiften/ScreenSharing/RTPSessionImpl.cpp')
-rw-r--r--Swiften/ScreenSharing/RTPSessionImpl.cpp45
1 files changed, 27 insertions, 18 deletions
diff --git a/Swiften/ScreenSharing/RTPSessionImpl.cpp b/Swiften/ScreenSharing/RTPSessionImpl.cpp
index eb67d4e..62b05d5 100644
--- a/Swiften/ScreenSharing/RTPSessionImpl.cpp
+++ b/Swiften/ScreenSharing/RTPSessionImpl.cpp
@@ -9,6 +9,7 @@
#include <Swiften/ScreenSharing/RTPException.h>
#include <Swiften/Network/BoostUDPSocket.h>
#include <Swiften/Base/boost_bsignals.h>
+#include <Swiften/Network/UDPSocket.h>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>
@@ -22,33 +23,42 @@
namespace Swift {
-RTPSessionImpl::RTPSessionImpl()
- : RTPSession()
-{
+bool Sender::SendRTP(const void *data, size_t len) {
+ send(data, len);
+ return true;
}
-RTPSessionImpl::~RTPSessionImpl()
-{
+bool Sender::SendRTCP(const void* data, size_t len) {
+ send(data, len);
+ return true;
}
-void RTPSessionImpl::create(boost::shared_ptr<UDPSocket> udpSocket, const HostAddressPort &remotePeer, RTPSession::PayloadType payloadType, int frequency)
-{
- this->udpSocket = udpSocket;
- this->udpSocket->onDataRead.connect(boost::bind(&RTPSessionImpl::handleDataRead, this, _1));
+bool Sender::ComesFromThisSender (const jrtplib::RTPAddress* address) {
+ return RTPSessionImpl::nativeAddressToJRTPAddress(udpSocket->getLocalAddress()).IsSameAddress(address);
+}
- this->payloadType = payloadType;
- this->frequency = frequency;
- nativeAddressToJRTPAddress(remotePeer, jRTPRemotePeer);
+void Sender::send(const void* data, size_t len) {
+ unsigned char *uint8Data = (unsigned char*)data;
+ udpSocket->send(SafeByteArray(uint8Data, uint8Data + len));
+}
+RTPSessionImpl::RTPSessionImpl(boost::shared_ptr<UDPSocket> udpSocket, const RTPPayloadType &payloadType)
+ : udpSocket(udpSocket), payloadType(payloadType), jRTPRemotePeer(nativeAddressToJRTPAddress(udpSocket->getRemoteAddress())), sender(udpSocket)
+{
jrtplib::RTPExternalTransmissionParams transparams(&sender, 0);
-
jrtplib::RTPSessionParams sessparams;
// IMPORTANT: The local timestamp unit MUST be set, otherwise RTCP Sender Report info will be calculated wrong
- sessparams.SetOwnTimestampUnit(1.0 / frequency);
+ sessparams.SetOwnTimestampUnit(1.0 / payloadType.getClockrate());
checkError(session.Create(sessparams, &transparams, jrtplib::RTPTransmitter::ExternalProto));
packetInjecter = static_cast<jrtplib::RTPExternalTransmissionInfo*>(session.GetTransmissionInfo())->GetPacketInjector();
+
+ udpSocket->onDataRead.connect(boost::bind(&RTPSessionImpl::handleDataRead, this, _1));
+}
+
+RTPSessionImpl::~RTPSessionImpl()
+{
}
void RTPSessionImpl::poll()
@@ -73,7 +83,7 @@ void RTPSessionImpl::checkIncomingPackets()
void RTPSessionImpl::sendPacket(const SafeByteArray& data, int timestampinc, bool marker)
{
- checkError(session.SendPacket((void*)(&data[0]), data.size(), payloadType, marker, timestampinc));
+ checkError(session.SendPacket((void*)(&data[0]), data.size(), payloadType.getID(), marker, timestampinc));
poll();
}
@@ -101,7 +111,7 @@ void RTPSessionImpl::handleDataRead(boost::shared_ptr<SafeByteArray> data)
injectData(*data);
}
-void RTPSessionImpl::nativeAddressToJRTPAddress(const HostAddressPort& hostAddressPort, jrtplib::RTPIPv4Address& jRTPAddress)
+jrtplib::RTPIPv4Address RTPSessionImpl::nativeAddressToJRTPAddress(const HostAddressPort& hostAddressPort)
{
// Split address
std::vector<std::string> subStrings;
@@ -112,8 +122,7 @@ void RTPSessionImpl::nativeAddressToJRTPAddress(const HostAddressPort& hostAddre
for (int i = 0; i < std::min(4, (int)subStrings.size()); ++i)
ipNumbers[i] = boost::numeric_cast<uint8_t>(boost::lexical_cast<int>(subStrings[i]));
- jRTPAddress.SetIP(ipNumbers);
- jRTPAddress.SetPort(boost::numeric_cast<uint16_t>(hostAddressPort.getPort()));
+ return jrtplib::RTPIPv4Address(ipNumbers, boost::numeric_cast<uint16_t>(hostAddressPort.getPort()));
}
}