Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(212)

Unified Diff: remoting/protocol/libjingle_transport_factory.cc

Issue 9366001: Implement support for route change notifications in the Transport interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/protocol/jingle_session.cc ('k') | remoting/protocol/pepper_session.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/libjingle_transport_factory.cc
diff --git a/remoting/protocol/libjingle_transport_factory.cc b/remoting/protocol/libjingle_transport_factory.cc
index 17195bdba0c5b1f6ecdeabd69d3dba648fb7c261..c2665da3daac9d03fd2a444622dc737b6b3f03a6 100644
--- a/remoting/protocol/libjingle_transport_factory.cc
+++ b/remoting/protocol/libjingle_transport_factory.cc
@@ -6,6 +6,7 @@
#include "jingle/glue/channel_socket_adapter.h"
#include "jingle/glue/pseudotcp_adapter.h"
+#include "jingle/glue/utils.h"
#include "net/base/net_errors.h"
#include "remoting/protocol/channel_authenticator.h"
#include "remoting/protocol/transport_config.h"
@@ -51,6 +52,8 @@ class LibjingleStreamTransport : public StreamTransport,
void OnRequestSignaling();
void OnCandidateReady(cricket::TransportChannelImpl* channel,
const cricket::Candidate& candidate);
+ void OnRouteChange(cricket::TransportChannel* channel,
+ const cricket::Candidate& candidate);
void OnTcpConnected(int result);
void OnAuthenticationDone(net::Error error,
@@ -149,6 +152,8 @@ void LibjingleStreamTransport::Connect(
this, &LibjingleStreamTransport::OnRequestSignaling);
channel_->SignalCandidateReady.connect(
this, &LibjingleStreamTransport::OnCandidateReady);
+ channel_->SignalRouteChange.connect(
+ this, &LibjingleStreamTransport::OnRouteChange);
channel_->Connect();
@@ -201,6 +206,38 @@ void LibjingleStreamTransport::OnCandidateReady(
event_handler_->OnTransportCandidate(this, candidate);
}
+void LibjingleStreamTransport::OnRouteChange(
+ cricket::TransportChannel* channel,
+ const cricket::Candidate& candidate) {
+ TransportRoute route;
+
+ if (candidate.type() == "local") {
+ route.type = TransportRoute::DIRECT;
+ } else if (candidate.type() == "stun") {
+ route.type = TransportRoute::STUN;
+ } else if (candidate.type() == "relay") {
+ route.type = TransportRoute::RELAY;
+ } else {
+ LOG(FATAL) << "Unknown candidate type: " << candidate.type();
+ }
+
+ if (!jingle_glue::SocketAddressToIPEndPoint(
+ candidate.address(), &route.remote_address)) {
+ LOG(FATAL) << "Failed to convert peer IP address.";
+ }
+
+ DCHECK(channel->GetP2PChannel());
+ DCHECK(channel->GetP2PChannel()->best_connection());
+ const cricket::Candidate& local_candidate =
+ channel->GetP2PChannel()->best_connection()->local_candidate();
+ if (!jingle_glue::SocketAddressToIPEndPoint(
+ local_candidate.address(), &route.local_address)) {
+ LOG(FATAL) << "Failed to convert local IP address.";
+ }
+
+ event_handler_->OnTransportRouteChange(this, route);
+}
+
void LibjingleStreamTransport::OnTcpConnected(int result) {
DCHECK(CalledOnValidThread());
« no previous file with comments | « remoting/protocol/jingle_session.cc ('k') | remoting/protocol/pepper_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698