void remmina_log_print(const gchar *text) { if (!log_window) return; IDLE_ADD(remmina_log_print_real, g_strdup(text)); }
void remmina_nx_session_manager_start(RemminaProtocolWidget *gp) { RemminaPluginNxData *gpdata; gpdata = (RemminaPluginNxData*) g_object_get_data(G_OBJECT(gp), "plugin-data"); if (gpdata->session_manager_start_handler == 0) { gpdata->session_manager_start_handler = IDLE_ADD((GSourceFunc) remmina_nx_session_manager_main, gp); } }
static gpointer remmina_plugin_nx_main_thread (gpointer data) { pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL); CANCEL_ASYNC if (!remmina_plugin_nx_main ((RemminaProtocolWidget*) data)) { IDLE_ADD ((GSourceFunc) remmina_plugin_nx_service->protocol_plugin_close_connection, data); } return NULL; }
void remmina_log_printf(const gchar *fmt, ...) { va_list args; gchar *text; if (!log_window) return; va_start (args, fmt); text = g_strdup_vprintf (fmt, args); va_end (args); IDLE_ADD (remmina_log_print_real, text); }
static gboolean remmina_log_print_real(gpointer data) { GtkTextIter iter; if (log_window) { gtk_text_buffer_get_end_iter(REMMINA_LOG_WINDOW (log_window)->log_buffer, &iter); gtk_text_buffer_insert(REMMINA_LOG_WINDOW (log_window)->log_buffer, &iter, (const gchar*) data, -1); IDLE_ADD(remmina_log_scroll_to_end, NULL); } g_free(data); return FALSE; }
void rf_queue_ui(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) { rfContext* rfi; rfi = GET_DATA(gp); g_async_queue_push(rfi->ui_queue, ui); LOCK_BUFFER(TRUE) if (!rfi->ui_handler) rfi->ui_handler = IDLE_ADD((GSourceFunc) remmina_rdp_event_queue_ui, gp); UNLOCK_BUFFER(TRUE) }
static gpointer remmina_rdp_main_thread(gpointer data) { RemminaProtocolWidget* gp; rfContext* rfi; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); CANCEL_ASYNC gp = (RemminaProtocolWidget*) data; rfi = GET_DATA(gp); remmina_rdp_main(gp); rfi->thread = 0; IDLE_ADD((GSourceFunc) remmina_plugin_service->protocol_plugin_close_connection, gp); return NULL; }
static gpointer remmina_plugin_sftp_main_thread (gpointer data) { RemminaProtocolWidget *gp = (RemminaProtocolWidget*) data; RemminaPluginSftpData *gpdata; RemminaFile *remminafile; RemminaSSH *ssh; RemminaSFTP *sftp = NULL; gboolean cont = FALSE; gint ret; const gchar *cs; pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL); CANCEL_ASYNC gpdata = (RemminaPluginSftpData*) g_object_get_data (G_OBJECT(gp), "plugin-data"); ssh = g_object_get_data (G_OBJECT(gp), "user-data"); if (ssh) { /* Create SFTP connection based on existing SSH session */ sftp = remmina_sftp_new_from_ssh (ssh); if (remmina_ssh_init_session (REMMINA_SSH (sftp)) && remmina_ssh_auth (REMMINA_SSH (sftp), NULL) > 0 && remmina_sftp_open (sftp)) { cont = TRUE; } } else { /* New SFTP connection */ remminafile = remmina_plugin_service->protocol_plugin_get_file (gp); remmina_plugin_service->file_set_string (remminafile, "ssh_server", remmina_plugin_service->file_get_string (remminafile, "server")); sftp = remmina_sftp_new_from_file (remminafile); while (1) { if (!remmina_ssh_init_session (REMMINA_SSH (sftp))) { remmina_plugin_service->protocol_plugin_set_error (gp, "%s", REMMINA_SSH (sftp)->error); break; } ret = remmina_ssh_auth_gui (REMMINA_SSH (sftp), REMMINA_INIT_DIALOG (remmina_protocol_widget_get_init_dialog (gp)), TRUE); if (ret == 0) { remmina_plugin_service->protocol_plugin_set_error (gp, "%s", REMMINA_SSH (sftp)->error); } if (ret <= 0) break; if (!remmina_sftp_open (sftp)) { remmina_plugin_service->protocol_plugin_set_error (gp, "%s", REMMINA_SSH (sftp)->error); break; } cs = remmina_plugin_service->file_get_string (remminafile, "execpath"); if (cs && cs[0]) { remmina_ftp_client_set_dir (REMMINA_FTP_CLIENT (gpdata->client), cs); } cont = TRUE; break; } } if (!cont) { if (sftp) remmina_sftp_free (sftp); IDLE_ADD ((GSourceFunc) remmina_plugin_service->protocol_plugin_close_connection, gp); return NULL; } remmina_sftp_client_open (REMMINA_SFTP_CLIENT (gpdata->client), sftp); /* RemminaSFTPClient owns the object, we just take the reference */ gpdata->sftp = sftp; remmina_plugin_service->protocol_plugin_emit_signal (gp, "connect"); gpdata->thread = 0; return NULL; }