[i-c] Mode passif dans aggregator et listener
Implantation (basique) du mode passif dans aggregator et listener. git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@107 785a6c6c-259e-4ff1-8b91-dc31627914f0
This commit is contained in:
parent
24fef29457
commit
629ed77470
|
@ -9,6 +9,7 @@
|
|||
#include "../../libowlps/owlps.h"
|
||||
#include <confuse.h>
|
||||
|
||||
#define DEBUG
|
||||
|
||||
//#define TIMESTAMP // Décommenter pour afficher le timestamp à chaque ligne du fichier de sortie.
|
||||
|
||||
|
@ -64,8 +65,10 @@ typedef struct _couple_list
|
|||
/* En-têtes de fonctions */
|
||||
void got_couple_info(couple_list **couples, couple_message message) ;
|
||||
void free_couple_list(couple_list **couples) ;
|
||||
#ifdef DEBUG
|
||||
void print_couple_list(couple_list *couples) ;
|
||||
void print_couple_info(couple_info_list *info) ;
|
||||
#endif // DEBUG
|
||||
void* monitor_couple_list(couple_list **couples) ;
|
||||
int Db_write_request(couple_message message, BOOL ref) ;
|
||||
int DbAccessPoint(couple_message message, PGconn *conn);
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
#include "owlps-aggregator.h"
|
||||
|
||||
#define DEBUG
|
||||
|
||||
|
||||
cfg_t *cfg ; // Structure contenant la configuration
|
||||
|
@ -415,7 +414,10 @@ void got_couple_info(couple_list **couples, couple_message message)
|
|||
printf("Création de la liste des couples.\n") ;
|
||||
tmp_couple = malloc(sizeof(couple_list)) ; // on la crée.
|
||||
memcpy(tmp_couple->mobile_mac_addr_bytes, message.mobile_mac_addr_bytes, 6) ;
|
||||
tmp_couple->request_time = message.request_time ;
|
||||
if (timeval_to_ms(message.request_time) != 0) // Paquet explicite
|
||||
tmp_couple->request_time = message.request_time ; // Heure d'émission par le mobile
|
||||
else // Paquet implicite
|
||||
tmp_couple->request_time = message.start_time ; // Heure de réception par l'AP
|
||||
tmp_couple->start_time = start_time ; // Enregistrement de la date locale de l'agrégateur et non de la date de réception de la demande sur l'AP
|
||||
tmp_couple->x_position = message.x_position ;
|
||||
tmp_couple->y_position = message.y_position ;
|
||||
|
@ -426,21 +428,37 @@ void got_couple_info(couple_list **couples, couple_message message)
|
|||
*couples = tmp_couple ;
|
||||
}
|
||||
else
|
||||
{
|
||||
while (tmp_couple != NULL) // Sinon on cherche si le couple existe déjà dans la liste
|
||||
{
|
||||
if(mac_cmp(message.mobile_mac_addr_bytes, tmp_couple->mobile_mac_addr_bytes) == 1
|
||||
&& message.request_time.tv_usec == tmp_couple->request_time.tv_usec) // Si le couple existe déjà,
|
||||
break ; // on s'arrête dessus.
|
||||
tmp_couple = tmp_couple->next ;
|
||||
}
|
||||
{ // Sinon on cherche si le couple existe déjà dans la liste
|
||||
if (timeval_to_ms(message.request_time) != 0) // Paquet explicite
|
||||
{
|
||||
while (tmp_couple != NULL)
|
||||
{ // Critère : MAC et heure d'émission identiques.
|
||||
if(mac_cmp(message.mobile_mac_addr_bytes, tmp_couple->mobile_mac_addr_bytes) == 1
|
||||
&& sub_date(message.request_time, tmp_couple->request_time) == 0)
|
||||
break ; // Si le couple existe déjà, on s'arrête dessus.
|
||||
tmp_couple = tmp_couple->next ;
|
||||
}
|
||||
}
|
||||
else // Paquet implicite
|
||||
{
|
||||
while (tmp_couple != NULL)
|
||||
{ // Critère : MAC identiques et décalage des heures de réception par les AP d'au maximum 10 ms.
|
||||
if(mac_cmp(message.mobile_mac_addr_bytes, tmp_couple->mobile_mac_addr_bytes) == 1
|
||||
&& sub_date(message.start_time, tmp_couple->request_time) <= 10) // TODO : définir un paramètre pour le décalage maximal
|
||||
break ; // Si le couple existe déjà, on s'arrête dessus.
|
||||
tmp_couple = tmp_couple->next ;
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp_couple == NULL) // Si couple inexistant dans la liste
|
||||
{
|
||||
printf("Création du couple.\n") ;
|
||||
tmp_couple = malloc(sizeof(couple_list)) ; // on crée un nouveau couple.
|
||||
memcpy(tmp_couple->mobile_mac_addr_bytes, message.mobile_mac_addr_bytes, 6) ;
|
||||
tmp_couple->request_time = message.request_time ;
|
||||
if (timeval_to_ms(message.request_time) != 0) // Paquet explicite
|
||||
tmp_couple->request_time = message.request_time ; // Heure d'émission par le mobile
|
||||
else // Paquet implicite
|
||||
tmp_couple->request_time = message.start_time ; // Heure de réception par l'AP
|
||||
tmp_couple->start_time = start_time ; // Enregistrement de la date locale de l'agrégateur et non de la date de réception de la demande sur l'AP
|
||||
tmp_couple->x_position = message.x_position ;
|
||||
tmp_couple->y_position = message.y_position ;
|
||||
|
@ -495,6 +513,7 @@ void free_couple_list(couple_list **couples)
|
|||
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
/* Affiche la liste des couples */
|
||||
void print_couple_list(couple_list *couples)
|
||||
{
|
||||
|
@ -553,6 +572,7 @@ void print_couple_info(couple_info_list *info)
|
|||
) ;
|
||||
free(ap_mac_string) ;
|
||||
}
|
||||
#endif // DEBUG
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
#define USE_PTHREAD // POSIX threads available?
|
||||
//#define PLATFORM_ATHEROS // Will we compile to an Atheros platform?
|
||||
|
||||
#define DEBUG
|
||||
|
||||
|
||||
#include "../../libowlps/owlps.h"
|
||||
#include <pcap.h>
|
||||
|
@ -36,10 +38,11 @@
|
|||
|
||||
|
||||
/* Arguments & configuration du programme */
|
||||
#define OPTIONS "m:d:f:kl:p:r:w:v" // Chaîne pour getopt
|
||||
#define OPTIONS "d:f:kl:m:p:qr:vw:" // Chaîne pour getopt
|
||||
#define DEFAULT_CONFIG_FILE "/usr/local/etc/owlps/owlps-listener.conf"
|
||||
enum {MODE_ACTIVE = 'a', MODE_PASSIVE = 'p', MODE_MIXED = 'm'} ;
|
||||
|
||||
|
||||
/* En-têtes des fonctions */
|
||||
#ifdef USE_PTHREAD
|
||||
void* keep_mode_monitor(char *iface) ;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#include "owlps-listener.h"
|
||||
|
||||
#define DEBUG
|
||||
|
||||
|
||||
unsigned char mac[6] ; // Adresse MAC de l'AP
|
||||
|
||||
|
@ -318,6 +318,7 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
|||
unsigned short dst_port ; // Port destination du paquet capturé
|
||||
int i ; // Compteur
|
||||
|
||||
/* Traitements communs */
|
||||
memcpy(&rtap_bytes, &data[2], sizeof(unsigned short)) ; // Recopie les deux octets à partir du troisième octet de donnée qui est la taille de l'en-tête rtap (change avec des flags)
|
||||
#ifdef PLATFORM_ATHEROS
|
||||
rtap_bytes = ((rtap_bytes & 0xff00) >> 8) + ((rtap_bytes & 0xff) << 8) ;
|
||||
|
@ -345,28 +346,30 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
|||
}
|
||||
#endif // DEBUG
|
||||
|
||||
memcpy(couple.ap_mac_addr_bytes, mac, 6); // On copie la MAC de l'AP
|
||||
memcpy(couple.mobile_mac_addr_bytes, &data[rtap_bytes+10], 6); // L'adresse MAC source est 10 octets plus loin que le type de paquet 802.11
|
||||
couple.start_time = header->ts ; // L'heure de capture du paquet est contenue dans l'en-tête pcap
|
||||
couple.request_time.tv_sec = 0 ; // L'heure d'envoi par le mobile est inconnue (à moins qu'il ne s'agisse d'un paquet explicite)
|
||||
couple.request_time.tv_usec = 0 ;
|
||||
// TODO : if (est un paquet IP)
|
||||
memcpy(couple.mobile_ip_addr_bytes, &data[rtap_bytes + IEEE80211_HEADER_SIZE + LLC_HEADER_SIZE + 12], 4); // L'adresse IP source est à la position 12 de l'en-tête IP
|
||||
// TODO : else mettre l'IP à zéro
|
||||
|
||||
/* Mode actif */
|
||||
if ((GET_MODE() == MODE_ACTIVE || GET_MODE() == MODE_MIXED)
|
||||
&& raw_packet_type == RAW_PACKET_TYPE_DATA // Si le paquet est de type data,
|
||||
&& data[rtap_bytes + IEEE80211_HEADER_SIZE + LLC_HEADER_SIZE + 9] == RAW_PACKET_PROTO_UDP // et de protocole UDP (9 : position du champ "Protocol" de l'en-tête IP),
|
||||
&& dst_port == LOC_REQUEST_DEFAULT_PORT // et le port de destination est le bon,
|
||||
&& dst_port == GET_LISTENING_PORT() // et le port de destination est le bon,
|
||||
&& ! IS_RETRY(raw_packet_flags)) // et ce n'est pas un Retry.
|
||||
{
|
||||
memcpy(couple.ap_mac_addr_bytes, mac, 6); // On copie la MAC de l'AP
|
||||
memcpy(couple.mobile_mac_addr_bytes, &data[rtap_bytes+10], 6); // L'adresse MAC source est 10 octets plus loin que le type de paquet
|
||||
memcpy(couple.mobile_ip_addr_bytes, &data[rtap_bytes + IEEE80211_HEADER_SIZE + LLC_HEADER_SIZE + 12], 4); // L'adresse IP source est à la position 12 de l'en-tête IP
|
||||
gettimeofday(&couple.start_time, NULL) ;
|
||||
BOOL err = FALSE ;
|
||||
|
||||
packet_type = data[rtap_bytes + IEEE80211_HEADER_SIZE + LLC_HEADER_SIZE + IP_HEADER_SIZE + UDP_HEADER_SIZE] ;
|
||||
|
||||
memcpy(&couple.request_time, &data[rtap_bytes + IEEE80211_HEADER_SIZE + LLC_HEADER_SIZE + IP_HEADER_SIZE + UDP_HEADER_SIZE + 1], sizeof(struct timeval));
|
||||
|
||||
|
||||
switch(packet_type)
|
||||
{
|
||||
case PACKET_TYPE_NORMAL :
|
||||
if (GET_VERBOSE())
|
||||
printf("\nPaquet normal reçu.\n") ;
|
||||
printf("\nPaquet explicite normal reçu.\n") ;
|
||||
couple.direction = 0 ;
|
||||
couple.x_position = 0 ;
|
||||
couple.y_position = 0 ;
|
||||
|
@ -375,7 +378,7 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
|||
|
||||
case PACKET_TYPE_CALIBRATION :
|
||||
if (GET_VERBOSE())
|
||||
printf("\nPaquet de calibration reçu.\n") ;
|
||||
printf("\nPaquet explicite de calibration reçu.\n") ;
|
||||
couple.direction = data[rtap_bytes + IEEE80211_HEADER_SIZE + LLC_HEADER_SIZE + IP_HEADER_SIZE + UDP_HEADER_SIZE + 9];
|
||||
memcpy(&couple.x_position, &data[rtap_bytes + IEEE80211_HEADER_SIZE + LLC_HEADER_SIZE + IP_HEADER_SIZE + UDP_HEADER_SIZE + 10], sizeof(float));
|
||||
memcpy(&couple.y_position, &data[rtap_bytes + IEEE80211_HEADER_SIZE + LLC_HEADER_SIZE + IP_HEADER_SIZE + UDP_HEADER_SIZE + 14], sizeof(float));
|
||||
|
@ -384,100 +387,120 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
|||
|
||||
default :
|
||||
if (GET_VERBOSE())
|
||||
printf("\nPaquet bizarre reçu.\n") ;
|
||||
fprintf(stderr, "Erreur ! Type de paquet inconnu (%d).\n", packet_type) ;
|
||||
return ;
|
||||
printf("\nPaquet explicite bizarre reçu.\n") ;
|
||||
fprintf(stderr, "Erreur ! Type de paquet explicite inconnu (%d).\n", packet_type) ;
|
||||
err = TRUE ;
|
||||
}
|
||||
|
||||
if (err)
|
||||
{
|
||||
if (GET_MODE() == MODE_ACTIVE)
|
||||
return ;
|
||||
else if (GET_VERBOSE())
|
||||
printf("\nCe paquet explicite bizarre sera traité comme implicite.\n") ;
|
||||
}
|
||||
else
|
||||
memcpy(&couple.request_time, &data[rtap_bytes + IEEE80211_HEADER_SIZE + LLC_HEADER_SIZE + IP_HEADER_SIZE + UDP_HEADER_SIZE + 1], sizeof(struct timeval));
|
||||
}
|
||||
|
||||
memcpy(&rtap_presentflags, &data[RTAP_P_PRESENTFLAGS], RTAP_L_PRESENTFLAGS); // Récupère les flags de l'en-tête rtap
|
||||
else if (GET_MODE() == MODE_PASSIVE || GET_MODE() == MODE_MIXED)
|
||||
{
|
||||
if (GET_VERBOSE())
|
||||
printf("\nPaquet implicite reçu.\n") ;
|
||||
}
|
||||
|
||||
else // Mode actif uniquement, le paquet n'étant pas une demande explicite
|
||||
return ;
|
||||
|
||||
/* Traitement de l'en-tête Radiotap */
|
||||
memcpy(&rtap_presentflags, &data[RTAP_P_PRESENTFLAGS], RTAP_L_PRESENTFLAGS); // Récupère les flags de l'en-tête rtap
|
||||
#ifdef PLATFORM_ATHEROS
|
||||
rtap_presentflags = ((rtap_presentflags & 0xff000000) >> 24) + ((rtap_presentflags & 0xff0000) >> 8) + ((rtap_presentflags & 0xff00) << 8) + ((rtap_presentflags & 0xff) << 24) ;
|
||||
rtap_presentflags = ((rtap_presentflags & 0xff000000) >> 24) + ((rtap_presentflags & 0xff0000) >> 8) + ((rtap_presentflags & 0xff00) << 8) + ((rtap_presentflags & 0xff) << 24) ;
|
||||
#endif // PLATFORM_ATHEROS
|
||||
|
||||
for (i = 0 ; i < 15 ; i++) // Initialisation de la structure des champs présents
|
||||
check[i] = FALSE ;
|
||||
rtap_position = 8 ; // Début des champs déterminés par le present flag
|
||||
for (i = 0 ; i < 15 ; i++) // Initialisation de la structure des champs présents
|
||||
check[i] = FALSE ;
|
||||
rtap_position = 8 ; // Début des champs déterminés par le present flag
|
||||
|
||||
for(i=0 ; i < 15 ; i++) // on teste les 15 premiers bits du champ flag afin de valider la présence et de les copier
|
||||
{
|
||||
if ((rtap_presentflags % 2) == 1)
|
||||
{
|
||||
switch(i)
|
||||
{
|
||||
case RTAP_MACTS:
|
||||
check[RTAP_MACTS] = TRUE ;
|
||||
rtap_position += RTAP_L_MACTS ;
|
||||
break ;
|
||||
case RTAP_FLAGS:
|
||||
check[RTAP_FLAGS] = TRUE;
|
||||
rtap_position += RTAP_L_FLAGS ;
|
||||
break ;
|
||||
case RTAP_RATE:
|
||||
check[RTAP_RATE] = TRUE;
|
||||
rtap_position += RTAP_L_RATE ;
|
||||
break ;
|
||||
case RTAP_CHANNEL:
|
||||
rtap_position += RTAP_L_CHANNEL ;
|
||||
rtap_position += RTAP_L_CHANNELTYPE ;
|
||||
break ;
|
||||
case RTAP_FHSS:
|
||||
check[RTAP_FHSS] = TRUE;
|
||||
rtap_position += RTAP_L_FHSS ;
|
||||
break ;
|
||||
case RTAP_ANTENNASIGNALDBM:
|
||||
memcpy(&(couple.antenna_signal_dbm), &data[rtap_position], RTAP_L_ANTENNASIGNALDBM) ;
|
||||
check[RTAP_ANTENNASIGNALDBM] = TRUE;
|
||||
if (GET_VERBOSE())
|
||||
printf("Antenna Signal : %d dBm\n", couple.antenna_signal_dbm - 0x100);
|
||||
rtap_position += RTAP_L_ANTENNASIGNALDBM ;
|
||||
break ;
|
||||
case RTAP_ANTENNANOISEDBM:
|
||||
check[RTAP_ANTENNANOISEDBM] = TRUE;
|
||||
rtap_position += RTAP_L_ANTENNANOISEDBM ;
|
||||
break ;
|
||||
case RTAP_LOCKQUALITY:
|
||||
check[RTAP_LOCKQUALITY] = TRUE;
|
||||
rtap_position += RTAP_L_LOCKQUALITY ;
|
||||
break ;
|
||||
case RTAP_TXATTENUATION:
|
||||
check[RTAP_TXATTENUATION] = TRUE;
|
||||
rtap_position += RTAP_L_TXATTENUATION ;
|
||||
break ;
|
||||
case RTAP_TXATTENUATIONDB:
|
||||
check[RTAP_TXATTENUATIONDB] = TRUE;
|
||||
rtap_position += RTAP_L_TXATTENUATIONDB ;
|
||||
break ;
|
||||
case RTAP_TXATTENUATIONDBM:
|
||||
check[RTAP_TXATTENUATIONDBM] = TRUE;
|
||||
rtap_position += RTAP_L_TXATTENUATIONDBM ;
|
||||
break ;
|
||||
case RTAP_ANTENNA:
|
||||
check[RTAP_ANTENNA] = TRUE;
|
||||
rtap_position += RTAP_L_ANTENNA ;
|
||||
break ;
|
||||
case RTAP_ANTENNASIGNALDB:
|
||||
check[RTAP_ANTENNASIGNALDB] = TRUE;
|
||||
rtap_position += RTAP_L_ANTENNASIGNALDB ;
|
||||
break ;
|
||||
case RTAP_ANTENNANOISEDB:
|
||||
check[RTAP_ANTENNANOISEDB] = TRUE;
|
||||
rtap_position += RTAP_L_ANTENNANOISEDB ;
|
||||
break ;
|
||||
case RTAP_FCS:
|
||||
check[RTAP_FCS] = TRUE;
|
||||
rtap_position += RTAP_L_FCS ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
rtap_presentflags /= 2 ;
|
||||
}
|
||||
for(i=0 ; i < 15 ; i++) // on teste les 15 premiers bits du champ flag afin de valider la présence et de les copier
|
||||
{
|
||||
if ((rtap_presentflags % 2) == 1)
|
||||
{
|
||||
switch(i)
|
||||
{
|
||||
case RTAP_MACTS:
|
||||
check[RTAP_MACTS] = TRUE ;
|
||||
rtap_position += RTAP_L_MACTS ;
|
||||
break ;
|
||||
case RTAP_FLAGS:
|
||||
check[RTAP_FLAGS] = TRUE;
|
||||
rtap_position += RTAP_L_FLAGS ;
|
||||
break ;
|
||||
case RTAP_RATE:
|
||||
check[RTAP_RATE] = TRUE;
|
||||
rtap_position += RTAP_L_RATE ;
|
||||
break ;
|
||||
case RTAP_CHANNEL:
|
||||
rtap_position += RTAP_L_CHANNEL ;
|
||||
rtap_position += RTAP_L_CHANNELTYPE ;
|
||||
break ;
|
||||
case RTAP_FHSS:
|
||||
check[RTAP_FHSS] = TRUE;
|
||||
rtap_position += RTAP_L_FHSS ;
|
||||
break ;
|
||||
case RTAP_ANTENNASIGNALDBM:
|
||||
memcpy(&(couple.antenna_signal_dbm), &data[rtap_position], RTAP_L_ANTENNASIGNALDBM) ;
|
||||
check[RTAP_ANTENNASIGNALDBM] = TRUE;
|
||||
if (GET_VERBOSE())
|
||||
printf("Antenna Signal : %d dBm\n", couple.antenna_signal_dbm - 0x100);
|
||||
rtap_position += RTAP_L_ANTENNASIGNALDBM ;
|
||||
break ;
|
||||
case RTAP_ANTENNANOISEDBM:
|
||||
check[RTAP_ANTENNANOISEDBM] = TRUE;
|
||||
rtap_position += RTAP_L_ANTENNANOISEDBM ;
|
||||
break ;
|
||||
case RTAP_LOCKQUALITY:
|
||||
check[RTAP_LOCKQUALITY] = TRUE;
|
||||
rtap_position += RTAP_L_LOCKQUALITY ;
|
||||
break ;
|
||||
case RTAP_TXATTENUATION:
|
||||
check[RTAP_TXATTENUATION] = TRUE;
|
||||
rtap_position += RTAP_L_TXATTENUATION ;
|
||||
break ;
|
||||
case RTAP_TXATTENUATIONDB:
|
||||
check[RTAP_TXATTENUATIONDB] = TRUE;
|
||||
rtap_position += RTAP_L_TXATTENUATIONDB ;
|
||||
break ;
|
||||
case RTAP_TXATTENUATIONDBM:
|
||||
check[RTAP_TXATTENUATIONDBM] = TRUE;
|
||||
rtap_position += RTAP_L_TXATTENUATIONDBM ;
|
||||
break ;
|
||||
case RTAP_ANTENNA:
|
||||
check[RTAP_ANTENNA] = TRUE;
|
||||
rtap_position += RTAP_L_ANTENNA ;
|
||||
break ;
|
||||
case RTAP_ANTENNASIGNALDB:
|
||||
check[RTAP_ANTENNASIGNALDB] = TRUE;
|
||||
rtap_position += RTAP_L_ANTENNASIGNALDB ;
|
||||
break ;
|
||||
case RTAP_ANTENNANOISEDB:
|
||||
check[RTAP_ANTENNANOISEDB] = TRUE;
|
||||
rtap_position += RTAP_L_ANTENNANOISEDB ;
|
||||
break ;
|
||||
case RTAP_FCS:
|
||||
check[RTAP_FCS] = TRUE;
|
||||
rtap_position += RTAP_L_FCS ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
rtap_presentflags /= 2 ;
|
||||
}
|
||||
|
||||
if (GET_VERBOSE())
|
||||
{
|
||||
char *ap_mac_string = mac_bytes_to_string(couple.ap_mac_addr_bytes) ;
|
||||
char *mobile_mac_string = mac_bytes_to_string(couple.mobile_mac_addr_bytes) ;
|
||||
printf("\
|
||||
if (GET_VERBOSE())
|
||||
{
|
||||
char *ap_mac_string = mac_bytes_to_string(couple.ap_mac_addr_bytes) ;
|
||||
char *mobile_mac_string = mac_bytes_to_string(couple.mobile_mac_addr_bytes) ;
|
||||
printf("\
|
||||
*** Couple à envoyer ***\n\
|
||||
\tMAC AP : %s\n\
|
||||
\tMAC mobile : %s\n\
|
||||
|
@ -489,33 +512,26 @@ void read_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *p
|
|||
\tPosition Z : %f\n\
|
||||
\tDirection : %hhd\n\
|
||||
",
|
||||
ap_mac_string,
|
||||
mobile_mac_string,
|
||||
timeval_to_ms(couple.request_time),
|
||||
timeval_to_ms(couple.start_time),
|
||||
couple.antenna_signal_dbm - 0x100,
|
||||
couple.x_position,
|
||||
couple.y_position,
|
||||
couple.z_position,
|
||||
couple.direction
|
||||
) ;
|
||||
free(ap_mac_string) ;
|
||||
free(mobile_mac_string) ;
|
||||
}
|
||||
|
||||
/* Envoi du couple au serveur d'aggrégation */
|
||||
nsent = sendto(sockfd, (void *) &couple, sizeof(couple), 0, (struct sockaddr *) server, (socklen_t) sizeof(*server)) ;
|
||||
if (nsent != (ssize_t) sizeof(couple))
|
||||
{
|
||||
perror("Erreur lors de l'envoi du couple au serveur ") ;
|
||||
return ;
|
||||
}
|
||||
ap_mac_string,
|
||||
mobile_mac_string,
|
||||
timeval_to_ms(couple.request_time),
|
||||
timeval_to_ms(couple.start_time),
|
||||
couple.antenna_signal_dbm - 0x100,
|
||||
couple.x_position,
|
||||
couple.y_position,
|
||||
couple.z_position,
|
||||
couple.direction
|
||||
) ;
|
||||
free(ap_mac_string) ;
|
||||
free(mobile_mac_string) ;
|
||||
}
|
||||
|
||||
/* Mode passif */
|
||||
else if (GET_MODE() == MODE_PASSIVE || GET_MODE() == MODE_MIXED)
|
||||
/* Envoi du couple au serveur d'aggrégation */
|
||||
nsent = sendto(sockfd, (void *) &couple, sizeof(couple), 0, (struct sockaddr *) server, (socklen_t) sizeof(*server)) ;
|
||||
if (nsent != (ssize_t) sizeof(couple))
|
||||
{
|
||||
/* TODO */
|
||||
perror("Erreur lors de l'envoi du couple au serveur ") ;
|
||||
return ;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue