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

Unified Diff: remoting/ios/bridge/client_proxy.mm

Issue 278863003: Chromoting iOS client (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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/ios/bridge/client_proxy.h ('k') | remoting/ios/bridge/client_proxy_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/ios/bridge/client_proxy.mm
diff --git a/remoting/ios/bridge/client_proxy.mm b/remoting/ios/bridge/client_proxy.mm
new file mode 100644
index 0000000000000000000000000000000000000000..8568b9d55ec65b68306d2d24ba24ffc851ebb4d6
--- /dev/null
+++ b/remoting/ios/bridge/client_proxy.mm
@@ -0,0 +1,150 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+#include "remoting/ios/bridge/client_proxy.h"
+
+#import "remoting/ios/data_store.h"
+#import "remoting/ios/host_preferences.h"
+#import "remoting/ios/bridge/client_proxy_delegate_wrapper.h"
+
+namespace {
+// The value indicating a successful connection has been established via a call
+// to ReportConnectionStatus
+const static int kSuccessfulConnection = 3;
+
+// Translate a connection status code integer to a NSString description
+NSString* GetStatusMsgFromInteger(NSInteger code) {
+ switch (code) {
+ case 0: // INITIALIZING
+ return @"Initializing connection";
+ case 1: // CONNECTING
+ return @"Connecting";
+ case 2: // AUTHENTICATED
+ return @"Authenticated";
+ case 3: // CONNECTED
+ return @"Connected";
+ case 4: // FAILED
+ return @"Connection Failed";
+ case 5: // CLOSED
+ return @"Connection closed";
+ default:
+ return @"Unknown connection state";
+ }
+}
+
+// Translate a connection error code integer to a NSString description
+NSString* GetErrorMsgFromInteger(NSInteger code) {
+ switch (code) {
+ case 1: // PEER_IS_OFFLINE
+ return @"Requested host is offline.";
+ case 2: // SESSION_REJECTED
+ return @"Session was rejected by the host.";
+ case 3: // INCOMPATIBLE_PROTOCOL
+ return @"Incompatible Protocol.";
+ case 4: // AUTHENTICATION_FAILED
+ return @"Authentication Failed.";
+ case 5: // CHANNEL_CONNECTION_ERROR
+ return @"Channel Connection Error";
+ case 6: // SIGNALING_ERROR
+ return @"Signaling Error";
+ case 7: // SIGNALING_TIMEOUT
+ return @"Signaling Timeout";
+ case 8: // HOST_OVERLOAD
+ return @"Host Overload";
+ case 9: // UNKNOWN_ERROR
+ return @"An unknown error has occurred, preventing the session "
+ "from opening.";
+ default:
+ return @"An unknown error code has occurred.";
+ }
+}
+
+} // namespace
+
+namespace remoting {
+
+ClientProxy::ClientProxy(ClientProxyDelegateWrapper* wrapper) {
+ delegate_ = [wrapper delegate];
+}
+
+void ClientProxy::ReportConnectionStatus(
+ protocol::ConnectionToHost::State state,
+ protocol::ErrorCode error) {
+ DCHECK(delegate_);
+ if (state <= kSuccessfulConnection && error == protocol::ErrorCode::OK) {
+ // Report Progress
+ [delegate_ connectionStatus:GetStatusMsgFromInteger(state)];
+
+ if (state == kSuccessfulConnection) {
+ [delegate_ connected];
+ }
+ } else {
+ [delegate_ connectionStatus:GetStatusMsgFromInteger(state)];
+ if (error != protocol::ErrorCode::OK) {
+ [delegate_ connectionFailed:GetErrorMsgFromInteger(error)];
+ }
+ }
+}
+
+void ClientProxy::DisplayAuthenticationPrompt(bool pairing_supported) {
+ DCHECK(delegate_);
+ [delegate_ requestHostPin:pairing_supported];
+}
+
+void ClientProxy::CommitPairingCredentials(const std::string& hostId,
+ const std::string& pairId,
+ const std::string& pairSecret) {
+ DCHECK(delegate_);
+ NSString* nsHostId = [[NSString alloc] initWithUTF8String:hostId.c_str()];
+ NSString* nsPairId = [[NSString alloc] initWithUTF8String:pairId.c_str()];
+ NSString* nsPairSecret =
+ [[NSString alloc] initWithUTF8String:pairSecret.c_str()];
+
+ const HostPreferences* hostPrefs =
+ [[DataStore sharedStore] getHostForId:nsHostId];
+ if (hostPrefs == nil) {
+ hostPrefs = [[DataStore sharedStore] createHost:nsHostId];
+ }
+ if (hostPrefs) {
+ hostPrefs.pairId = nsPairId;
+ hostPrefs.pairSecret = nsPairSecret;
+
+ [[DataStore sharedStore] saveChanges];
+ }
+}
+
+void ClientProxy::RedrawCanvas(const webrtc::DesktopSize& view_size,
+ webrtc::DesktopFrame* buffer,
+ const webrtc::DesktopRegion& region) {
+ DCHECK(delegate_);
+ std::vector<webrtc::DesktopRect> regions;
+
+ for (webrtc::DesktopRegion::Iterator i(region); !i.IsAtEnd(); i.Advance()) {
+ const webrtc::DesktopRect& rect(i.rect());
+
+ regions.push_back(webrtc::DesktopRect::MakeXYWH(
+ rect.left(), rect.top(), rect.width(), rect.height()));
+ }
+
+ [delegate_ applyFrame:view_size
+ stride:buffer->stride()
+ data:buffer->data()
+ regions:regions];
+}
+
+void ClientProxy::UpdateCursorShape(
+ const protocol::CursorShapeInfo& cursor_shape) {
+ DCHECK(delegate_);
+ [delegate_ applyCursor:webrtc::DesktopSize(cursor_shape.width(),
+ cursor_shape.height())
+ hotspot:webrtc::DesktopVector(cursor_shape.hotspot_x(),
+ cursor_shape.hotspot_y())
+ cursorData:(uint8_t*)cursor_shape.data().c_str()];
+}
+
+} // namespace remoting
« no previous file with comments | « remoting/ios/bridge/client_proxy.h ('k') | remoting/ios/bridge/client_proxy_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698