/* * Copyright (c) 2011 Tobias Markmann * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #pragma once #include #include #include #include #include #include #include #include namespace Swift { class ConnectionFactory; class TimerFactory; class DefaultRemoteJingleTransportCandidateSelector : public RemoteJingleTransportCandidateSelector { public: DefaultRemoteJingleTransportCandidateSelector(ConnectionFactory*, TimerFactory*); virtual ~DefaultRemoteJingleTransportCandidateSelector(); virtual void addRemoteTransportCandidates(JingleTransportPayload::ref); virtual void selectCandidate(); virtual void setMinimumPriority(int); void setRequesterTargtet(const JID& requester, const JID& target); virtual SOCKS5BytestreamClientSession::ref getS5BSession(); virtual bool isActualCandidate(JingleTransportPayload::ref); virtual int getPriority(JingleTransportPayload::ref); virtual JingleTransport::ref selectTransport(JingleTransportPayload::ref); private: void tryNextCandidate(bool error); private: ConnectionFactory* connectionFactory; TimerFactory* timerFactory; std::priority_queue, JingleS5BTransportPayload::CompareCandidate> candidates; std::string transportSID; boost::shared_ptr connection; boost::shared_ptr s5bSession; JingleS5BTransportPayload::Candidate lastCandidate; JID requester; JID target; }; }