FreeRDP
Loading...
Searching...
No Matches
RDPSession Class Reference
Inheritance diagram for RDPSession:
Collaboration diagram for RDPSession:

Instance Methods

(id) - initWithBookmark:
 
(void) - connect
 
(void) - disconnect
 
(void) - suspend
 
(void) - resume
 
(BOOL) - isSuspended
 
(void) - sendInputEvent:
 
(void) - setNeedsDisplayInRectAsValue:
 
(void) - setRemoteCursor:
 
(void) - setRemoteCursorPositionValue:
 
(void) - hideRemoteCursor
 
(void) - setDefaultRemoteCursor
 
(UIImage *) - getScreenshotWithSize:
 
(rdpSettings *) - getSessionParams
 
(NSString *) - sessionName
 

Properties

ConnectionParamsparams
 
ComputerBookmarkbookmark
 
id< RDPSessionDelegatedelegate
 
BOOL toolbarVisible
 
CGContextRef bitmapContext
 
NSCondition * uiRequestCompleted
 

Detailed Description

Definition at line 50 of file RDPSession.h.

Method Documentation

◆ connect

- (void) connect

Definition at line 71 of file RDPSession.m.

292{
293 // Set Screen Size to automatic if width or height are still 0
294 rdpSettings *settings = _freerdp->context->settings;
295
296 if (freerdp_settings_get_uint32(settings, FreeRDP_DesktopWidth) == 0 ||
297 freerdp_settings_get_uint32(settings, FreeRDP_DesktopHeight) == 0)
298 {
299 CGSize size = CGSizeZero;
300
301 if ([[self delegate] respondsToSelector:@selector(sizeForFitScreenForSession:)])
302 size = [[self delegate] sizeForFitScreenForSession:self];
303
304 if (!CGSizeEqualToSize(CGSizeZero, size))
305 {
306 [_params setInt:size.width forKey:@"width"];
307 [_params setInt:size.height forKey:@"height"];
308 (void)freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, size.width);
309 (void)freerdp_settings_set_uint32(settings, FreeRDP_DesktopHeight, size.height);
310 }
311 }
312
313 // TODO: This is a hack to ensure connections to RDVH with 16bpp don't have an odd screen
314 // resolution width
315 // Otherwise this could result in screen corruption ..
316 if (freerdp_settings_get_uint32(settings, FreeRDP_ColorDepth) <= 16)
317 {
318 const UINT32 w = freerdp_settings_get_uint32(settings, FreeRDP_DesktopWidth) & (~1);
319 (void)freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, w);
320 }
321
322 [self performSelectorInBackground:@selector(runSession) withObject:nil];
323}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint32(rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id, UINT32 val)
Sets a UINT32 settings value.
WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_uint32(const rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id)
Returns a UINT32 settings value.

◆ disconnect

- (void) disconnect

Definition at line 71 of file RDPSession.m.

326{
327 mfInfo *mfi = [self mfi];
328 ios_events_send(mfi, [NSDictionary dictionaryWithObject:@"disconnect" forKey:@"type"]);
329
330 if (mfi->connection_state == TSXConnectionConnecting)
331 {
332 mfi->unwanted = YES;
333 [self sessionDidDisconnect];
334 return;
335 }
336}

◆ getScreenshotWithSize:

- (UIImage *) getScreenshotWithSize: (CGSize)  size

Definition at line 71 of file RDPSession.m.

421 :(CGSize)size
422{
423 NSAssert([self mfi]->bitmap_context != nil,
424 @"Screenshot requested while having no valid RDP drawing context");
425 CGImageRef cgImage = CGBitmapContextCreateImage([self mfi]->bitmap_context);
426 UIGraphicsBeginImageContext(size);
427 CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0, size.height);
428 CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0);
429 CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, size.width, size.height),
430 cgImage);
431 UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
432 UIGraphicsEndImageContext();
433 CGImageRelease(cgImage);
434 return viewImage;
435}

◆ getSessionParams

- (rdpSettings *) getSessionParams

Definition at line 71 of file RDPSession.m.

438{
439 return _freerdp->context->settings;
440}

◆ hideRemoteCursor

- (void) hideRemoteCursor

Definition at line 71 of file RDPSession.m.

407{
408 if ([[self delegate] respondsToSelector:@selector(sessionDidHideRemoteCursor:)])
409 [[self delegate] sessionDidHideRemoteCursor:self];
410}

◆ initWithBookmark:

- (id) initWithBookmark: (ComputerBookmark *)  bookmark

Definition at line 71 of file RDPSession.m.

80 :(ComputerBookmark *)bookmark
81{
82 int status;
83 char **argv = nullptr;
84 int argc = 0;
85
86 if (!(self = [super init]))
87 return nil;
88
89 if (!bookmark)
90 [NSException raise:NSInvalidArgumentException
91 format:@"%s: params may not be nil.", __func__];
92
93 _bookmark = [bookmark retain];
94 _params = [[bookmark params] copy];
95 _name = [[bookmark label] retain];
96 _delegate = nil;
97 _toolbar_visible = YES;
98 _freerdp = ios_freerdp_new();
99 _ui_request_completed = [[NSCondition alloc] init];
100 BOOL connected_via_3g = ![bookmark conntectedViaWLAN];
101
102 if (!addArgument(&argc, &argv, "iFreeRDP"))
103 goto out_free;
104
105 if (!addArgument(&argc, &argv, "/gdi:sw"))
106 goto out_free;
107
108 if (!addArgument(&argc, &argv, "/relax-order-checks"))
109 goto out_free;
110 // Screen Size is set on connect (we need a valid delegate in case the user choose an automatic
111 // screen size)
112
113 // Other simple numeric settings
114 if ([_params hasValueForKey:@"colors"])
115 if (!addArgument(&argc, &argv, "/bpp:%d",
116 [_params intForKey:@"colors" with3GEnabled:connected_via_3g]))
117 goto out_free;
118
119 if ([_params hasValueForKey:@"port"])
120 if (!addArgument(&argc, &argv, "/port:%d", [_params intForKey:@"port"]))
121 goto out_free;
122
123 if ([_params boolForKey:@"console"])
124 if (!addArgument(&argc, &argv, "/admin"))
125 goto out_free;
126
127 if (!addArgument(&argc, &argv, "/v:%s", [_params UTF8StringForKey:@"hostname"]))
128 goto out_free;
129
130 // String settings
131 if ([[_params StringForKey:@"username"] length])
132 {
133 if (!addArgument(&argc, &argv, "/u:%s", [_params UTF8StringForKey:@"username"]))
134 goto out_free;
135 }
136
137 if ([[_params StringForKey:@"password"] length])
138 {
139 if (!addArgument(&argc, &argv, "/p:%s", [_params UTF8StringForKey:@"password"]))
140 goto out_free;
141 }
142
143 if ([[_params StringForKey:@"domain"] length])
144 {
145 if (!addArgument(&argc, &argv, "/d:%s", [_params UTF8StringForKey:@"domain"]))
146 goto out_free;
147 }
148
149 if ([[_params StringForKey:@"working_directory"] length])
150 {
151 if (!addArgument(&argc, &argv, "/shell-dir:%s",
152 [_params UTF8StringForKey:@"working_directory"]))
153 goto out_free;
154 }
155
156 if ([[_params StringForKey:@"remote_program"] length])
157 {
158 if (!addArgument(&argc, &argv, "/shell:%s", [_params UTF8StringForKey:@"remote_program"]))
159 goto out_free;
160 }
161
162 // RemoteFX
163 if ([_params boolForKey:@"perf_remotefx" with3GEnabled:connected_via_3g])
164 if (!addArgument(&argc, &argv, "/rfx"))
165 goto out_free;
166
167 if ([_params boolForKey:@"perf_gfx" with3GEnabled:connected_via_3g])
168 if (!addArgument(&argc, &argv, "/gfx"))
169 goto out_free;
170
171 if ([_params boolForKey:@"perf_h264" with3GEnabled:connected_via_3g])
172 if (!addArgument(&argc, &argv, "/gfx:AVC444"))
173 goto out_free;
174
175 if (![_params boolForKey:@"perf_remotefx" with3GEnabled:connected_via_3g] &&
176 ![_params boolForKey:@"perf_gfx" with3GEnabled:connected_via_3g] &&
177 ![_params boolForKey:@"perf_h264" with3GEnabled:connected_via_3g])
178 if (!addArgument(&argc, &argv, "/nsc"))
179 goto out_free;
180
181 if (!addArgument(&argc, &argv, "/cache:bitmap:on,glyph:on"))
182 goto out_free;
183
184 if (!addFlag(&argc, &argv, "wallpaper",
185 [_params boolForKey:@"perf_show_desktop" with3GEnabled:connected_via_3g]))
186 goto out_free;
187
188 if (!addFlag(&argc, &argv, "window-drag",
189 [_params boolForKey:@"perf_window_dragging" with3GEnabled:connected_via_3g]))
190 goto out_free;
191
192 if (!addFlag(&argc, &argv, "menu-anims",
193 [_params boolForKey:@"perf_menu_animation" with3GEnabled:connected_via_3g]))
194 goto out_free;
195
196 if (!addFlag(&argc, &argv, "themes",
197 [_params boolForKey:@"perf_windows_themes" with3GEnabled:connected_via_3g]))
198 goto out_free;
199
200 if (!addFlag(&argc, &argv, "fonts",
201 [_params boolForKey:@"perf_font_smoothing" with3GEnabled:connected_via_3g]))
202 goto out_free;
203
204 if (!addFlag(&argc, &argv, "aero",
205 [_params boolForKey:@"perf_desktop_composition" with3GEnabled:connected_via_3g]))
206 goto out_free;
207
208 if ([_params hasValueForKey:@"width"])
209 if (!addArgument(&argc, &argv, "/w:%d", [_params intForKey:@"width"]))
210 goto out_free;
211
212 if ([_params hasValueForKey:@"height"])
213 if (!addArgument(&argc, &argv, "/h:%d", [_params intForKey:@"height"]))
214 goto out_free;
215
216 // security
217 switch ([_params intForKey:@"security"])
218 {
219 case TSXProtocolSecurityNLA:
220 if (!addArgument(&argc, &argv, "/sec:NLA"))
221 goto out_free;
222
223 break;
224
225 case TSXProtocolSecurityTLS:
226 if (!addArgument(&argc, &argv, "/sec:TLS"))
227 goto out_free;
228
229 break;
230
231 case TSXProtocolSecurityRDP:
232 if (!addArgument(&argc, &argv, "/sec:RDP"))
233 goto out_free;
234
235 break;
236
237 default:
238 break;
239 }
240
241 // ts gateway settings
242 if ([_params boolForKey:@"enable_tsg_settings"])
243 {
244 if (!addArgument(&argc, &argv, "/gateway:g:%s:%d,u:%s,d:%s,p:%s",
245 [_params UTF8StringForKey:@"tsg_hostname"],
246 [_params intForKey:@"tsg_port"],
247 [_params UTF8StringForKey:@"tsg_username"],
248 [_params UTF8StringForKey:@"tsg_domain"],
249 [_params UTF8StringForKey:@"tsg_password"]))
250 goto out_free;
251 }
252
253 // Remote keyboard layout
254 if (!addArgument(&argc, &argv, "/kbd:layout:%d", 0x409))
255 goto out_free;
256
257 status =
258 freerdp_client_settings_parse_command_line(_freerdp->context->settings, argc, argv, FALSE);
259
260 if (0 != status)
261 goto out_free;
262
263 freeArguments(argc, argv);
264 [self mfi]->session = self;
265 return self;
266out_free:
267 freeArguments(argc, argv);
268 [self release];
269 return nil;
270}

◆ isSuspended

- (BOOL) isSuspended

Definition at line 71 of file RDPSession.m.

372{
373 return _suspended;
374}

◆ resume

- (void) resume

Definition at line 71 of file RDPSession.m.

355{
356 if (_suspended)
357 {
358 /* RECTANGLE_16 rec;
359 rec.left = 0;
360 rec.top = 0;
361 rec.right = freerdp_settings_get_uint32(instance->settings, FreeRDP_DesktopWidth);
362 rec.bottom = freerdp_settings_get_uint32(instance->settings, FreeRDP_DesktopHeight);
363 */
364 _suspended = NO;
365 // instance->update->SuppressOutput(instance->context, 1, &rec);
366 // [delegate sessionScreenSettingsChanged:self];
367 }
368}

◆ sendInputEvent:

- (void) sendInputEvent: (NSDictionary *)  event

Definition at line 71 of file RDPSession.m.

379 :(NSDictionary *)eventDescriptor
380{
381 if ([self mfi]->connection_state == TSXConnectionConnected)
382 ios_events_send([self mfi], eventDescriptor);
383}

◆ sessionName

- (NSString *) sessionName

Definition at line 71 of file RDPSession.m.

443{
444 return _name;
445}

◆ setDefaultRemoteCursor

- (void) setDefaultRemoteCursor

Definition at line 71 of file RDPSession.m.

413{
414 if ([[self delegate] respondsToSelector:@selector(sessionDidSetDefaultRemoteCursor:)])
415 [[self delegate] sessionDidSetDefaultRemoteCursor:self];
416}

◆ setNeedsDisplayInRectAsValue:

- (void) setNeedsDisplayInRectAsValue: (NSValue *)  rect_value

Definition at line 71 of file RDPSession.m.

388 :(NSValue *)rect_value
389{
390 if ([[self delegate] respondsToSelector:@selector(session:needsRedrawInRect:)])
391 [[self delegate] session:self needsRedrawInRect:[rect_value CGRectValue]];
392}

◆ setRemoteCursor:

- (void) setRemoteCursor: (RDPCursor *)  cursor

Definition at line 71 of file RDPSession.m.

394 :(RDPCursor *)cursor
395{
396 if ([[self delegate] respondsToSelector:@selector(session:didSetRemoteCursor:)])
397 [[self delegate] session:self didSetRemoteCursor:cursor];
398}

◆ setRemoteCursorPositionValue:

- (void) setRemoteCursorPositionValue: (NSValue *)  positionValue

Definition at line 71 of file RDPSession.m.

400 :(NSValue *)positionValue
401{
402 if ([[self delegate] respondsToSelector:@selector(session:didMoveRemoteCursor:)])
403 [[self delegate] session:self didMoveRemoteCursor:[positionValue CGPointValue]];
404}

◆ suspend

- (void) suspend

Definition at line 71 of file RDPSession.m.

345{
346 if (!_suspended)
347 {
348 _suspended = YES;
349 // instance->update->SuppressOutput(instance->context, 0, nullptr);
350 }
351}

Property Documentation

◆ bitmapContext

- (CGContextRef) bitmapContext
readatomicassign

Definition at line 76 of file RDPSession.h.

◆ bookmark

- (ComputerBookmark*) bookmark
readatomicassign

Definition at line 73 of file RDPSession.h.

◆ delegate

- (id<RDPSessionDelegate>) delegate
readwriteatomicassign

Definition at line 74 of file RDPSession.h.

◆ params

- (ConnectionParams*) params
readatomicassign

Definition at line 72 of file RDPSession.h.

◆ toolbarVisible

- (BOOL) toolbarVisible
readwriteatomicassign

Definition at line 75 of file RDPSession.h.

◆ uiRequestCompleted

- (NSCondition*) uiRequestCompleted
readatomicassign

Definition at line 77 of file RDPSession.h.


The documentation for this class was generated from the following files: