+
+ //if(FCTL_STYPE(package[0])==FCTL_STYPE_DATA) {
+ if(FCTL_TODS(package[0])&FCTL_FROMDS(package[0])) {
+ f4hdr=(t_frame4_hdr *)package;
+ data=package+sizeof(t_frame4_hdr);
+ memcpy(new_sta.addr,f4hdr->addr4,ADDR_LEN);
+ foo=1;
+ }
+ else {
+ f3hdr=(t_frame3_hdr *)package;
+ data=package+sizeof(t_frame3_hdr);
+ if(FCTL_TODS(package[0])) {
+ memcpy(new_sta.addr,f3hdr->addr2,ADDR_LEN);
+ memcpy(new_sta.bssid,f3hdr->addr1,ADDR_LEN);
+ }
+ else if(FCTL_FROMDS(package[0])) {
+ memcpy(new_sta.addr,f3hdr->addr3,ADDR_LEN);
+ memcpy(new_sta.bssid,f3hdr->addr2,ADDR_LEN);
+ }
+ else {
+ memcpy(new_sta.addr,f3hdr->addr2,ADDR_LEN);
+ memcpy(new_sta.bssid,f3hdr->addr3,ADDR_LEN);
+ }
+ }
+
+ ret=list_search_data(&(info->sniffed_sta),&new_sta,ADDR_LEN);
+ if((ret==L_EMPTY_LIST)|(ret==L_NO_SUCH_ELEMENT)) {
+ list_add_element(&(info->sniffed_sta),&new_sta,sizeof(t_sta));
+ sta=(t_sta *)info->sniffed_sta.current->data;
+ new=1;
+ }
+ else sta=(t_sta *)info->sniffed_sta.current->data;
+ if(!(sta->ap)) {
+ ret=list_count(&(info->sniffed_sta));
+ list_reset(&(info->sniffed_sta));
+ for(i=0;i<ret;i++) {
+ cmp_sta=(t_sta *)info->sniffed_sta.current->data;
+ if(!memcmp(cmp_sta->bssid,sta->bssid,ADDR_LEN)) {
+ if(FCTL_FROMDS(package[0]))
+ snprintf(sta->ssid,MAX_SSID_LEN,"<- %s",cmp_sta->ssid);
+ else if(FCTL_TODS(package[0]))
+ snprintf(sta->ssid,MAX_SSID_LEN,"-> %s",cmp_sta->ssid);
+ else
+ snprintf(sta->ssid,MAX_SSID_LEN,"<> %s",cmp_sta->ssid);
+ break;
+ }
+ list_next(&(info->sniffed_sta));
+ }
+ }
+ // fill in stuff ...
+ sta->count_data++;
+ switch_active_state(&(sta->active));
+ if(info->mode&MODE_IEEE80211) sta->sq=0;
+ else if(info->mode&MODE_PRISM)
+ sta->sq=(prismhdr->signal.data)-(prismhdr->noise.data);
+ if(new) {
+ strcpy(sc,"flite 'station found by data package'");
+ system(sc);
+ if(foo) {
+ sta->wds=1;
+ strcpy(sc,"flite 'wds package'");
+ system(sc);
+ }
+ memcpy(sta->snap,data,10);
+ if((data[0]==0xaa)&(data[1]==0xaa)&(data[2]==0x03)&
+ (data[3]==0x00)&(data[4]==0x00)&(data[5]==0x00)) {
+ sta->wep=0;
+ strcpy(sc,"flite 'not crypted'");
+ system(sc);
+ }
+ else {
+ sta->wep=WEP;
+ strcpy(sc,"flite ' crypted'");
+ system(sc);
+ }
+ }
+
+ //}
+