GtkWidget * advanced_dialog_new (GHashTable *hash) { GtkBuilder *builder; GtkWidget *dialog = NULL; char *ui_file = NULL; GtkWidget *widget; const char *value; GError *error = NULL; long int tmp; g_return_val_if_fail (hash != NULL, NULL); ui_file = g_strdup_printf ("%s/%s", UIDIR, "nm-ssh-dialog.ui"); builder = gtk_builder_new (); gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE); if (!gtk_builder_add_from_file (builder, ui_file, &error)) { g_warning ("Couldn't load builder file: %s", error->message); g_error_free (error); g_object_unref (G_OBJECT (builder)); goto out; } dialog = GTK_WIDGET (gtk_builder_get_object (builder, "ssh_advanced_dialog")); if (!dialog) { g_object_unref (G_OBJECT (builder)); goto out; } gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); g_object_set_data_full (G_OBJECT (dialog), "builder", builder, (GDestroyNotify) g_object_unref); widget = GTK_WIDGET (gtk_builder_get_object (builder, "port_checkbutton")); g_assert (widget); g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (port_toggled_cb), builder); value = g_hash_table_lookup (hash, NM_SSH_KEY_PORT); if (value && strlen (value)) { errno = 0; tmp = strtol (value, NULL, 10); if (errno == 0 && tmp > 0 && tmp < 65536) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); widget = GTK_WIDGET (gtk_builder_get_object (builder, "port_spinbutton")); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), (gdouble) tmp); } gtk_widget_set_sensitive (widget, TRUE); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); widget = GTK_WIDGET (gtk_builder_get_object (builder, "port_spinbutton")); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), (gdouble) NM_SSH_DEFAULT_PORT); gtk_widget_set_sensitive (widget, FALSE); } widget = GTK_WIDGET (gtk_builder_get_object (builder, "tunmtu_checkbutton")); g_assert (widget); g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (tunmtu_toggled_cb), builder); value = g_hash_table_lookup (hash, NM_SSH_KEY_TUNNEL_MTU); if (value && strlen (value)) { errno = 0; tmp = strtol (value, NULL, 10); if (errno == 0 && tmp > 0 && tmp < 65536) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); widget = GTK_WIDGET (gtk_builder_get_object (builder, "tunmtu_spinbutton")); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), (gdouble) tmp); gtk_widget_set_sensitive (widget, TRUE); } } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); widget = GTK_WIDGET (gtk_builder_get_object (builder, "tunmtu_spinbutton")); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), (gdouble) NM_SSH_DEFAULT_MTU); gtk_widget_set_sensitive (widget, FALSE); } widget = GTK_WIDGET (gtk_builder_get_object (builder, "extra_opts_checkbutton")); g_assert (widget); g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (extra_opts_toggled_cb), builder); value = g_hash_table_lookup (hash, NM_SSH_KEY_EXTRA_OPTS); if (value && strlen (value)) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); widget = GTK_WIDGET (gtk_builder_get_object (builder, "extra_opts_entry")); gtk_entry_set_text (GTK_ENTRY (widget), value); gtk_widget_set_sensitive (widget, TRUE); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); widget = GTK_WIDGET (gtk_builder_get_object (builder, "extra_opts_entry")); gtk_entry_set_text (GTK_ENTRY (widget), NM_SSH_DEFAULT_EXTRA_OPTS); gtk_widget_set_sensitive (widget, FALSE); } widget = GTK_WIDGET (gtk_builder_get_object (builder, "remote_dev_checkbutton")); g_assert (widget); g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (remote_dev_toggled_cb), builder); value = g_hash_table_lookup (hash, NM_SSH_KEY_REMOTE_DEV); if (value && strlen (value)) { errno = 0; tmp = strtol (value, NULL, 10); if (errno == 0 && tmp >= 0 && tmp < 256) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); widget = GTK_WIDGET (gtk_builder_get_object (builder, "remote_dev_spinbutton")); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), (gdouble) tmp); } gtk_widget_set_sensitive (widget, TRUE); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); widget = GTK_WIDGET (gtk_builder_get_object (builder, "remote_dev_spinbutton")); gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), (gdouble) NM_SSH_DEFAULT_REMOTE_DEV); gtk_widget_set_sensitive (widget, FALSE); } value = g_hash_table_lookup (hash, NM_SSH_KEY_TAP_DEV); if (value && IS_YES(value)) { widget = GTK_WIDGET (gtk_builder_get_object (builder, "tap_checkbutton")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); } widget = GTK_WIDGET (gtk_builder_get_object (builder, "remote_username_checkbutton")); g_assert (widget); g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (remote_username_toggled_cb), builder); value = g_hash_table_lookup (hash, NM_SSH_KEY_REMOTE_USERNAME); if (value && strlen (value)) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); widget = GTK_WIDGET (gtk_builder_get_object (builder, "remote_username_entry")); gtk_entry_set_text (GTK_ENTRY (widget), value); gtk_widget_set_sensitive (widget, TRUE); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); widget = GTK_WIDGET (gtk_builder_get_object (builder, "remote_username_entry")); gtk_entry_set_text (GTK_ENTRY (widget), NM_SSH_DEFAULT_REMOTE_USERNAME); gtk_widget_set_sensitive (widget, FALSE); } out: g_free (ui_file); return dialog; }
SymReader *MRNetSymbolReaderFactory::openSymbolReader(std::string pathName) { const char *pathStr = pathName.c_str(); bool localLib = true; int tag = PROT_LIB_REQ, ret; long size; uint64_t fileContentsLength = 0; char *fileName = NULL, *fileContents = NULL; FILE *fp; PacketPtr packet; MRNetSymbolReader *msr; std::map<std::string, MRNetSymbolReader* >::iterator iter; ////GLL comment: This is a temp feature to look for a copy in /tmp RAM disk first //std::string fileBaseName = basename(pathName.c_str()); //std::string tmpFilePath = "/tmp/" + fileBaseName; //struct stat fileStat; //if (stat(tmpFilePath.c_str(), &fileStat) == 0) //{ //fprintf(stderr, "%s %s\n", pathName.c_str(), tmpFilePath.c_str()); //pathName = tmpFilePath; //} mrn_dbg(2, mrn_printf(__FILE__, __LINE__, "openSymbolReader", gStatOutFp, "Interposed lib functions called openSymbolReader(%s)\n", pathName.c_str())); iter = openReaders_.find(pathName); if (iter == openReaders_.end()) { mrn_dbg(2, mrn_printf(__FILE__, __LINE__, "openSymbolReader", gStatOutFp, "no existing reader for %s\n", pathStr)); AsyncGlobalFileStatus myStat(pathStr); /* TODO: this is a workaround for BlueGene where FGFS is reporting incorrectly */ #ifdef BGL if (true) #else if (IS_YES(myStat.isUnique())) #endif { localLib = false; mrn_dbg(2, mrn_printf(__FILE__, __LINE__, "openSymbolReader", gStatOutFp, "requesting contents for %s\n", pathStr)); if (stream_->send(tag, "%s", pathStr) == -1) { mrn_dbg(2, mrn_printf(__FILE__, __LINE__, "openSymbolReader", gStatOutFp, "BE: stream::send() failure\n")); return NULL; } if (stream_->flush() == -1) { mrn_dbg(2, mrn_printf(__FILE__, __LINE__, "openSymbolReader", gStatOutFp, "BE: stream::flush() failure\n")); return NULL; } //ret = network_->recv(&tag, packet, &stream_); ret = stream_->recv(&tag, packet); if (ret != 1) { mrn_dbg(2, mrn_printf(__FILE__, __LINE__, "openSymbolReader", gStatOutFp, "BE: network::recv() failure\n")); return NULL; } if (tag == PROT_LIB_REQ_ERR) { mrn_dbg(2, mrn_printf(__FILE__, __LINE__, "openSymbolReader", gStatOutFp, "FE reported error sending contents of %s\n", pathStr)); localLib = true; } if (tag != PROT_LIB_REQ_RESP) { mrn_dbg(2, mrn_printf(__FILE__, __LINE__, "openSymbolReader", gStatOutFp, "Unexpected tag %d when trying to receive contents of %s\n", tag, pathStr)); localLib = true; } #ifdef MRNET40 else if (packet->unpack("%Ac %s", &fileContents, &fileContentsLength, &fileName) == -1) #else else if (packet->unpack("%ac %s", &fileContents, &fileContentsLength, &fileName) == -1) #endif { mrn_dbg(2, mrn_printf(__FILE__, __LINE__, "openSymbolReader", gStatOutFp, "Failed to unpack contents of %s, length %d\n", pathStr, fileContentsLength)); localLib = true; } free(fileName); fileName = NULL; }