11#import <Foundation/Foundation.h>
13#import <freerdp/gdi/gdi.h>
14#import "ios_freerdp_ui.h"
19#pragma mark Certificate authentication
21static void ios_resize_display_buffer(mfInfo *mfi);
23BOOL ios_ui_authenticate_ex(freerdp *instance,
char **username,
char **password,
char **domain,
24 rdp_auth_reason reason)
35 case AUTH_SMARTCARD_PIN:
37 if ((*username) && (*password))
50 mfInfo *mfi = MFI_FROM_INSTANCE(instance);
51 NSMutableDictionary *params = [NSMutableDictionary
52 dictionaryWithObjectsAndKeys:(*username) ? [NSString stringWithUTF8String:*username] : @"",
54 (*password) ? [NSString stringWithUTF8String:*password] : @"",
56 (*domain) ? [NSString stringWithUTF8String:*domain] : @"",
57 @"domain", [NSString stringWithUTF8String:target],
61 [mfi->session performSelectorOnMainThread:@selector(sessionRequestsAuthenticationWithParams:)
65 [[mfi->session uiRequestCompleted] lock];
66 [[mfi->session uiRequestCompleted] wait];
67 [[mfi->session uiRequestCompleted] unlock];
69 if (![[params valueForKey:
@"result"] boolValue])
80 *username = _strdup([[params objectForKey:
@"username"] UTF8String]);
81 *password = _strdup([[params objectForKey:
@"password"] UTF8String]);
82 *domain = _strdup([[params objectForKey:
@"domain"] UTF8String]);
84 if (!(*username) || !(*password) || !(*domain))
95DWORD ios_ui_verify_certificate_ex(freerdp *instance,
const char *host, UINT16 port,
96 const char *common_name,
const char *subject,
const char *issuer,
97 const char *fingerprint, DWORD flags)
100 if ([[NSUserDefaults standardUserDefaults] boolForKey:
@"security.accept_certificates"] == YES)
103 mfInfo *mfi = MFI_FROM_INSTANCE(instance);
104 NSMutableDictionary *params = [NSMutableDictionary
105 dictionaryWithObjectsAndKeys:(subject) ? [NSString stringWithUTF8String:subject] : @"",
107 (issuer) ? [NSString stringWithUTF8String:issuer] : @"",
109 (fingerprint) ? [NSString stringWithUTF8String:subject] : @"",
110 @"fingerprint", nil];
112 [mfi->session performSelectorOnMainThread:@selector(sessionVerifyCertificateWithParams:)
116 [[mfi->session uiRequestCompleted] lock];
117 [[mfi->session uiRequestCompleted] wait];
118 [[mfi->session uiRequestCompleted] unlock];
120 if (![[params valueForKey:
@"result"] boolValue])
129DWORD ios_ui_verify_changed_certificate_ex(freerdp *instance,
const char *host, UINT16 port,
130 const char *common_name,
const char *subject,
131 const char *issuer,
const char *fingerprint,
132 const char *old_subject,
const char *old_issuer,
133 const char *old_fingerprint, DWORD flags)
135 return ios_ui_verify_certificate_ex(instance, host, port, common_name, subject, issuer,
140#pragma mark Graphics updates
142BOOL ios_ui_begin_paint(rdpContext *context)
144 WINPR_ASSERT(context);
146 rdpGdi *gdi = context->gdi;
148 WINPR_ASSERT(gdi->primary);
150 HGDI_DC hdc = gdi->primary->hdc;
158 hwnd->invalid->null = TRUE;
162BOOL ios_ui_end_paint(rdpContext *context)
164 WINPR_ASSERT(context);
166 mfInfo *mfi = MFI_FROM_INSTANCE(context->instance);
169 rdpGdi *gdi = context->gdi;
171 WINPR_ASSERT(gdi->primary);
173 HGDI_DC hdc = gdi->primary->hdc;
179 WINPR_ASSERT(hwnd->invalid || (hwnd->ninvalid == 0));
181 if (hwnd->invalid->null)
185 CGRectMake(hwnd->invalid->x, hwnd->invalid->y, hwnd->invalid->w, hwnd->invalid->h);
187 if (!hwnd->invalid->null)
188 [mfi->session performSelectorOnMainThread:@selector(setNeedsDisplayInRectAsValue:)
189 withObject:[NSValue valueWithCGRect:dirty_rect]
195BOOL ios_ui_resize_window(rdpContext *context)
197 rdpSettings *settings;
200 if (!context || !context->settings)
203 settings = context->settings;
210 ios_resize_display_buffer(MFI_FROM_INSTANCE(context->instance));
217static void ios_create_bitmap_context(mfInfo *mfi)
219 [mfi->session performSelectorOnMainThread:@selector(sessionBitmapContextWillChange)
222 rdpGdi *gdi = mfi->instance->context->gdi;
223 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
225 if (FreeRDPGetBytesPerPixel(gdi->dstFormat) == 2)
226 mfi->bitmap_context = CGBitmapContextCreate(
227 gdi->primary_buffer, gdi->width, gdi->height, 5, gdi->stride, colorSpace,
228 kCGBitmapByteOrder16Little | kCGImageAlphaNoneSkipFirst);
230 mfi->bitmap_context = CGBitmapContextCreate(
231 gdi->primary_buffer, gdi->width, gdi->height, 8, gdi->stride, colorSpace,
232 kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst);
234 CGColorSpaceRelease(colorSpace);
235 [mfi->session performSelectorOnMainThread:@selector(sessionBitmapContextDidChange)
240void ios_allocate_display_buffer(mfInfo *mfi)
242 ios_create_bitmap_context(mfi);
245void ios_resize_display_buffer(mfInfo *mfi)
248 CGContextRef old_context = mfi->bitmap_context;
249 mfi->bitmap_context =
nullptr;
250 CGContextRelease(old_context);
252 ios_create_bitmap_context(mfi);
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_server_name(const rdpSettings *settings)
A helper function to return the correct server name.
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_string(const rdpSettings *settings, FreeRDP_Settings_Keys_String id)
Returns a immutable string 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.