diff --git a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/BookmarkBase.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/BookmarkBase.java index fdffaec19..f45cc5035 100644 --- a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/BookmarkBase.java +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/BookmarkBase.java @@ -274,7 +274,6 @@ public class BookmarkBase implements Parcelable, Cloneable { advancedSettings.getConsoleMode()); editor.putBoolean("bookmark.async_channel", debugSettings.getAsyncChannel()); - editor.putBoolean("bookmark.async_transport", debugSettings.getAsyncTransport()); editor.putBoolean("bookmark.async_input", debugSettings.getAsyncInput()); editor.putBoolean("bookmark.async_update", debugSettings.getAsyncUpdate()); editor.putString("bookmark.debug_level", @@ -357,7 +356,6 @@ public class BookmarkBase implements Parcelable, Cloneable { advancedSettings.setConsoleMode(sharedPrefs.getBoolean("bookmark.console_mode", false)); debugSettings.setAsyncChannel(sharedPrefs.getBoolean("bookmark.async_channel", true)); - debugSettings.setAsyncTransport(sharedPrefs.getBoolean("bookmark.async_transport", true)); debugSettings.setAsyncInput(sharedPrefs.getBoolean("bookmark.async_input", true)); debugSettings.setAsyncUpdate(sharedPrefs.getBoolean("bookmark.async_update", true)); debugSettings.setDebugLevel(sharedPrefs.getString("bookmark.debug_level", "INFO")); @@ -750,14 +748,6 @@ public class BookmarkBase implements Parcelable, Cloneable { this.debug = debug; } - public boolean getAsyncTransport() { - return asyncTransport; - } - - public void setAsyncTransport(boolean enabled) { - asyncTransport = enabled; - } - public boolean getAsyncUpdate() { return asyncUpdate; } diff --git a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/BookmarkActivity.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/BookmarkActivity.java index 6cc26fcc7..232039d79 100644 --- a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/BookmarkActivity.java +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/BookmarkActivity.java @@ -514,7 +514,6 @@ public class BookmarkActivity extends PreferenceActivity implements private void initDebugSettings(SharedPreferences sharedPreferences) { debugSettingsChanged(sharedPreferences, "bookmark.debug_level"); debugSettingsChanged(sharedPreferences, "bookmark.async_channel"); - debugSettingsChanged(sharedPreferences, "bookmark.async_transport"); debugSettingsChanged(sharedPreferences, "bookmark.async_update"); debugSettingsChanged(sharedPreferences, "bookmark.async_input"); } @@ -537,10 +536,6 @@ public class BookmarkActivity extends PreferenceActivity implements boolean enabled = sharedPreferences.getBoolean(key, false); Preference pref = findPreference("bookmark.async_channel"); pref.setDefaultValue(enabled); - } else if (key.equals("bookmark.async_transport")) { - boolean enabled = sharedPreferences.getBoolean(key, false); - Preference pref = findPreference("bookmark.async_transport"); - pref.setDefaultValue(enabled); } else if (key.equals("bookmark.async_update")) { boolean enabled = sharedPreferences.getBoolean(key, false); Preference pref = findPreference("bookmark.async_update"); diff --git a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java index 537937468..5335ff507 100644 --- a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java @@ -104,7 +104,6 @@ public abstract class BookmarkBaseGateway { values.put(BookmarkDB.DB_KEY_BOOKMARK_WORK_DIR, bookmark.getAdvancedSettings().getWorkDir()); values.put(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_CHANNEL, bookmark.getDebugSettings().getAsyncChannel()); - values.put(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_TRANSPORT, bookmark.getDebugSettings().getAsyncTransport()); values.put(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_INPUT, bookmark.getDebugSettings().getAsyncInput()); values.put(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_UPDATE, bookmark.getDebugSettings().getAsyncUpdate()); values.put(BookmarkDB.DB_KEY_BOOKMARK_DEBUG_LEVEL, bookmark.getDebugSettings().getDebugLevel()); @@ -147,7 +146,6 @@ public abstract class BookmarkBaseGateway { values.put(BookmarkDB.DB_KEY_BOOKMARK_WORK_DIR, bookmark.getAdvancedSettings().getWorkDir()); values.put(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_CHANNEL, bookmark.getDebugSettings().getAsyncChannel()); - values.put(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_TRANSPORT, bookmark.getDebugSettings().getAsyncTransport()); values.put(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_INPUT, bookmark.getDebugSettings().getAsyncInput()); values.put(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_UPDATE, bookmark.getDebugSettings().getAsyncUpdate()); values.put(BookmarkDB.DB_KEY_BOOKMARK_DEBUG_LEVEL, bookmark.getDebugSettings().getDebugLevel()); @@ -276,7 +274,6 @@ public abstract class BookmarkBaseGateway { // debug settings columns.add(BookmarkDB.DB_KEY_BOOKMARK_DEBUG_LEVEL); columns.add(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_CHANNEL); - columns.add(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_TRANSPORT); columns.add(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_UPDATE); columns.add(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_INPUT); @@ -345,8 +342,6 @@ public abstract class BookmarkBaseGateway { bookmark.getDebugSettings().setAsyncChannel( cursor.getInt(cursor.getColumnIndex(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_CHANNEL)) == 1); - bookmark.getDebugSettings().setAsyncTransport( - cursor.getInt(cursor.getColumnIndex(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_TRANSPORT)) == 1); bookmark.getDebugSettings().setAsyncInput( cursor.getInt(cursor.getColumnIndex(BookmarkDB.DB_KEY_BOOKMARK_ASYNC_INPUT)) == 1); bookmark.getDebugSettings().setAsyncUpdate( diff --git a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkDB.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkDB.java index c5028c991..e2537d5a2 100644 --- a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkDB.java +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkDB.java @@ -23,7 +23,7 @@ import java.util.List; public class BookmarkDB extends SQLiteOpenHelper { public static final String ID = BaseColumns._ID; - private static final int DB_VERSION = 8; + private static final int DB_VERSION = 9; private static final String DB_BACKUP_PREFIX = "temp_"; private static final String DB_NAME = "bookmarks.db"; static final String DB_TABLE_BOOKMARK = "tbl_manual_bookmarks"; @@ -69,7 +69,6 @@ public class BookmarkDB extends SQLiteOpenHelper { static final String DB_KEY_BOOKMARK_REMOTE_PROGRAM = "remote_program"; static final String DB_KEY_BOOKMARK_WORK_DIR = "work_dir"; static final String DB_KEY_BOOKMARK_ASYNC_CHANNEL = "async_channel"; - static final String DB_KEY_BOOKMARK_ASYNC_TRANSPORT = "async_transport"; static final String DB_KEY_BOOKMARK_ASYNC_INPUT = "async_input"; static final String DB_KEY_BOOKMARK_ASYNC_UPDATE = "async_update"; static final String DB_KEY_BOOKMARK_CONSOLE_MODE = "console_mode"; @@ -265,7 +264,6 @@ public class BookmarkDB extends SQLiteOpenHelper { bookmarkValues.put(DB_KEY_BOOKMARK_REMOTE_PROGRAM, ""); bookmarkValues.put(DB_KEY_BOOKMARK_WORK_DIR, ""); bookmarkValues.put(DB_KEY_BOOKMARK_ASYNC_CHANNEL, 1); - bookmarkValues.put(DB_KEY_BOOKMARK_ASYNC_TRANSPORT, 0); bookmarkValues.put(DB_KEY_BOOKMARK_ASYNC_INPUT, 1); bookmarkValues.put(DB_KEY_BOOKMARK_ASYNC_UPDATE, 1); bookmarkValues.put(DB_KEY_BOOKMARK_CONSOLE_MODE, 0); @@ -310,7 +308,6 @@ public class BookmarkDB extends SQLiteOpenHelper { + DB_KEY_BOOKMARK_REMOTE_PROGRAM + " TEXT, " + DB_KEY_BOOKMARK_WORK_DIR + " TEXT, " + DB_KEY_BOOKMARK_ASYNC_CHANNEL + " INTEGER DEFAULT 0, " - + DB_KEY_BOOKMARK_ASYNC_TRANSPORT + " INTEGER DEFAULT 0, " + DB_KEY_BOOKMARK_ASYNC_INPUT + " INTEGER DEFAULT 0, " + DB_KEY_BOOKMARK_ASYNC_UPDATE + " INTEGER DEFAULT 0, " + DB_KEY_BOOKMARK_CONSOLE_MODE + " INTEGER, " @@ -377,6 +374,7 @@ public class BookmarkDB extends SQLiteOpenHelper { case 6: case 7: case 8: + case 9: upgradeDB(db); break; default: diff --git a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/LibFreeRDP.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/LibFreeRDP.java index 99d0f780c..0d2bd2e2d 100644 --- a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/LibFreeRDP.java +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/LibFreeRDP.java @@ -239,7 +239,6 @@ public class LibFreeRDP { } args.add(addFlag("async-channels", debug.getAsyncChannel())); - //args.add(addFlag("async-transport", debug.getAsyncTransport())); args.add(addFlag("async-input", debug.getAsyncInput())); args.add(addFlag("async-update", debug.getAsyncUpdate())); diff --git a/client/Android/Studio/freeRDPCore/src/main/res/values-de/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values-de/strings.xml index 0cd91f4ae..d309e57ee 100644 --- a/client/Android/Studio/freeRDPCore/src/main/res/values-de/strings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values-de/strings.xml @@ -113,7 +113,6 @@ Remote Program Arbeitsverzeichnis Async channel - Async transport Async input Async update Konsolenmodus diff --git a/client/Android/Studio/freeRDPCore/src/main/res/values-es/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values-es/strings.xml index 89a0657db..63ed1c053 100644 --- a/client/Android/Studio/freeRDPCore/src/main/res/values-es/strings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values-es/strings.xml @@ -114,7 +114,6 @@ Programa Remoto Directorio de trabajo Async channel - Async transport Async input Async update Modo Consola diff --git a/client/Android/Studio/freeRDPCore/src/main/res/values-fr/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values-fr/strings.xml index cbe6439de..9eacc705a 100644 --- a/client/Android/Studio/freeRDPCore/src/main/res/values-fr/strings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values-fr/strings.xml @@ -113,7 +113,6 @@ "Lancement de programme" "Répertoire de travail" Async channel - Async transport Async input Async update "Mode console" diff --git a/client/Android/Studio/freeRDPCore/src/main/res/values-nl/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values-nl/strings.xml index f9886c21f..8e338ae4c 100644 --- a/client/Android/Studio/freeRDPCore/src/main/res/values-nl/strings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values-nl/strings.xml @@ -114,7 +114,6 @@ Extern programma Werkmap Async channel - Async transport Async input Async update Console modus diff --git a/client/Android/Studio/freeRDPCore/src/main/res/values-zh/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values-zh/strings.xml index e5b040f42..a76cd2540 100644 --- a/client/Android/Studio/freeRDPCore/src/main/res/values-zh/strings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values-zh/strings.xml @@ -113,7 +113,6 @@ 远程程序 工作目录 Async channel - Async transport Async input Async update 控制台模式 diff --git a/client/Android/Studio/freeRDPCore/src/main/res/values/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values/strings.xml index c11911190..adcd5f28a 100644 --- a/client/Android/Studio/freeRDPCore/src/main/res/values/strings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values/strings.xml @@ -154,7 +154,6 @@ Remote Program Working Directory Async channel - Async transport Async input Async update Console Mode diff --git a/client/Android/Studio/freeRDPCore/src/main/res/xml/debug_settings.xml b/client/Android/Studio/freeRDPCore/src/main/res/xml/debug_settings.xml index effd8ac3c..eb0515ac2 100644 --- a/client/Android/Studio/freeRDPCore/src/main/res/xml/debug_settings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/xml/debug_settings.xml @@ -28,9 +28,6 @@ - diff --git a/client/Mac/MRDPView.m b/client/Mac/MRDPView.m index 20184ee50..840ae8931 100644 --- a/client/Mac/MRDPView.m +++ b/client/Mac/MRDPView.m @@ -217,8 +217,6 @@ DWORD mac_client_thread(void* param) while (!freerdp_shall_disconnect(instance)) { nCount = nCountBase; - - if (!settings->AsyncTransport) { if (!(nCountTmp = freerdp_get_event_handles(context, &events[nCount], 16 - nCount))) @@ -229,7 +227,6 @@ DWORD mac_client_thread(void* param) nCount += nCountTmp; } - status = WaitForMultipleObjects(nCount, events, FALSE, INFINITE); if (status >= (WAIT_OBJECT_0 + nCount)) @@ -252,7 +249,6 @@ DWORD mac_client_thread(void* param) } } - if (!settings->AsyncTransport) { if (!freerdp_check_event_handles(context)) { diff --git a/client/Mac/mf_client.m b/client/Mac/mf_client.m index dba7d50be..575d44861 100644 --- a/client/Mac/mf_client.m +++ b/client/Mac/mf_client.m @@ -49,7 +49,7 @@ static int mfreerdp_client_start(rdpContext* context) { // view not specified beforehand. Create view dynamically mfc->view = [[MRDPView alloc] initWithFrame : NSMakeRect(0, 0, - context->settings->DesktopWidth, context->settings->DesktopHeight)]; + context->settings->DesktopWidth, context->settings->DesktopHeight)]; mfc->view_ownership = TRUE; } @@ -90,7 +90,6 @@ static BOOL mfreerdp_client_new(freerdp* instance, rdpContext* context) context->instance->PostConnect = mac_post_connect; context->instance->Authenticate = mac_authenticate; settings = instance->settings; - settings->AsyncTransport = FALSE; settings->AsyncUpdate = TRUE; settings->AsyncInput = TRUE; return TRUE; diff --git a/client/Windows/wf_client.c b/client/Windows/wf_client.c index a53e95a49..070640b61 100644 --- a/client/Windows/wf_client.c +++ b/client/Windows/wf_client.c @@ -628,7 +628,6 @@ static DWORD WINAPI wf_client_thread(LPVOID lpParam) rdpChannels* channels; rdpSettings* settings; BOOL async_input; - BOOL async_transport; HANDLE input_thread; instance = (freerdp*) lpParam; context = instance->context; @@ -640,7 +639,6 @@ static DWORD WINAPI wf_client_thread(LPVOID lpParam) channels = instance->context->channels; settings = instance->context->settings; async_input = settings->AsyncInput; - async_transport = settings->AsyncTransport; if (async_input) { @@ -662,7 +660,6 @@ static DWORD WINAPI wf_client_thread(LPVOID lpParam) wf_event_focus_in(wfc); } - if (!async_transport) { DWORD tmp = freerdp_get_event_handles(context, &handles[nCount], 64 - nCount); @@ -683,7 +680,6 @@ static DWORD WINAPI wf_client_thread(LPVOID lpParam) break; } - if (!async_transport) { if (!freerdp_check_event_handles(context)) { diff --git a/client/X11/xf_client.c b/client/X11/xf_client.c index b2e3b8085..eaf292e1d 100644 --- a/client/X11/xf_client.c +++ b/client/X11/xf_client.c @@ -1569,7 +1569,6 @@ static DWORD WINAPI xf_client_thread(LPVOID param) xf_keyboard_focus_in(xfc); } - if (!settings->AsyncTransport) { DWORD tmp = freerdp_get_event_handles(context, &handles[nCount], ARRAYSIZE(handles) - nCount); @@ -1587,7 +1586,6 @@ static DWORD WINAPI xf_client_thread(LPVOID param) if (waitStatus == WAIT_FAILED) break; - if (!settings->AsyncTransport) { if (!freerdp_check_event_handles(context)) { diff --git a/client/common/cmdline.c b/client/common/cmdline.c index f1ab367cd..addd3b33d 100644 --- a/client/common/cmdline.c +++ b/client/common/cmdline.c @@ -2590,10 +2590,6 @@ int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings, { settings->AsyncChannels = arg->Value ? TRUE : FALSE; } - CommandLineSwitchCase(arg, "async-transport") - { - settings->AsyncTransport = arg->Value ? TRUE : FALSE; - } CommandLineSwitchCase(arg, "wm-class") { free(settings->WmClass); diff --git a/client/common/cmdline.h b/client/common/cmdline.h index 8affc186e..f49be3abb 100644 --- a/client/common/cmdline.h +++ b/client/common/cmdline.h @@ -37,7 +37,6 @@ static COMMAND_LINE_ARGUMENT_A args[] = { "assistance", COMMAND_LINE_VALUE_REQUIRED, "", NULL, NULL, -1, NULL, "Remote assistance password" }, { "async-channels", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "Asynchronous channels (experimental)" }, { "async-input", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "Asynchronous input" }, - { "async-transport", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "Asynchronous transport (experimental)" }, { "async-update", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "Asynchronous update" }, { "audio-mode", COMMAND_LINE_VALUE_REQUIRED, "", NULL, NULL, -1, NULL, "Audio output mode" }, { "auth-only", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, "Authenticate only" }, diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 0a548e778..1562e1f40 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -505,6 +505,8 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL; #define FreeRDP_PasswordHash ( 24) #define FreeRDP_WaitForOutputBufferFlush ( 25) #define FreeRDP_MaxTimeInCheckLoop ( 26) +#define FreeRDP_AcceptedCert ( 27) +#define FreeRDP_AcceptedCertLength ( 28) #define FreeRDP_RdpVersion ( 128) #define FreeRDP_DesktopWidth ( 129) #define FreeRDP_DesktopHeight ( 130) @@ -644,6 +646,8 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL; #define FreeRDP_TargetNetAddressCount (1228) #define FreeRDP_TargetNetAddresses (1229) #define FreeRDP_TargetNetPorts (1230) +#define FreeRDP_RedirectionAcceptedCert (1231) +#define FreeRDP_RedirectionAcceptedCertLength (1232) #define FreeRDP_Password51 (1280) #define FreeRDP_Password51Length (1281) #define FreeRDP_KerberosKdc (1344) @@ -671,7 +675,6 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL; #define FreeRDP_AsyncInput (1544) #define FreeRDP_AsyncUpdate (1545) #define FreeRDP_AsyncChannels (1546) -#define FreeRDP_AsyncTransport (1547) #define FreeRDP_ToggleFullscreen (1548) #define FreeRDP_WmClass (1549) #define FreeRDP_EmbeddedWindow (1550) @@ -712,6 +715,8 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL; #define FreeRDP_GatewayHttpTransport (1995) #define FreeRDP_GatewayUdpTransport (1996) #define FreeRDP_GatewayAccessToken (1997) +#define FreeRDP_GatewayAcceptedCert (1998) +#define FreeRDP_GatewayAcceptedCertLength (1999) #define FreeRDP_ProxyType (2015) #define FreeRDP_ProxyHostname (2016) #define FreeRDP_ProxyPort (2017) @@ -1127,7 +1132,7 @@ struct rdp_settings ALIGN64 BOOL AsyncInput; /* 1544 */ ALIGN64 BOOL AsyncUpdate; /* 1545 */ ALIGN64 BOOL AsyncChannels; /* 1546 */ - ALIGN64 BOOL AsyncTransport; /* 1547 */ + UINT64 padding1548[1548 - 1547]; /* 1547 */ ALIGN64 BOOL ToggleFullscreen; /* 1548 */ ALIGN64 char* WmClass; /* 1549 */ ALIGN64 BOOL EmbeddedWindow; /* 1550 */ @@ -1147,7 +1152,7 @@ struct rdp_settings ALIGN64 BOOL AuthenticationOnly; /* 1603 */ ALIGN64 BOOL CredentialsFromStdin; /* 1604 */ ALIGN64 BOOL UnmapButtons; /* 1605 */ - UINT64 padding1664[1664 - 1606]; /* 1606 */ + UINT64 padding1664[1664 - 1606]; /* 1606 */ /* Names */ ALIGN64 char* ComputerName; /* 1664 */ diff --git a/libfreerdp/common/settings.c b/libfreerdp/common/settings.c index f79a2820b..e339c67ad 100644 --- a/libfreerdp/common/settings.c +++ b/libfreerdp/common/settings.c @@ -37,7 +37,7 @@ int freerdp_addin_set_argument(ADDIN_ARGV* args, char* argument) { int i; - char **new_argv; + char** new_argv; for (i = 0; i < args->argc; i++) { @@ -48,10 +48,13 @@ int freerdp_addin_set_argument(ADDIN_ARGV* args, char* argument) } new_argv = (char**) realloc(args->argv, sizeof(char*) * (args->argc + 1)); + if (!new_argv) return -1; + args->argv = new_argv; args->argc++; + if (!(args->argv[args->argc - 1] = _strdup(argument))) return -1; @@ -61,13 +64,14 @@ int freerdp_addin_set_argument(ADDIN_ARGV* args, char* argument) int freerdp_addin_replace_argument(ADDIN_ARGV* args, char* previous, char* argument) { int i; - char **new_argv; + char** new_argv; for (i = 0; i < args->argc; i++) { if (strcmp(args->argv[i], previous) == 0) { free(args->argv[i]); + if (!(args->argv[i] = _strdup(argument))) return -1; @@ -76,10 +80,13 @@ int freerdp_addin_replace_argument(ADDIN_ARGV* args, char* previous, char* argum } new_argv = (char**) realloc(args->argv, sizeof(char*) * (args->argc + 1)); + if (!new_argv) return -1; + args->argv = new_argv; args->argc++; + if (!(args->argv[args->argc - 1] = _strdup(argument))) return -1; @@ -92,12 +99,13 @@ int freerdp_addin_set_argument_value(ADDIN_ARGV* args, char* option, char* value char* p; char* str; int length; - char **new_argv; - + char** new_argv; length = strlen(option) + strlen(value) + 1; str = (char*) malloc(length + 1); + if (!str) return -1; + sprintf_s(str, length + 1, "%s:%s", option, value); for (i = 0; i < args->argc; i++) @@ -110,13 +118,13 @@ int freerdp_addin_set_argument_value(ADDIN_ARGV* args, char* option, char* value { free(args->argv[i]); args->argv[i] = str; - return 1; } } } new_argv = (char**) realloc(args->argv, sizeof(char*) * (args->argc + 1)); + if (!new_argv) { free(str); @@ -126,21 +134,22 @@ int freerdp_addin_set_argument_value(ADDIN_ARGV* args, char* option, char* value args->argv = new_argv; args->argc++; args->argv[args->argc - 1] = str; - return 0; } -int freerdp_addin_replace_argument_value(ADDIN_ARGV* args, char* previous, char* option, char* value) +int freerdp_addin_replace_argument_value(ADDIN_ARGV* args, char* previous, char* option, + char* value) { int i; char* str; int length; - char **new_argv; - + char** new_argv; length = strlen(option) + strlen(value) + 1; str = (char*) malloc(length + 1); + if (!str) return -1; + sprintf_s(str, length + 1, "%s:%s", option, value); for (i = 0; i < args->argc; i++) @@ -149,21 +158,21 @@ int freerdp_addin_replace_argument_value(ADDIN_ARGV* args, char* previous, char* { free(args->argv[i]); args->argv[i] = str; - return 1; } } new_argv = (char**) realloc(args->argv, sizeof(char*) * (args->argc + 1)); + if (!new_argv) { free(str); return -1; } + args->argv = new_argv; args->argc++; args->argv[args->argc - 1] = str; - return 0; } @@ -175,13 +184,14 @@ BOOL freerdp_device_collection_add(rdpSettings* settings, RDPDR_DEVICE* device) if (settings->DeviceArraySize < (settings->DeviceCount + 1)) { UINT32 new_size; - RDPDR_DEVICE **new_array; - + RDPDR_DEVICE** new_array; new_size = settings->DeviceArraySize * 2; new_array = (RDPDR_DEVICE**) - realloc(settings->DeviceArray, new_size * sizeof(RDPDR_DEVICE*)); + realloc(settings->DeviceArray, new_size * sizeof(RDPDR_DEVICE*)); + if (!new_array) return FALSE; + settings->DeviceArray = new_array; settings->DeviceArraySize = new_size; } @@ -237,20 +247,20 @@ RDPDR_DEVICE* freerdp_device_clone(RDPDR_DEVICE* device) _drive->Id = drive->Id; _drive->Type = drive->Type; - _drive->Name = _strdup(drive->Name); + if (!_drive->Name) goto out_fs_name_error; _drive->Path = _strdup(drive->Path); + if (!_drive->Path) goto out_fs_path_error; return (RDPDR_DEVICE*) _drive; - -out_fs_path_error: + out_fs_path_error: free(_drive->Name); -out_fs_name_error: + out_fs_name_error: free(_drive); return NULL; } @@ -269,6 +279,7 @@ out_fs_name_error: if (printer->Name) { _printer->Name = _strdup(printer->Name); + if (!_printer->Name) goto out_print_name_error; } @@ -276,15 +287,15 @@ out_fs_name_error: if (printer->DriverName) { _printer->DriverName = _strdup(printer->DriverName); + if (!_printer->DriverName) goto out_print_path_error; } return (RDPDR_DEVICE*) _printer; - -out_print_path_error: + out_print_path_error: free(_printer->Name); -out_print_name_error: + out_print_name_error: free(_printer); return NULL; } @@ -303,13 +314,13 @@ out_print_name_error: if (smartcard->Name) { _smartcard->Name = _strdup(smartcard->Name); + if (!_smartcard->Name) goto out_smartc_name_error; } return (RDPDR_DEVICE*) _smartcard; - -out_smartc_name_error: + out_smartc_name_error: free(_smartcard); return NULL; } @@ -328,6 +339,7 @@ out_smartc_name_error: if (serial->Name) { _serial->Name = _strdup(serial->Name); + if (!_serial->Name) goto out_serial_name_error; } @@ -335,6 +347,7 @@ out_smartc_name_error: if (serial->Path) { _serial->Path = _strdup(serial->Path); + if (!_serial->Path) goto out_serial_path_error; } @@ -342,17 +355,17 @@ out_smartc_name_error: if (serial->Driver) { _serial->Driver = _strdup(serial->Driver); + if (!_serial->Driver) goto out_serial_driver_error; } return (RDPDR_DEVICE*) _serial; - -out_serial_driver_error: + out_serial_driver_error: free(_serial->Path); -out_serial_path_error: + out_serial_path_error: free(_serial->Name); -out_serial_name_error: + out_serial_name_error: free(_serial); return NULL; } @@ -371,6 +384,7 @@ out_serial_name_error: if (parallel->Name) { _parallel->Name = _strdup(parallel->Name); + if (!_parallel->Name) goto out_parallel_name_error; } @@ -378,17 +392,17 @@ out_serial_name_error: if (parallel->Path) { _parallel->Path = _strdup(parallel->Path); + if (!_parallel->Path) goto out_parallel_path_error; } return (RDPDR_DEVICE*) _parallel; -out_parallel_path_error: + out_parallel_path_error: free(_parallel->Name); -out_parallel_name_error: + out_parallel_name_error: free(_parallel); return NULL; - } WLog_ERR(TAG, "unknown device type %"PRIu32"", device->Type); @@ -415,11 +429,9 @@ void freerdp_device_collection_free(rdpSettings* settings) } else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_PRINT) { - } else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_SMARTCARD) { - } else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_SERIAL) { @@ -435,7 +447,6 @@ void freerdp_device_collection_free(rdpSettings* settings) } free(settings->DeviceArray); - settings->DeviceArraySize = 0; settings->DeviceArray = NULL; settings->DeviceCount = 0; @@ -449,13 +460,14 @@ BOOL freerdp_static_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* ch if (settings->StaticChannelArraySize < (settings->StaticChannelCount + 1)) { UINT32 new_size; - ADDIN_ARGV **new_array; - + ADDIN_ARGV** new_array; new_size = settings->StaticChannelArraySize * 2; new_array = (ADDIN_ARGV**) - realloc(settings->StaticChannelArray, new_size * sizeof(ADDIN_ARGV*)); + realloc(settings->StaticChannelArray, new_size * sizeof(ADDIN_ARGV*)); + if (!new_array) return FALSE; + settings->StaticChannelArray = new_array; settings->StaticChannelArraySize = new_size; } @@ -484,28 +496,31 @@ ADDIN_ARGV* freerdp_static_channel_clone(ADDIN_ARGV* channel) { int index; ADDIN_ARGV* _channel = NULL; - _channel = (ADDIN_ARGV*) malloc(sizeof(ADDIN_ARGV)); + if (!_channel) return NULL; _channel->argc = channel->argc; _channel->argv = (char**) calloc(channel->argc, sizeof(char*)); + if (!_channel->argv) goto out_free; for (index = 0; index < _channel->argc; index++) { _channel->argv[index] = _strdup(channel->argv[index]); + if (!_channel->argv[index]) goto out_release_args; } return _channel; - out_release_args: + for (index = 0; _channel->argv[index]; index++) free(_channel->argv[index]); + out_free: free(_channel); return NULL; @@ -529,7 +544,6 @@ void freerdp_static_channel_collection_free(rdpSettings* settings) } free(settings->StaticChannelArray); - settings->StaticChannelArraySize = 0; settings->StaticChannelArray = NULL; settings->StaticChannelCount = 0; @@ -542,9 +556,10 @@ BOOL freerdp_dynamic_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* c if (settings->DynamicChannelArraySize < (settings->DynamicChannelCount + 1)) { - ADDIN_ARGV **new_array; + ADDIN_ARGV** new_array; + new_array = realloc(settings->DynamicChannelArray, + settings->DynamicChannelArraySize * sizeof(ADDIN_ARGV*) * 2); - new_array = realloc(settings->DynamicChannelArray, settings->DynamicChannelArraySize * sizeof(ADDIN_ARGV*) * 2); if (!new_array) return FALSE; @@ -576,7 +591,6 @@ ADDIN_ARGV* freerdp_dynamic_channel_clone(ADDIN_ARGV* channel) { int index; ADDIN_ARGV* _channel = NULL; - _channel = (ADDIN_ARGV*) malloc(sizeof(ADDIN_ARGV)); if (!_channel) @@ -597,10 +611,11 @@ ADDIN_ARGV* freerdp_dynamic_channel_clone(ADDIN_ARGV* channel) } return _channel; - out_release_args: + for (index = 0; _channel->argv[index]; index++) free(_channel->argv[index]); + out_free: free(_channel); return NULL; @@ -624,7 +639,6 @@ void freerdp_dynamic_channel_collection_free(rdpSettings* settings) } free(settings->DynamicChannelArray); - settings->DynamicChannelArraySize = 0; settings->DynamicChannelArray = NULL; settings->DynamicChannelCount = 0; @@ -639,7 +653,6 @@ void freerdp_target_net_addresses_free(rdpSettings* settings) free(settings->TargetNetAddresses); free(settings->TargetNetPorts); - settings->TargetNetAddressCount = 0; settings->TargetNetAddresses = NULL; settings->TargetNetPorts = NULL; @@ -670,16 +683,15 @@ void freerdp_performance_flags_make(rdpSettings* settings) void freerdp_performance_flags_split(rdpSettings* settings) { - settings->AllowFontSmoothing = (settings->PerformanceFlags & PERF_ENABLE_FONT_SMOOTHING) ? TRUE : FALSE; - - settings->AllowDesktopComposition = (settings->PerformanceFlags & PERF_ENABLE_DESKTOP_COMPOSITION) ? TRUE : FALSE; - + settings->AllowFontSmoothing = (settings->PerformanceFlags & PERF_ENABLE_FONT_SMOOTHING) ? TRUE : + FALSE; + settings->AllowDesktopComposition = (settings->PerformanceFlags & PERF_ENABLE_DESKTOP_COMPOSITION) ? + TRUE : FALSE; settings->DisableWallpaper = (settings->PerformanceFlags & PERF_DISABLE_WALLPAPER) ? TRUE : FALSE; - - settings->DisableFullWindowDrag = (settings->PerformanceFlags & PERF_DISABLE_FULLWINDOWDRAG) ? TRUE : FALSE; - - settings->DisableMenuAnims = (settings->PerformanceFlags & PERF_DISABLE_MENUANIMATIONS) ? TRUE : FALSE; - + settings->DisableFullWindowDrag = (settings->PerformanceFlags & PERF_DISABLE_FULLWINDOWDRAG) ? + TRUE : FALSE; + settings->DisableMenuAnims = (settings->PerformanceFlags & PERF_DISABLE_MENUANIMATIONS) ? TRUE : + FALSE; settings->DisableThemes = (settings->PerformanceFlags & PERF_DISABLE_THEMING) ? TRUE : FALSE; } @@ -719,7 +731,8 @@ void freerdp_set_gateway_usage_method(rdpSettings* settings, UINT32 GatewayUsage } } -void freerdp_update_gateway_usage_method(rdpSettings* settings, UINT32 GatewayEnabled, UINT32 GatewayBypassLocal) +void freerdp_update_gateway_usage_method(rdpSettings* settings, UINT32 GatewayEnabled, + UINT32 GatewayBypassLocal) { UINT32 GatewayUsageMethod = 0; @@ -942,9 +955,6 @@ BOOL freerdp_get_param_bool(rdpSettings* settings, int id) case FreeRDP_AsyncChannels: return settings->AsyncChannels; - case FreeRDP_AsyncTransport: - return settings->AsyncTransport; - case FreeRDP_ToggleFullscreen: return settings->ToggleFullscreen; @@ -1415,10 +1425,6 @@ int freerdp_set_param_bool(rdpSettings* settings, int id, BOOL param) settings->AsyncChannels = param; break; - case FreeRDP_AsyncTransport: - settings->AsyncTransport = param; - break; - case FreeRDP_ToggleFullscreen: settings->ToggleFullscreen = param; break; @@ -1686,7 +1692,6 @@ int freerdp_set_param_bool(rdpSettings* settings, int id, BOOL param) /* Mark field as modified */ settings->SettingsModified[id] = 1; - return -1; } @@ -1724,7 +1729,6 @@ int freerdp_set_param_int(rdpSettings* settings, int id, int param) } settings->SettingsModified[id] = 1; - return 0; } @@ -2337,7 +2341,6 @@ int freerdp_set_param_uint32(rdpSettings* settings, int id, UINT32 param) /* Mark field as modified */ settings->SettingsModified[id] = 1; - return 0; } @@ -2369,7 +2372,6 @@ int freerdp_set_param_uint64(rdpSettings* settings, int id, UINT64 param) /* Mark field as modified */ settings->SettingsModified[id] = 1; - return 0; } @@ -2541,7 +2543,7 @@ char* freerdp_get_param_string(rdpSettings* settings, int id) int freerdp_set_param_string(rdpSettings* settings, int id, const char* param) { - char **tmp = NULL; + char** tmp = NULL; if (!param) return -1; @@ -2762,11 +2764,11 @@ int freerdp_set_param_string(rdpSettings* settings, int id, const char* param) } free(*tmp); + if (!(*tmp = _strdup(param))) return -1; /* Mark field as modified */ settings->SettingsModified[id] = 1; - return 0; } diff --git a/libfreerdp/core/transport.c b/libfreerdp/core/transport.c index 01e868227..dd3c3e01c 100644 --- a/libfreerdp/core/transport.c +++ b/libfreerdp/core/transport.c @@ -58,8 +58,6 @@ #define BUFFER_SIZE 16384 -static DWORD WINAPI transport_client_thread(LPVOID arg); - #ifdef WITH_GSSAPI #include @@ -358,7 +356,6 @@ BOOL transport_connect(rdpTransport* transport, const char* hostname, rdpSettings* settings = transport->settings; rdpContext* context = transport->context; BOOL rpcFallback = !settings->GatewayHttpTransport; - transport->async = settings->AsyncTransport; if (transport->GatewayEnabled) { @@ -434,26 +431,6 @@ BOOL transport_connect(rdpTransport* transport, const char* hostname, status = TRUE; } - if (status) - { - if (transport->async) - { - if (!(transport->stopEvent = CreateEvent(NULL, TRUE, FALSE, NULL))) - { - WLog_Print(transport->log, WLOG_ERROR, "Failed to create transport stop event"); - return FALSE; - } - - if (!(transport->thread = CreateThread(NULL, 0, transport_client_thread, transport, 0, NULL))) - { - WLog_Print(transport->log, WLOG_ERROR, "Failed to create transport client thread"); - CloseHandle(transport->stopEvent); - transport->stopEvent = NULL; - return FALSE; - } - } - } - return status; } @@ -1097,22 +1074,6 @@ void transport_set_nla_mode(rdpTransport* transport, BOOL NlaMode) transport->NlaMode = NlaMode; } -void transport_stop(rdpTransport* transport) -{ - if (transport->async) - { - if (transport->stopEvent) - { - SetEvent(transport->stopEvent); - WaitForSingleObject(transport->thread, INFINITE); - CloseHandle(transport->thread); - CloseHandle(transport->stopEvent); - transport->thread = NULL; - transport->stopEvent = NULL; - } - } -} - BOOL transport_disconnect(rdpTransport* transport) { BOOL status = TRUE; @@ -1120,8 +1081,6 @@ BOOL transport_disconnect(rdpTransport* transport) if (!transport) return FALSE; - transport_stop(transport); - if (transport->tls) { tls_free(transport->tls); @@ -1150,94 +1109,6 @@ BOOL transport_disconnect(rdpTransport* transport) return status; } -DWORD WINAPI transport_client_thread(LPVOID arg) -{ - DWORD dwExitCode = 0; - DWORD status; - DWORD nCount; - DWORD nCountTmp; - HANDLE handles[64]; - rdpTransport* transport = (rdpTransport*) arg; - rdpContext* context = transport->context; - rdpRdp* rdp = context->rdp; - WLog_Print(transport->log, WLOG_DEBUG, "Asynchronous transport thread started"); - nCount = 0; - handles[nCount++] = transport->stopEvent; - handles[nCount++] = transport->connectedEvent; - status = WaitForMultipleObjects(nCount, handles, FALSE, INFINITE); - - switch (status) - { - case WAIT_OBJECT_0: - WLog_Print(transport->log, WLOG_DEBUG, "stopEvent triggered"); - goto out; - - case WAIT_OBJECT_0 + 1: - WLog_Print(transport->log, WLOG_DEBUG, "connectedEvent event triggered"); - break; - - default: - WLog_Print(transport->log, WLOG_ERROR, "WaitForMultipleObjects failed with status 0x%08"PRIX32"", - status); - dwExitCode = 1; - goto out; - } - - while (1) - { - nCount = 1; /* transport->stopEvent */ - - if (!(nCountTmp = freerdp_get_event_handles(context, &handles[nCount], - 64 - nCount))) - { - WLog_Print(transport->log, WLOG_ERROR, "freerdp_get_event_handles failed"); - break; - } - - nCount += nCountTmp; - status = WaitForMultipleObjects(nCount, handles, FALSE, INFINITE); - - if (transport->layer == TRANSPORT_LAYER_CLOSED) - { - WLog_Print(transport->log, WLOG_DEBUG, "TRANSPORT_LAYER_CLOSED"); - rdp_set_error_info(rdp, ERRINFO_PEER_DISCONNECTED); - break; - } - - if (status == WAIT_OBJECT_0) - { - WLog_Print(transport->log, WLOG_DEBUG, "stopEvent triggered"); - break; - } - else if (status > WAIT_OBJECT_0 && status < (WAIT_OBJECT_0 + nCount)) - { - if (!freerdp_check_event_handles(context)) - { - if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) - WLog_Print(transport->log, WLOG_ERROR, "freerdp_check_event_handles()"); - - rdp_set_error_info(rdp, ERRINFO_PEER_DISCONNECTED); - break; - } - } - else - { - if (status == WAIT_TIMEOUT) - WLog_Print(transport->log, WLOG_ERROR, "WaitForMultipleObjects returned WAIT_TIMEOUT"); - else - WLog_Print(transport->log, WLOG_ERROR, "WaitForMultipleObjects returned 0x%08"PRIX32"", status); - - dwExitCode = 1; - break; - } - } - -out: - WLog_Print(transport->log, WLOG_DEBUG, "Terminating transport thread"); - ExitThread(dwExitCode); - return dwExitCode; -} - rdpTransport* transport_new(rdpContext* context) { rdpTransport* transport; diff --git a/libfreerdp/core/transport.h b/libfreerdp/core/transport.h index 1f82506a9..9084e1b6e 100644 --- a/libfreerdp/core/transport.h +++ b/libfreerdp/core/transport.h @@ -70,9 +70,6 @@ struct rdp_transport TransportRecv ReceiveCallback; wStreamPool* ReceivePool; HANDLE connectedEvent; - HANDLE stopEvent; - HANDLE thread; - BOOL async; BOOL NlaMode; BOOL blocking; BOOL GatewayEnabled; @@ -96,7 +93,7 @@ FREERDP_LOCAL BOOL transport_connect_nla(rdpTransport* transport); FREERDP_LOCAL BOOL transport_accept_rdp(rdpTransport* transport); FREERDP_LOCAL BOOL transport_accept_tls(rdpTransport* transport); FREERDP_LOCAL BOOL transport_accept_nla(rdpTransport* transport); -FREERDP_LOCAL void transport_stop(rdpTransport* transport); + FREERDP_LOCAL int transport_read_pdu(rdpTransport* transport, wStream* s); FREERDP_LOCAL int transport_write(rdpTransport* transport, wStream* s); diff --git a/server/shadow/Win/win_rdp.c b/server/shadow/Win/win_rdp.c index 50467b465..104f30504 100644 --- a/server/shadow/Win/win_rdp.c +++ b/server/shadow/Win/win_rdp.c @@ -292,7 +292,6 @@ static BOOL shw_freerdp_client_new(freerdp* instance, rdpContext* context) instance->VerifyX509Certificate = shw_verify_x509_certificate; settings = instance->settings; shw->settings = instance->context->settings; - settings->AsyncTransport = FALSE; settings->AsyncChannels = FALSE; settings->AsyncUpdate = FALSE; settings->AsyncInput = FALSE;