From: Armin Novak Date: Thu, 29 Nov 2018 15:29:07 +0000 (+0100) Subject: Added client callbacks. X-Git-Tag: 2.0.0~591^2~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4dd6e75779d27420a1f570dc57fcc2fa2c963afb;p=platform%2Fupstream%2Ffreerdp.git Added client callbacks. --- diff --git a/client/Mac/MRDPView.h b/client/Mac/MRDPView.h index 30217d8..3afcce7 100644 --- a/client/Mac/MRDPView.h +++ b/client/Mac/MRDPView.h @@ -84,7 +84,14 @@ BOOL mac_pre_connect(freerdp* instance); BOOL mac_post_connect(freerdp* instance); +void mac_post_disconnect(freerdp* instance); BOOL mac_authenticate(freerdp* instance, char** username, char** password, char** domain); +BOOL mac_gw_authenticate(freerdp* instance, char** username, char** password, + char** domain); + +DWORD mac_verify_certificate(freerdp* instance, const char* common_name, const char* subject, const char* issuer, const char* fingerprint, BOOL host_mismatch); +DWORD mac_verify_changed_certificate(freerdp* instance, const char* common_name, const char* subject, const char* issuer, const char* fingerprint, const char* old_subject, const char* old_issuer, const char* old_fingerprint); +int mac_logon_error_info(freerdp* instance, UINT32 data, UINT32 type); #endif /* FREERDP_CLIENT_MAC_MRDPVIEW_H */ diff --git a/client/Mac/MRDPView.m b/client/Mac/MRDPView.m index 4b86380..8cd643a 100644 --- a/client/Mac/MRDPView.m +++ b/client/Mac/MRDPView.m @@ -704,7 +704,6 @@ DWORD fixKeyCode(DWORD keyCode, unichar keyChar, enum APPLE_KEYBOARD_TYPE type) if (!is_connected) return; - gdi_free(context->instance); free(pixel_data); } @@ -934,16 +933,23 @@ BOOL mac_post_connect(freerdp* instance) return TRUE; } -BOOL mac_authenticate(freerdp* instance, char** username, char** password, +void mac_post_disconnect(freerdp* instance) +{ + if (!instance || !instance->context) + return; + + PubSub_UnsubscribeChannelConnected(instance->context->pubSub, mac_OnChannelConnectedEventHandler); + PubSub_UnsubscribeChannelDisconnected(instance->context->pubSub, mac_OnChannelDisconnectedEventHandler); + gdi_free(instance); +} + +static BOOL mac_authenticate_int(NSString* title, freerdp* instance, char** username, char** password, char** domain) { mfContext* mfc = (mfContext*) instance->context; MRDPView* view = (MRDPView*) mfc->view; PasswordDialog* dialog = [PasswordDialog new]; - dialog.serverHostname = [NSString stringWithFormat:@"%@:%u", - [NSString stringWithCString:instance->settings->ServerHostname encoding: - NSUTF8StringEncoding], - instance->settings->ServerPort]; + dialog.serverHostname = title; if (*username) dialog.username = [NSString stringWithCString:*username encoding: @@ -996,6 +1002,50 @@ BOOL mac_authenticate(freerdp* instance, char** username, char** password, return ok; } +BOOL mac_authenticate(freerdp* instance, char** username, char** password, + char** domain) +{ + NSString* title = [NSString stringWithFormat:@"%@:%u", + [NSString stringWithCString:instance->settings->ServerHostname encoding: + NSUTF8StringEncoding], + instance->settings->ServerPort]; + + return mac_authenticate_int(title, instance, username, password, domain); +} + +BOOL mac_gw_authenticate(freerdp* instance, char** username, char** password, + char** domain) +{ + NSString* title = [NSString stringWithFormat:@"%@:%u", + [NSString stringWithCString:instance->settings->GatewayHostname encoding: + NSUTF8StringEncoding], + instance->settings->GatewayPort]; + + return mac_authenticate_int(title, instance, username, password, domain); +} + +DWORD mac_verify_certificate(freerdp* instance, const char* common_name, const char* subject, const char* issuer, const char* fingerprint, BOOL host_mismatch) +{ + WLog_WARN(TAG, "TODO: Implement %s, accepting everything", __FUNCTION__); + return 2; +} + +DWORD mac_verify_changed_certificate(freerdp* instance, const char* common_name, const char* subject, const char* issuer, const char* fingerprint, const char* old_subject, const char* old_issuer, const char* old_fingerprint) +{ + WLog_WARN(TAG, "TODO: Implement %s, accepting everything", __FUNCTION__); + return 2; +} + +int mac_logon_error_info(freerdp* instance, UINT32 data, UINT32 type) +{ + const char* str_data = freerdp_get_logon_error_info_data(data); + const char* str_type = freerdp_get_logon_error_info_type(type); + + // TODO: Error message dialog + WLog_INFO(TAG, "Logon Error Info %s [%s]", str_data, str_type); + return 1; +} + BOOL mf_Pointer_New(rdpContext* context, rdpPointer* pointer) { rdpGdi* gdi; diff --git a/client/Mac/cli/AppDelegate.m b/client/Mac/cli/AppDelegate.m index 9d4432b..b868e12 100644 --- a/client/Mac/cli/AppDelegate.m +++ b/client/Mac/cli/AppDelegate.m @@ -44,13 +44,7 @@ void mac_set_view_size(rdpContext* context, MRDPView* view); mfc = (mfContext*) context; mfc->view = (void*) mrdpView; - if (status < 0) - { - NSString* winTitle; - winTitle = [[NSString alloc] initWithCString:"ERROR"]; - [window setTitle:winTitle]; - } - else + if (status == 0) { NSScreen* screen = [[NSScreen screens] objectAtIndex:0]; NSRect screenFrame = [screen frame]; diff --git a/client/Mac/cli/main.m b/client/Mac/cli/main.m index 4048b01..69643ef 100644 --- a/client/Mac/cli/main.m +++ b/client/Mac/cli/main.m @@ -10,5 +10,5 @@ int main(int argc, char *argv[]) { - return NSApplicationMain(argc, (const char**) argv); + return NSApplicationMain(argc, argv); } diff --git a/client/Mac/mf_client.m b/client/Mac/mf_client.m index 71eb4ff..8ebd882 100644 --- a/client/Mac/mf_client.m +++ b/client/Mac/mf_client.m @@ -88,8 +88,14 @@ static BOOL mfreerdp_client_new(freerdp* instance, rdpContext* context) mfc->stopEvent = CreateEvent(NULL, TRUE, FALSE, NULL); context->instance->PreConnect = mac_pre_connect; context->instance->PostConnect = mac_post_connect; + context->instance->PostDisconnect = mac_post_disconnect; context->instance->Authenticate = mac_authenticate; - settings = instance->settings; + context->instance->GatewayAuthenticate = mac_gw_authenticate; + context->instance->VerifyCertificate = mac_verify_certificate; + context->instance->VerifyChangedCertificate = mac_verify_changed_certificate; + context->instance->LogonErrorInfo = mac_logon_error_info; + context->instance->settings = instance->settings; + settings = context->settings; settings->AsyncUpdate = TRUE; settings->AsyncInput = TRUE; return TRUE;