OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 6 #error "This file requires ARC support." |
| 7 #endif |
| 8 |
| 9 #include "remoting/ios/bridge/client_proxy.h" |
| 10 |
| 11 #import "remoting/ios/data_store.h" |
| 12 #import "remoting/ios/host_preferences.h" |
| 13 #import "remoting/ios/bridge/client_proxy_delegate_wrapper.h" |
| 14 |
| 15 namespace { |
| 16 // The value indicating a successful connection has been established via a call |
| 17 // to ReportConnectionStatus |
| 18 const static int kSuccessfulConnection = 3; |
| 19 |
| 20 // Translate a connection status code integer to a NSString description |
| 21 NSString* GetStatusMsgFromInteger(NSInteger code) { |
| 22 switch (code) { |
| 23 case 0: // INITIALIZING |
| 24 return @"Initializing connection"; |
| 25 case 1: // CONNECTING |
| 26 return @"Connecting"; |
| 27 case 2: // AUTHENTICATED |
| 28 return @"Authenticated"; |
| 29 case 3: // CONNECTED |
| 30 return @"Connected"; |
| 31 case 4: // FAILED |
| 32 return @"Connection Failed"; |
| 33 case 5: // CLOSED |
| 34 return @"Connection closed"; |
| 35 default: |
| 36 return @"Unknown connection state"; |
| 37 } |
| 38 } |
| 39 |
| 40 // Translate a connection error code integer to a NSString description |
| 41 NSString* GetErrorMsgFromInteger(NSInteger code) { |
| 42 switch (code) { |
| 43 case 1: // PEER_IS_OFFLINE |
| 44 return @"Requested host is offline."; |
| 45 case 2: // SESSION_REJECTED |
| 46 return @"Session was rejected by the host."; |
| 47 case 3: // INCOMPATIBLE_PROTOCOL |
| 48 return @"Incompatible Protocol."; |
| 49 case 4: // AUTHENTICATION_FAILED |
| 50 return @"Authentication Failed."; |
| 51 case 5: // CHANNEL_CONNECTION_ERROR |
| 52 return @"Channel Connection Error"; |
| 53 case 6: // SIGNALING_ERROR |
| 54 return @"Signaling Error"; |
| 55 case 7: // SIGNALING_TIMEOUT |
| 56 return @"Signaling Timeout"; |
| 57 case 8: // HOST_OVERLOAD |
| 58 return @"Host Overload"; |
| 59 case 9: // UNKNOWN_ERROR |
| 60 return @"An unknown error has occurred, preventing the session " |
| 61 "from opening."; |
| 62 default: |
| 63 return @"An unknown error code has occurred."; |
| 64 } |
| 65 } |
| 66 |
| 67 } // namespace |
| 68 |
| 69 namespace remoting { |
| 70 |
| 71 ClientProxy::ClientProxy(ClientProxyDelegateWrapper* wrapper) { |
| 72 delegate_ = [wrapper delegate]; |
| 73 } |
| 74 |
| 75 void ClientProxy::ReportConnectionStatus( |
| 76 protocol::ConnectionToHost::State state, |
| 77 protocol::ErrorCode error) { |
| 78 DCHECK(delegate_); |
| 79 if (state <= kSuccessfulConnection && error == protocol::ErrorCode::OK) { |
| 80 // Report Progress |
| 81 [delegate_ connectionStatus:GetStatusMsgFromInteger(state)]; |
| 82 |
| 83 if (state == kSuccessfulConnection) { |
| 84 [delegate_ connected]; |
| 85 } |
| 86 } else { |
| 87 [delegate_ connectionStatus:GetStatusMsgFromInteger(state)]; |
| 88 if (error != protocol::ErrorCode::OK) { |
| 89 [delegate_ connectionFailed:GetErrorMsgFromInteger(error)]; |
| 90 } |
| 91 } |
| 92 } |
| 93 |
| 94 void ClientProxy::DisplayAuthenticationPrompt(bool pairing_supported) { |
| 95 DCHECK(delegate_); |
| 96 [delegate_ requestHostPin:pairing_supported]; |
| 97 } |
| 98 |
| 99 void ClientProxy::CommitPairingCredentials(const std::string& hostId, |
| 100 const std::string& pairId, |
| 101 const std::string& pairSecret) { |
| 102 DCHECK(delegate_); |
| 103 NSString* nsHostId = [[NSString alloc] initWithUTF8String:hostId.c_str()]; |
| 104 NSString* nsPairId = [[NSString alloc] initWithUTF8String:pairId.c_str()]; |
| 105 NSString* nsPairSecret = |
| 106 [[NSString alloc] initWithUTF8String:pairSecret.c_str()]; |
| 107 |
| 108 const HostPreferences* hostPrefs = |
| 109 [[DataStore sharedStore] getHostForId:nsHostId]; |
| 110 if (hostPrefs == nil) { |
| 111 hostPrefs = [[DataStore sharedStore] createHost:nsHostId]; |
| 112 } |
| 113 if (hostPrefs) { |
| 114 hostPrefs.pairId = nsPairId; |
| 115 hostPrefs.pairSecret = nsPairSecret; |
| 116 |
| 117 [[DataStore sharedStore] saveChanges]; |
| 118 } |
| 119 } |
| 120 |
| 121 void ClientProxy::RedrawCanvas(const webrtc::DesktopSize& view_size, |
| 122 webrtc::DesktopFrame* buffer, |
| 123 const webrtc::DesktopRegion& region) { |
| 124 DCHECK(delegate_); |
| 125 std::vector<webrtc::DesktopRect> regions; |
| 126 |
| 127 for (webrtc::DesktopRegion::Iterator i(region); !i.IsAtEnd(); i.Advance()) { |
| 128 const webrtc::DesktopRect& rect(i.rect()); |
| 129 |
| 130 regions.push_back(webrtc::DesktopRect::MakeXYWH( |
| 131 rect.left(), rect.top(), rect.width(), rect.height())); |
| 132 } |
| 133 |
| 134 [delegate_ applyFrame:view_size |
| 135 stride:buffer->stride() |
| 136 data:buffer->data() |
| 137 regions:regions]; |
| 138 } |
| 139 |
| 140 void ClientProxy::UpdateCursorShape( |
| 141 const protocol::CursorShapeInfo& cursor_shape) { |
| 142 DCHECK(delegate_); |
| 143 [delegate_ applyCursor:webrtc::DesktopSize(cursor_shape.width(), |
| 144 cursor_shape.height()) |
| 145 hotspot:webrtc::DesktopVector(cursor_shape.hotspot_x(), |
| 146 cursor_shape.hotspot_y()) |
| 147 cursorData:(uint8_t*)cursor_shape.data().c_str()]; |
| 148 } |
| 149 |
| 150 } // namespace remoting |
OLD | NEW |