+ fp = fopen("/proc/net/wireless", "r");
+ if (fp == NULL) {
+ warn("Error opening wireless file");
+ return smprintf(UNKNOWN_STR);
+ }
+
+ ccat(2, wificard, ":");
+ fgets(buf, sizeof(buf), fp);
+ fgets(buf, sizeof(buf), fp);
+ fgets(buf, sizeof(buf), fp);
+
+ datastart = strstr(buf, concat);
+ if (datastart != NULL) {
+ datastart = strstr(buf, ":");
+ sscanf(datastart + 1, " %*d %d %*d %*d %*d %*d %*d %*d %*d %*d", &strength);
+ }
+
+ fclose(fp);
+
+ return smprintf("%d%%", strength);
+}
+
+static char *
+wifi_essid(const char *wificard)
+{
+ char id[IW_ESSID_MAX_SIZE+1];
+ int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+ struct iwreq wreq;
+
+ memset(&wreq, 0, sizeof(struct iwreq));
+ wreq.u.essid.length = IW_ESSID_MAX_SIZE+1;
+ sprintf(wreq.ifr_name, wificard);
+ if (sockfd == -1) {
+ warn("Cannot open socket for interface: %s", wificard);
+ return smprintf(UNKNOWN_STR);
+ }
+ wreq.u.essid.pointer = id;
+ if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) {
+ warn("Get ESSID ioctl failed for interface %s", wificard);
+ return smprintf(UNKNOWN_STR);
+ }
+
+ close(sockfd);
+
+ if (strcmp((char *)wreq.u.essid.pointer, "") == 0)
+ return smprintf(UNKNOWN_STR);
+ else
+ return smprintf("%s", (char *)wreq.u.essid.pointer);
+}
+
+static void
+sighandler(const int signo)
+{
+ if (signo == SIGTERM || signo == SIGINT)
+ done = 1;