FreeRDP/client/Windows/wfreerdp.c

154 lines
3.9 KiB
C
Raw Normal View History

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.
*/
#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>
#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>
#include <freerdp/channels/channels.h>
2011-08-31 13:59:03 +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;
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;
if (!getenv("HOME"))
{
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;
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;
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;
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;
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;
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
if (!CreateThread(NULL, 0, kbd_thread_func, NULL, 0, NULL))
2011-08-31 13:59:03 +04:00
printf("error creating keyboard handler thread");
//while (1)
2011-08-31 13:59:03 +04:00
{
2012-11-12 02:23:57 +04:00
int status;
freerdp_register_addin_provider(freerdp_channels_load_static_addin_entry, 0);
status = freerdp_client_parse_command_line_arguments(__argc, __argv, instance->settings);
2012-11-12 02:23:57 +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-11-22 18:06:45 +04:00
printf("failed to parse arguments.\n");
#ifdef _DEBUG
system("pause");
#endif
exit(-1);
}
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)
{
2011-08-31 13:59:03 +04:00
WaitForSingleObject(g_done_event, INFINITE);
}
2011-08-31 13:59:03 +04:00
else
{
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);
}
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();
#ifdef _DEBUG
system("pause");
#endif
2011-08-31 13:59:03 +04:00
return 0;
}