RDPListener::~RDPListener() { { std::lock_guard<std::mutex> lock(listenerStopMutex); if (listener_running) { listener_running = false; usleep(200000); } } shadow_server_uninit(server); shadow_server_free(server); dbus_conn->unregister_object(registered_id); WSACleanup(); }
int main(int argc, char** argv) { MSG msg; int status = 0; DWORD dwExitCode; rdpSettings* settings; rdpShadowServer* server; shadow_subsystem_set_entry_builtin(NULL); server = shadow_server_new(); if (!server) { status = -1; goto fail_server_new; } settings = server->settings; settings->NlaSecurity = FALSE; settings->TlsSecurity = TRUE; settings->RdpSecurity = TRUE; #ifdef WITH_SHADOW_X11 server->authentication = TRUE; #else server->authentication = FALSE; #endif if ((status = shadow_server_parse_command_line(server, argc, argv)) < 0) { shadow_server_command_line_status_print(server, argc, argv, status); goto fail_parse_command_line; } if ((status = shadow_server_init(server)) < 0) goto fail_server_init; if ((status = shadow_server_start(server)) < 0) goto fail_server_start; if (g_MessagePump) { while (GetMessage(&msg, 0, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } WaitForSingleObject(server->thread, INFINITE); if (!GetExitCodeThread(server->thread, &dwExitCode)) status = -1; else status = (int) dwExitCode; fail_server_start: shadow_server_uninit(server); fail_server_init: fail_parse_command_line: shadow_server_free(server); fail_server_new: return status; }