if (i->up)
ison = true;
}
- msg = dhcpcd_if_message(i);
+ msg = dhcpcd_if_message(i, NULL);
if (msg) {
if (showif)
g_message("%s", msg);
if (online != ison || carrier != iscarrier) {
online = ison;
+ carrier = iscarrier;
if (ani_timer != 0) {
g_source_remove(ani_timer);
ani_timer = 0;
# define notify(a, b, c)
#endif
-static void
-dhcpcd_status_cb(DHCPCD_CONNECTION *con, const char *status, _unused void *data)
-{
- static char *last = NULL;
- const char *msg;
- bool refresh;
- WI_SCAN *w;
-
- g_message("Status changed to %s", status);
- if (g_strcmp0(status, "down") == 0) {
- msg = N_(last ?
- "Connection to dhcpcd lost" : "dhcpcd not running");
- if (ani_timer != 0) {
- g_source_remove(ani_timer);
- ani_timer = 0;
- ani_counter = 0;
- }
- gtk_status_icon_set_from_icon_name(status_icon,
- "network-offline");
- gtk_status_icon_set_tooltip_text(status_icon, msg);
- notify(_("No network"), msg, "network-offline");
- dhcpcd_prefs_abort();
- while (wi_scans) {
- w = wi_scans->next;
- dhcpcd_wi_scans_free(wi_scans->scans);
- g_free(wi_scans);
- wi_scans = w;
- }
- } else {
- if ((last == NULL || g_strcmp0(last, "down") == 0)) {
- g_message(_("Connected to %s-%s"), "dhcpcd",
- dhcpcd_version(con));
- refresh = true;
- } else
- refresh = false;
- update_online(con, refresh);
- }
- last = g_strdup(status);
-}
-
static struct watch *
dhcpcd_findwatch(int fd, gpointer data, struct watch **last)
{
return TRUE;
}
+static void
+dhcpcd_status_cb(DHCPCD_CONNECTION *con, const char *status,
+ _unused void *data)
+{
+ static char *last = NULL;
+ const char *msg;
+ bool refresh;
+ WI_SCAN *w;
+
+ g_message("Status changed to %s", status);
+ if (g_strcmp0(status, "down") == 0) {
+ msg = N_(last ?
+ "Connection to dhcpcd lost" : "dhcpcd not running");
+ if (ani_timer != 0) {
+ g_source_remove(ani_timer);
+ ani_timer = 0;
+ ani_counter = 0;
+ }
+ online = carrier = false;
+ gtk_status_icon_set_from_icon_name(status_icon,
+ "network-offline");
+ gtk_status_icon_set_tooltip_text(status_icon, msg);
+ dhcpcd_prefs_abort();
+ while (wi_scans) {
+ w = wi_scans->next;
+ dhcpcd_wi_scans_free(wi_scans->scans);
+ g_free(wi_scans);
+ wi_scans = w;
+ }
+ dhcpcd_unwatch(-1, con);
+ g_timeout_add(DHCPCD_RETRYOPEN, dhcpcd_try_open, con);
+ } else {
+ if ((last == NULL || g_strcmp0(last, "down") == 0)) {
+ g_message(_("Connected to %s-%s"), "dhcpcd",
+ dhcpcd_version(con));
+ refresh = true;
+ } else
+ refresh = g_strcmp0(last, "opened") ? false : true;
+ update_online(con, refresh);
+ }
+
+ g_free(last);
+ last = g_strdup(status);
+}
+
static gboolean
dhcpcd_cb(_unused GIOChannel *gio, _unused GIOCondition c, gpointer data)
{
static int last_error;
con = (DHCPCD_CONNECTION *)data;
- fd = dhcpcd_open(con);
+ fd = dhcpcd_open(con, true);
if (fd == -1) {
- if (errno != last_error)
+ if (errno == EACCES || errno == EPERM) {
+ if ((fd = dhcpcd_open(con, false)) != -1)
+ goto unprived;
+ }
+ if (errno != last_error) {
g_critical("dhcpcd_open: %s", strerror(errno));
- last_error = errno;
+ last_error = errno;
+ }
return TRUE;
}
+unprived:
if (!dhcpcd_watch(fd, dhcpcd_cb, con)) {
dhcpcd_close(con);
return TRUE;
}
+ /* Start listening to WPA events */
+ dhcpcd_wpa_start(con);
+
return FALSE;
}
DHCPCD_CONNECTION *con;
char *msg;
const char *icon;
+ bool new_msg;
+
+ /* We should ignore renew and stop so we don't annoy the user */
+ if (g_strcmp0(i->reason, "RENEW") &&
+ g_strcmp0(i->reason, "STOP") &&
+ g_strcmp0(i->reason, "STOPPED"))
+ {
+ msg = dhcpcd_if_message(i, &new_msg);
+ if (msg) {
+ g_message("%s", msg);
+ if (new_msg) {
+ if (i->up)
+ icon = "network-transmit-receive";
+ //else
+ // icon = "network-transmit";
+ if (!i->up)
+ icon = "network-offline";
+ notify(_("Network event"), msg, icon);
+ }
+ g_free(msg);
+ }
+ }
/* Update the tooltip with connection information */
con = dhcpcd_if_connection(i);
update_online(con, false);
-
- /* We should ignore renew and stop so we don't annoy the user */
- if (g_strcmp0(i->reason, "RENEW") == 0 ||
- g_strcmp0(i->reason, "STOP") == 0 ||
- g_strcmp0(i->reason, "STOPPED") == 0)
- return;
-
- msg = dhcpcd_if_message(i);
- if (msg) {
- g_message("%s", msg);
- if (i->up)
- icon = "network-transmit-receive";
- //else
- // icon = "network-transmit";
- if (!i->up)
- icon = "network-offline";
- notify(_("Network event"), msg, icon);
- g_free(msg);
- }
}
static gboolean
notify(msg, txt, "network-wireless");
g_free(txt);
}
+ menu_update_scans(w->interface, scans);
dhcpcd_wi_scans_free(w->scans);
}
w->scans = scans;
g_critical("libdhcpcd: %s", strerror(errno));
exit(EXIT_FAILURE);
}
+ dhcpcd_set_progname(con, "dhcpcd-gtk");
dhcpcd_set_status_callback(con, dhcpcd_status_cb, NULL);
dhcpcd_set_if_callback(con, dhcpcd_if_cb, NULL);
dhcpcd_wpa_set_scan_callback(con, dhcpcd_wpa_scan_cb, NULL);