void read_wifi(struct params *p) { char buf[4096]; int rc; struct ieee80211_frame *wh; rc = sniff(p->rx, buf, sizeof(buf)); if (rc == -1) err(1, "sniff()"); wh = get_wifi(buf, &rc); if (!wh) return; /* filter my own shit */ if (memcmp(wh->i_addr2, p->mac, 6) == 0) { /* XXX CTL frames */ if ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) != IEEE80211_FC0_TYPE_CTL) return; } #if 1 ack(p, wh); #endif if (duplicate(p, wh, rc)) { #if 0 printf("Dup\n"); #endif return; } switch (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) { case IEEE80211_FC0_TYPE_MGT: read_mgt(p, wh, rc); break; case IEEE80211_FC0_TYPE_CTL: read_ctl(p, wh, rc); break; case IEEE80211_FC0_TYPE_DATA: read_data(p, wh, rc); break; default: printf("wtf\n"); abort(); break; } }
void read_wifi(struct params *p) { static char *buf = 0; static int buflen = 4096; struct ieee80211_frame *wh; int rc; if (!buf) { buf = (char*) malloc(buflen); if (!buf) err(1, "malloc()"); } rc = sniff(p->rx, buf, buflen); if (rc == -1) err(1, "sniff()"); wh = get_wifi(buf, &rc); if (!wh) return; /* relayed macast */ if (frame_type(wh, IEEE80211_FC0_TYPE_DATA, IEEE80211_FC0_SUBTYPE_DATA) && (wh->i_fc[1] & IEEE80211_FC1_DIR_FROMDS) && (memcmp(wh->i_addr2, p->ap, 6) == 0) && (memcmp(wh->i_addr1, p->mcast, 5) == 0) && (memcmp(p->mac, wh->i_addr3, 6) == 0)) { got_mcast(p, wh, rc); return; } /* data */ if (frame_type(wh, IEEE80211_FC0_TYPE_DATA, IEEE80211_FC0_SUBTYPE_DATA)) { if (!wanted(p, wh, rc)) return; enque(p, &buf, wh, rc); if (p->state == S_START) send_queue(p); return; } }
int main(void) { Display *dpy; Window root; char status[201], net[30], vol[14], cpu[14], mem[14], bat[48]; int netloops = 60; dpy = XOpenDisplay(NULL); if(dpy == NULL) { fprintf(stderr, "ERROR: could not open display\n"); return 1; } root = XRootWindow(dpy, DefaultScreen(dpy)); winfo = malloc(sizeof(struct wireless_info)); memset(winfo, 0, sizeof(struct wireless_info)); skfd = iw_sockets_open(); infile = fopen(CPU_F, "r"); fscanf(infile, "cpu %ld %ld %ld %ld", &jif1, &jif2, &jif3, &jif4); fclose(infile); while(1) { if(++netloops > 60) { netloops = 0; get_wifi(net); } get_vol(vol); get_cpu(cpu); get_mem(mem); get_bat(bat); sprintf(status, "%s %s %s %s %s", net, vol, cpu, mem, bat); XStoreName(dpy, root, status); XFlush(dpy); sleep(INTERVAL); } /* NEXT LINES SHOULD NEVER EXECUTE! */ XCloseDisplay(dpy); iw_sockets_close(skfd); return 0; }