Ejemplo n.º 1
0
RDPListener::RDPListener(std::string uuid, int vm_id, uint16_t port, RDPServerWorker *parent, std::string auth,
                         Glib::RefPtr<Gio::DBus::Connection> conn) : shm_buffer(nullptr),
                                                                     dbus_conn(conn),
                                                                     parent(parent),
                                                                     port(port),
                                                                     uuid(uuid),
                                                                     samfile(),
                                                                     vm_id(vm_id),
                                                                     listener_running(false),
                                                                     targetFPS(30),
                                                                     credential_path()
{
    WTSRegisterWtsApiFunctionTable(FreeRDP_InitWtsApi());

    shadow_subsystem_set_entry(RDPMux_ShadowSubsystemEntry);
    server = shadow_server_new();

    if (!auth.empty())
        samfile = auth;
    this->Authenticating(!auth.empty());

    if (!server) {
        LOG(FATAL) << "LISTENER " << this << ": Shadow server didn't alloc properly, exiting.";
    }
}
Ejemplo n.º 2
0
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;
}