actube/src/cw/cw_format_pkt_hdr.c

107 lines
2.3 KiB
C

#include "format.h"
#include "sock.h"
#include "conn.h"
#include "cw.h"
#include "dot11.h"
int cw_format_dot11_fc_flags(char *dst, uint8_t *frame){
char *s = dst;
uint8_t f = frame[0];
s+=sprintf(s,"ToDS:%d ", f&1 ? 1:0);
s+=sprintf(s,"FromDS:%d ", f&2 ? 1:0);
s+=sprintf(s,"More Frgs:%d ", f&4 ? 1:0);
s+=sprintf(s,"Retry:%d ", f&8 ? 1:0);
s+=sprintf(s,"PwrMgmt:%d ", f&16 ? 1:0);
s+=sprintf(s,"More Dta:%d ", f&32 ? 1:0);
s+=sprintf(s,"Protec:%d ", f&64 ? 1:0);
s+=sprintf(s,"+HTC/:%d ", f&128 ? 1:0);
return s-dst;
}
int cw_format_dot11_rates(char *dst, const uint8_t *src, int len)
{
int i;
char * k="";
char *s=dst;
for(i=0; i<len; i++){
int rate = src[i] &0x7f;
s+=sprintf(s,"%s%0.1f",k,dot11_rate2float(rate));
k=", ";
}
return s-dst;
}
int cw_format_dot11_elem(char *dst, uint8_t id, const uint8_t *src, int len)
{
char *s = dst;
s += sprintf(s,"elem(id=%d) ",id);
switch(id){
case DOT11_ELEM_SSID:
s+=sprintf(s," ssid: %.*s",len,src);
break;
case DOT11_ELEM_SUPPORTED_RATES:
s+=sprintf(s," Supported Rates:");
s+=cw_format_dot11_rates(s,src,len);
break;
case DOT11_ELEM_EXTENDED_SUPPORTED_RATES:
s+=sprintf(s," Extended Supported Rates");
break;
case DOT11_ELEM_POWER_CAPABILITY:
s+=sprintf(s," Power Capability");
break;
case DOT11_ELEM_SUPPORTED_CHANNELS:
s+=sprintf(s," Supported Channels");
break;
case DOT11_ELEM_SUPPORTED_OPERATING_CLASSES:
s+=sprintf(s," Supported Operating Classes");
break;
case DOT11_ELEM_VENDOR_SPECIFIC:
s+=sprintf(s," Vendor Specific");
break;
default:
break;
}
s+=sprintf(s,", len=%d",len);
return s-dst;
}
int cw_format_dot11_hdr(char * dst, uint8_t * packet, int len)
{
char *s;
int type = dot11_get_type_and_subtype(packet);
s=dst;
s+=sprintf(s,"IEEE 802.11 - %s",dot11_get_frame_name(packet));
s+=sprintf(s," da:");
s+=format_mac(s,dot11_get_da(packet),6);
s+=sprintf(s," sa:");
s+=format_mac(s,dot11_get_sa(packet),6);
s+=sprintf(s," bssid:");
s+=format_mac(s,dot11_get_bssid(packet),6);
s+=sprintf(s," seq: %d\n",dot11_get_seq(packet));
s+=cw_format_dot11_fc_flags(s,packet);
s+=sprintf(s,"\nDuration: %d",dot11_get_duration(packet));
//
/* switch (type){
case DOT11_ASSOC_REQ:
s+=sprintf(s,"\n ssid: %.*s",dot11_assoc_req_get_ssid_len(packet),
dot11_assoc_req_get_ssid(packet)
);
break;
}*/
}