ITS
ReceivePackets.cpp
Go to the documentation of this file.
1 #include <ReceivePackets.h>
2 
4 {
5  m_paramConf = paramConfig;
6 }
7 
9 {
10 
11 }
12 
14 {
15  char errbuf[PCAP_ERRBUF_SIZE] = {'\0'};
16  char filter_exp[BUF_SIZ];
17  struct bpf_program fp;
18  bpf_u_int32 mask;
19  bpf_u_int32 net;
20  struct pcap_pkthdr header;
21 
22 
23  memset(&net, 0, sizeof net);
24  memset(&mask, 0, sizeof mask);
25 
26  if(pcap_lookupnet(m_paramConf->interface().toStdString().c_str(), &net, &mask, errbuf) == -1)
27  {
28  fprintf(stderr, "Couldn't find a network for interface '%s' : %s.\n", m_paramConf->interface().toStdString().c_str(), errbuf);
29  net = 0;
30  mask = 0;
32  }
33 
34  m_handle = pcap_open_live(m_paramConf->interface().toStdString().c_str(), BUF_SIZ, 0, 1, errbuf);
35  if(m_handle == NULL)
36  {
37  printf("Couldn't open interface '%s' : %s.\n", m_paramConf->interface().toStdString().c_str(), errbuf);
39  }
40 
41  if(pcap_datalink(m_handle) != DLT_EN10MB) {
42  printf("'%s' has no Ethernet header or can't handle it.\n", m_paramConf->interface().toStdString().c_str());
44  }
45 
46  uchar* packet;
47  while(1)
48  {
49  sprintf(filter_exp, "ether proto 0x8947 and !(ether src %02x:%02x:%02x:%02x:%02x:%02x)",
51 
52  if(pcap_compile(m_handle, &fp, filter_exp, 0, net) == -1)
53  {
54  fprintf(stderr, "Couldn't compile the filtre '%s' : %s.\n", filter_exp, pcap_geterr(m_handle));
56  }
57 
58  if(pcap_setfilter(m_handle, &fp) == -1)
59  {
60  fprintf(stderr, "Couldn't install the filter '%s' : %s.\n", filter_exp, pcap_geterr(m_handle));
62  }
63 
64  m_changeFilter = false;
65  printf("\n\nFiltreChange\n\n");
66  while(!m_changeFilter)
67  {
68  packet = (u_char*)pcap_next(m_handle, &header);
69  if(packet)
70  {
71  qDebug() << "G5 packet received";
72  emit packetReceived(QByteArray((char*)packet, header.len));
73  }
74  else
75  qDebug() << "PCAP_Next breaked";
76  }
77  }
78  return pcapError_success;
79 }
uchar * mid()
mid MID getter.
~ReceivePackets()
~ReceivePackets ReceivePackets destructor.
ParameterConfiguration * m_paramConf
Receiving packet class.
ReceivePackets(ParameterConfiguration *paramConfig)
ReceivePackets ReceivePackets constructor.
void packetReceived(QByteArray)
packetReceived Signal used when a packet is received.
pcap_t * m_handle
int receive()
receive Slot used to receive packet from the hybrid interface.
#define BUF_SIZ
QString interface() const
interface ITS-G5 interface name getter.