24 #include <arpa/inet.h> 25 #include <core/exception.h> 26 #include <core/exceptions/software.h> 27 #include <gui_utils/service_chooser_dialog.h> 28 #include <gui_utils/service_model.h> 29 #include <netcomm/fawkes/client.h> 30 #include <netcomm/utils/resolver.h> 31 #include <netinet/in.h> 32 #include <sys/socket.h> 33 #include <sys/types.h> 34 #include <utils/system/argparser.h> 40 # define GCONF_DIR "/apps/fawkes/service_chooser_dialog" 41 # define GCONF_PREFIX GCONF_DIR "/" 62 : Gtk::Dialog(title, parent, true), parent_(parent), expander_(
"Manual entry")
79 : Gtk::Dialog(title, parent, true), parent_(parent), expander_(
"Manual entry")
90 if (expander_.get_expanded() && !treeview_.has_focus() && entry_.get_text_length() > 0) {
91 gconf_->set(GCONF_PREFIX
"manual_host", entry_.get_text());
92 gconf_->set(GCONF_PREFIX
"manual_expanded",
true);
94 gconf_->set(GCONF_PREFIX
"manual_expanded",
false);
97 delete service_model_;
101 ServiceChooserDialog::ctor()
103 set_default_size(480, 300);
108 scrollwin_.add(treeview_);
109 scrollwin_.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
111 expander_.add(entry_);
113 entry_.set_activates_default(
true);
115 Glib::ustring default_host(
"localhost");
117 gconf_ = Gnome::Conf::Client::get_default_client();
118 gconf_->add_dir(GCONF_DIR);
119 Gnome::Conf::Value host_val = gconf_->get_without_default(GCONF_PREFIX
"manual_host");
120 if (host_val.get_type() == Gnome::Conf::VALUE_STRING) {
121 default_host = host_val.get_string();
125 char *fawkes_ip = getenv(
"FAWKES_IP");
127 entry_.set_text(fawkes_ip);
129 entry_.set_text(default_host);
131 Gtk::Box *vbox = get_vbox();
132 vbox->pack_start(scrollwin_);
133 vbox->pack_end(expander_, Gtk::PACK_SHRINK);
137 add_button(Gtk::Stock::CANCEL, 0);
138 add_button(Gtk::Stock::OK, 1);
140 set_default_response(1);
142 treeview_.signal_row_activated().connect(
143 sigc::bind(sigc::hide<0>(sigc::hide<0>(sigc::mem_fun(*
this, &ServiceChooserDialog::response))),
146 #ifdef GLIBMM_PROPERTIES_ENABLED 147 expander_.property_expanded().signal_changed().connect(
152 if (gconf_->get_bool(GCONF_PREFIX
"manual_expanded")) {
153 expander_.set_expanded(
true);
168 Glib::ustring & hostname,
169 unsigned short int &port)
171 Glib::RefPtr<Gtk::TreeSelection> treesel = treeview_.get_selection();
172 if (expander_.get_expanded() && !treeview_.has_focus()) {
173 if (entry_.get_text_length() > 0) {
174 std::string tmp_hostname;
176 hostname = tmp_hostname;
182 Gtk::TreeModel::iterator iter = treesel->get_selected();
184 Gtk::TreeModel::Row row = *iter;
205 struct sockaddr_storage &sockaddr)
207 Glib::RefPtr<Gtk::TreeSelection> treesel = treeview_.get_selection();
208 if (expander_.get_expanded() && !treeview_.has_focus() && entry_.get_text_length() > 0) {
209 throw Exception(
"May not be called for manual entry");
212 Gtk::TreeModel::iterator iter = treesel->get_selected();
214 Gtk::TreeModel::Row row = *iter;
261 if (expander_.get_expanded()) {
264 treeview_.grab_focus();
281 throw Exception(
"Client is already connected");
285 if (expander_.get_expanded() && !treeview_.has_focus() && entry_.get_text_length() > 0) {
286 Glib::ustring name, hostname;
287 unsigned short int port;
289 client_->
connect(hostname.c_str(), port);
292 struct sockaddr_storage sockaddr;
293 Glib::ustring hostname;
295 client_->
connect(hostname.c_str(), sockaddr);
298 Glib::ustring message = *(e.
begin());
299 Gtk::MessageDialog md(parent_,
305 md.set_title(
"Connection failed");
Abstract base class for widgets that allow to view the detected services of a certain type.
virtual void on_expander_changed()
Signal handler for expander event.
ServiceRecord & get_column_record()
Access the column record.
Simple Fawkes network client.
Fawkes library namespace.
ServiceChooserDialog(Gtk::Window &parent, FawkesNetworkClient *client, Glib::ustring title="Select Service", const char *service="_fawkes._tcp")
Constructor.
void connect()
Connect to remote.
Glib::RefPtr< Gtk::ListStore > & get_list_store()
Get a reference to the model.
A NULL pointer was supplied where not allowed.
Gtk::TreeModelColumn< struct sockaddr_storage > sockaddr
sockaddr structure
Base class for exceptions in Fawkes.
void run_and_connect()
Run dialog and try to connect.
iterator begin()
Get iterator for messages.
void get_raw_address(struct sockaddr *addr, socklen_t addr_size)
Get raw address.
Gtk::TreeModelColumn< unsigned short > port
The port the service is running on.
virtual ~ServiceChooserDialog()
Destructor.
Gtk::TreeModelColumn< Glib::ustring > addrport
Address:port string.
Gtk::TreeModelColumn< Glib::ustring > name
The name of the service.
bool connected() const
Check if connection is alive.
void get_selected_service(Glib::ustring &name, Glib::ustring &hostname, unsigned short int &port)
Get selected service.
Gtk::TreeModelColumn< Glib::ustring > ipaddr
The IP address as string of the host the service is running on.
static void parse_hostport_s(const char *s, char **host, unsigned short int *port)
Parse host:port string.