diff options
author | dknn <yoann.blein@free.fr> | 2012-07-11 16:06:01 (GMT) |
---|---|---|
committer | dknn <yoann.blein@free.fr> | 2012-09-22 09:01:48 (GMT) |
commit | 6d458439d9536be1736ba1a98c51040b64946284 (patch) | |
tree | 74894bc65dce3db5ccaf822f9769d3efd1e0dd6e /Swiften/ScreenSharing/RTPSessionImpl.cpp | |
parent | 79ee86a4deeb29c1be6d6838e54aae32d4c3e1ec (diff) | |
download | swift-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.cpp | 45 |
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())); } } |