2011-08-31 13:59:03 +04:00
|
|
|
/**
|
2012-10-09 07:02:04 +04:00
|
|
|
* FreeRDP: A Remote Desktop Protocol Implementation
|
2011-08-31 13:59:03 +04:00
|
|
|
* Windows Client
|
|
|
|
*
|
|
|
|
* Copyright 2009-2011 Jay Sorg
|
|
|
|
* Copyright 2010-2011 Vic Lee
|
|
|
|
* Copyright 2010-2011 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
2012-08-15 01:20:53 +04:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include "config.h"
|
|
|
|
#endif
|
|
|
|
|
2012-05-05 03:36:35 +04:00
|
|
|
#include <winpr/windows.h>
|
2012-03-06 06:04:42 +04:00
|
|
|
|
2012-11-13 02:50:40 +04:00
|
|
|
#include <winpr/crt.h>
|
|
|
|
#include <winpr/credui.h>
|
|
|
|
|
2011-08-31 13:59:03 +04:00
|
|
|
#include <freerdp/freerdp.h>
|
2011-12-16 23:43:14 +04:00
|
|
|
#include <freerdp/constants.h>
|
2011-08-31 13:59:03 +04:00
|
|
|
#include <freerdp/utils/event.h>
|
2012-10-02 10:58:54 +04:00
|
|
|
#include <freerdp/utils/svc_plugin.h>
|
2012-10-28 20:12:36 +04:00
|
|
|
|
|
|
|
#include <freerdp/client/file.h>
|
2012-11-12 02:23:57 +04:00
|
|
|
#include <freerdp/client/cmdline.h>
|
2012-10-09 20:23:35 +04:00
|
|
|
#include <freerdp/client/channels.h>
|
2011-10-17 07:45:58 +04:00
|
|
|
#include <freerdp/channels/channels.h>
|
2011-08-31 13:59:03 +04:00
|
|
|
|
2013-03-19 04:12:51 +04:00
|
|
|
#include "wf_interface.h"
|
2011-08-31 13:59:03 +04:00
|
|
|
|
|
|
|
HANDLE g_done_event;
|
|
|
|
HINSTANCE g_hInstance;
|
|
|
|
HCURSOR g_default_cursor;
|
2013-03-19 04:12:51 +04:00
|
|
|
int g_thread_count = 0;
|
2011-08-31 13:59:03 +04:00
|
|
|
LPCTSTR g_wnd_class_name = L"wfreerdp";
|
|
|
|
|
|
|
|
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
|
|
|
{
|
|
|
|
freerdp* instance;
|
|
|
|
WSADATA wsa_data;
|
|
|
|
WNDCLASSEX wnd_cls;
|
|
|
|
|
2013-03-19 04:12:51 +04:00
|
|
|
if (!getenv("HOME"))
|
2012-01-10 01:19:28 +04:00
|
|
|
{
|
|
|
|
char home[MAX_PATH * 2] = "HOME=";
|
|
|
|
strcat(home, getenv("HOMEDRIVE"));
|
|
|
|
strcat(home, getenv("HOMEPATH"));
|
|
|
|
_putenv(home);
|
|
|
|
}
|
|
|
|
|
2011-08-31 13:59:03 +04:00
|
|
|
if (WSAStartup(0x101, &wsa_data) != 0)
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
g_done_event = CreateEvent(0, 1, 0, 0);
|
|
|
|
|
|
|
|
#if defined(WITH_DEBUG) || defined(_DEBUG)
|
|
|
|
wf_create_console();
|
|
|
|
#endif
|
|
|
|
|
|
|
|
g_default_cursor = LoadCursor(NULL, IDC_ARROW);
|
|
|
|
|
|
|
|
wnd_cls.cbSize = sizeof(WNDCLASSEX);
|
|
|
|
wnd_cls.style = CS_HREDRAW | CS_VREDRAW;
|
2011-09-26 00:30:20 +04:00
|
|
|
wnd_cls.lpfnWndProc = wf_event_proc;
|
2011-08-31 13:59:03 +04:00
|
|
|
wnd_cls.cbClsExtra = 0;
|
|
|
|
wnd_cls.cbWndExtra = 0;
|
|
|
|
wnd_cls.hIcon = LoadIcon(NULL, IDI_APPLICATION);
|
|
|
|
wnd_cls.hCursor = g_default_cursor;
|
2012-12-25 08:10:24 +04:00
|
|
|
wnd_cls.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
|
2011-08-31 13:59:03 +04:00
|
|
|
wnd_cls.lpszMenuName = NULL;
|
|
|
|
wnd_cls.lpszClassName = g_wnd_class_name;
|
|
|
|
wnd_cls.hInstance = hInstance;
|
|
|
|
wnd_cls.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
|
|
|
|
RegisterClassEx(&wnd_cls);
|
|
|
|
|
|
|
|
g_hInstance = hInstance;
|
2011-10-16 22:57:15 +04:00
|
|
|
freerdp_channels_global_init();
|
2011-08-31 13:59:03 +04:00
|
|
|
|
|
|
|
instance = freerdp_new();
|
|
|
|
instance->PreConnect = wf_pre_connect;
|
|
|
|
instance->PostConnect = wf_post_connect;
|
2012-11-13 02:50:40 +04:00
|
|
|
instance->Authenticate = wf_authenticate;
|
2011-10-18 19:02:05 +04:00
|
|
|
instance->VerifyCertificate = wf_verify_certificate;
|
2011-08-31 13:59:03 +04:00
|
|
|
instance->ReceiveChannelData = wf_receive_channel_data;
|
|
|
|
|
2011-10-22 00:45:35 +04:00
|
|
|
instance->context_size = sizeof(wfContext);
|
|
|
|
instance->ContextNew = wf_context_new;
|
|
|
|
instance->ContextFree = wf_context_free;
|
2011-10-17 07:45:58 +04:00
|
|
|
freerdp_context_new(instance);
|
|
|
|
|
2011-10-22 00:45:35 +04:00
|
|
|
instance->context->argc = __argc;
|
|
|
|
instance->context->argv = __argv;
|
2011-08-31 13:59:03 +04:00
|
|
|
|
2012-10-02 10:58:54 +04:00
|
|
|
if (!CreateThread(NULL, 0, kbd_thread_func, NULL, 0, NULL))
|
2011-08-31 13:59:03 +04:00
|
|
|
printf("error creating keyboard handler thread");
|
|
|
|
|
2011-09-26 00:30:20 +04:00
|
|
|
//while (1)
|
2011-08-31 13:59:03 +04:00
|
|
|
{
|
2012-11-12 02:23:57 +04:00
|
|
|
int status;
|
2012-03-31 01:27:21 +04:00
|
|
|
|
2012-11-18 07:03:04 +04:00
|
|
|
freerdp_register_addin_provider(freerdp_channels_load_static_addin_entry, 0);
|
|
|
|
|
2012-12-02 23:18:36 +04:00
|
|
|
status = freerdp_client_parse_command_line_arguments(__argc, __argv, instance->settings);
|
2012-11-12 02:23:57 +04:00
|
|
|
|
2012-12-02 23:18:36 +04:00
|
|
|
freerdp_client_load_addins(instance->context->channels, instance->settings);
|
2011-08-31 13:59:03 +04:00
|
|
|
|
2012-11-22 18:06:45 +04:00
|
|
|
if (status < 0)
|
2012-03-31 01:27:21 +04:00
|
|
|
{
|
2012-11-22 18:06:45 +04:00
|
|
|
printf("failed to parse arguments.\n");
|
2012-03-31 01:27:21 +04:00
|
|
|
#ifdef _DEBUG
|
|
|
|
system("pause");
|
|
|
|
#endif
|
|
|
|
exit(-1);
|
|
|
|
}
|
|
|
|
|
2013-03-19 04:12:51 +04:00
|
|
|
if (CreateThread(NULL, 0, thread_func, instance, 0, NULL) != 0)
|
2011-08-31 13:59:03 +04:00
|
|
|
g_thread_count++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (g_thread_count > 0)
|
2013-03-19 04:12:51 +04:00
|
|
|
{
|
2011-08-31 13:59:03 +04:00
|
|
|
WaitForSingleObject(g_done_event, INFINITE);
|
2013-03-19 04:12:51 +04:00
|
|
|
}
|
2011-08-31 13:59:03 +04:00
|
|
|
else
|
2013-03-19 04:12:51 +04:00
|
|
|
{
|
2011-08-31 13:59:03 +04:00
|
|
|
MessageBox(GetConsoleWindow(),
|
|
|
|
L"Failed to start wfreerdp.\n\nPlease check the debug output.",
|
|
|
|
L"FreeRDP Error", MB_ICONSTOP);
|
2013-03-19 04:12:51 +04:00
|
|
|
}
|
2011-08-31 13:59:03 +04:00
|
|
|
|
2012-08-30 01:50:13 +04:00
|
|
|
freerdp_context_free(instance);
|
|
|
|
freerdp_free(instance);
|
|
|
|
|
2011-08-31 13:59:03 +04:00
|
|
|
WSACleanup();
|
|
|
|
|
2011-09-26 00:30:20 +04:00
|
|
|
#ifdef _DEBUG
|
|
|
|
system("pause");
|
|
|
|
#endif
|
|
|
|
|
2011-08-31 13:59:03 +04:00
|
|
|
return 0;
|
|
|
|
}
|