[plane][done] multicast request (not tested) + init sequence + fetch ip/port by multicast then connect to given TCP (ref #1)
This commit is contained in:
parent
61581e393d
commit
ab0fea9a14
|
@ -25,12 +25,13 @@
|
|||
#include "data.h"
|
||||
|
||||
/* vars */
|
||||
#define SRV_HOST "127.0.0.1"
|
||||
#define UDP_MCST 4444 // multicast UDP port for PLANES
|
||||
#define TCP_LIST 0x504c // TCP plane command (PL = 8076)
|
||||
#define SERV_HOST "127.0.0.1" // adresse serveur
|
||||
#define MCST_HOST "225.0.0.37" // adresse groupe multicast UDP
|
||||
#define UDP_MCST 4444 // multicast UDP port for PLANES
|
||||
#define TCP_LIST 0x504c // TCP plane command (PL = 8076)
|
||||
|
||||
#define UDP_VTER 4445 // viewTerm listener
|
||||
#define UDP_CTER 4446 // ctrlTerm listener
|
||||
#define UDP_VTER 4445 // viewTerm listener
|
||||
#define UDP_CTER 4446 // ctrlTerm listener
|
||||
|
||||
#define MAX_BUF_LEN 512
|
||||
#define MAX_TCP_THR 10
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
*
|
||||
* ==OUT==
|
||||
* @pListenSocket<int*> Pointeur sur le <int> à remplir => contiendra un pointeur sur la socket d'écoute
|
||||
* @pAddr<sockaddr_in*> Pointeur sur le <sockaddr_n> à remplir => contiendra un pointeur sur les infos server
|
||||
* @pInfo<sockaddr_in*> Pointeur sur le <sockaddr_n> à remplir => contiendra un pointeur sur les infos server
|
||||
*
|
||||
* ==RETURN==
|
||||
* @status<int> -1 si erreur, sinon 0
|
||||
|
|
|
@ -9,9 +9,13 @@ default: all
|
|||
lib/network/tcp/client.o: lib/header.h lib/network/tcp/client.h lib/network/tcp/client.c
|
||||
gcc $(CFLAGS) -c -o lib/network/tcp/client.o lib/network/tcp/client.c
|
||||
|
||||
lib/network/udp/client.o: lib/header.h lib/network/udp/client.h lib/network/udp/client.c
|
||||
gcc $(CFLAGS) -c -o lib/network/udp/client.o lib/network/udp/client.c
|
||||
|
||||
# Compiles the Plane
|
||||
boot: lib/network/tcp/client.o plane.h plane.c
|
||||
gcc $(CFLAGS) -o boot lib/network/tcp/client.o plane.c -lm
|
||||
# -lm flag for math lib
|
||||
boot: lib/network/tcp/client.o lib/network/udp/client.o plane.h plane.c
|
||||
gcc $(CFLAGS) -o boot lib/network/tcp/client.o lib/network/udp/client.o plane.c -lm
|
||||
|
||||
|
||||
# Run full compilation
|
||||
|
|
|
@ -7,8 +7,6 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
|
||||
/* sys */
|
||||
#include <sys/types.h>
|
||||
|
@ -22,8 +20,8 @@
|
|||
#include <arpa/inet.h>
|
||||
|
||||
/* vars */
|
||||
#define SRV_HOST "127.0.0.1"
|
||||
#define SRV_PORT 0x504c
|
||||
#define MCST_HOST "225.0.0.37" // adresse groupe multicast UDP
|
||||
#define MCST_PORT 0x504c // port multicast UDP
|
||||
|
||||
#define MAX_BUF_LEN 512
|
||||
|
||||
|
|
|
@ -1 +1,42 @@
|
|||
#include "client.h"
|
||||
|
||||
|
||||
int TCP_CONNECT(int* pSocket, const char* pAddr, const int pPort, struct sockaddr_in* pInfo){
|
||||
|
||||
/* [0] Initialisation des variables
|
||||
=========================================================*/
|
||||
*pSocket = -1;
|
||||
|
||||
|
||||
/* [1] Création de la socket
|
||||
=======================================================*/
|
||||
/* 1. Création de la socket */
|
||||
*pSocket = socket(AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
/* 2. Gestion erreur */
|
||||
if( *pSocket < 0 )
|
||||
return -1;
|
||||
|
||||
|
||||
/* [2] On définit les infos de la socket
|
||||
=========================================================*/
|
||||
/* (1) Reset des valeurs */
|
||||
bzero(pInfo, sizeof(struct sockaddr_in));
|
||||
|
||||
/* (2) On définit les infos */
|
||||
pInfo->sin_family = AF_INET;
|
||||
pInfo->sin_port = htons(pPort);
|
||||
pInfo->sin_addr.s_addr = inet_addr(pAddr);
|
||||
|
||||
|
||||
/* [3] On se connecte au serveur
|
||||
=========================================================*/
|
||||
if( connect(*pSocket, (struct sockaddr*) pInfo, sizeof(struct sockaddr_in)) < 0 )
|
||||
return -1;
|
||||
|
||||
|
||||
|
||||
/* [n] Code succès
|
||||
=========================================================*/
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -3,5 +3,28 @@
|
|||
|
||||
|
||||
|
||||
#include "../../header.h"
|
||||
|
||||
|
||||
/* Créée une socket TCP et la connecte + crée le sockaddr_in pour la suite
|
||||
*
|
||||
* ==IN==
|
||||
* @pAddr<const char*> Adresse du serveur TCP
|
||||
* @pPort<const int> Port du serveur TCP
|
||||
*
|
||||
* ==OUT==
|
||||
* @pSocket<int*> Pointeur sur le <int> à remplir => contiendra un pointeur sur la socket créée
|
||||
* @pInfo<sockaddr_in*> Pointeur sur le <sockaddr_In> à remplir => contiendra un pointeur sur les infos server
|
||||
*
|
||||
* ==RETURN==
|
||||
* @status<int> -1 si erreur, sinon 0
|
||||
*
|
||||
* @history
|
||||
* [1] Création de la socket
|
||||
* [2] On définit les infos du serveur
|
||||
* [3] On se connecte au serveur
|
||||
*
|
||||
*/
|
||||
int TCP_CONNECT(int* pSocket, const char* pAddr, const int pPort, struct sockaddr_in* pInfo);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,36 @@
|
|||
#include "client.h"
|
||||
|
||||
|
||||
|
||||
int UDP_SOCKET(int* pSocket, const char* pAddr, const int pPort, struct sockaddr_in* pInfo){
|
||||
|
||||
/* [0] Initialisation des variables
|
||||
=========================================================*/
|
||||
*pSocket = -1;
|
||||
|
||||
|
||||
/* [1] Création de la socket
|
||||
=======================================================*/
|
||||
/* 1. Création de la socket */
|
||||
*pSocket = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
|
||||
/* 2. Gestion erreur */
|
||||
if( *pSocket < 0 )
|
||||
return -1;
|
||||
|
||||
|
||||
/* [2] On définit les infos de la socket
|
||||
=========================================================*/
|
||||
/* (1) Reset des valeurs */
|
||||
bzero(pInfo, sizeof(struct sockaddr_in));
|
||||
|
||||
/* (2) On définit les infos */
|
||||
pInfo->sin_family = AF_INET;
|
||||
pInfo->sin_port = htons(pPort);
|
||||
pInfo->sin_addr.s_addr = inet_addr(pAddr);
|
||||
|
||||
|
||||
/* [n] Code succès
|
||||
=========================================================*/
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
#ifndef _LIB_NETWORK_UDP_CLIENT_H_
|
||||
#define _LIB_NETWORK_UDP_CLIENT_H_
|
||||
|
||||
|
||||
|
||||
#include "../../header.h"
|
||||
|
||||
|
||||
/* Créée une socket UDP + crée le sockaddr_in pour la suite
|
||||
*
|
||||
* ==IN==
|
||||
* @pAddr<const char*> Adresse du groupe multicast UDP
|
||||
* @pPort<const int> Port d'écoute UDP
|
||||
*
|
||||
* ==OUT==
|
||||
* @pSocket<int*> Pointeur sur le <int> à rempliR => contiendra un pointeur sur la socket créée
|
||||
* @pInfo<sockaddr_in*> Pointeur sur le <sockaddr_In> à remplir => contiendra un pointeur sur les infos server
|
||||
*
|
||||
* ==RETURN==
|
||||
* @status<int> -1 si erreur, sinon 0
|
||||
*
|
||||
* @history
|
||||
* [1] Création de la socket
|
||||
* [2] On définit les infos de la socket
|
||||
* [3] On crée la socket
|
||||
*
|
||||
*/
|
||||
int UDP_SOCKET(int* pSocket, const char* pAddr, const int pPort, struct sockaddr_in* pInfo);
|
||||
|
||||
|
||||
|
||||
#endif
|
|
@ -6,7 +6,8 @@ char numero_vol[6];
|
|||
struct coord crd;
|
||||
struct control ctrl;
|
||||
|
||||
int clientsock = -1;
|
||||
int mcast_socket = -1;
|
||||
int commu_socket = -1;
|
||||
char buffer[MAX_BUF_LEN] = {0};
|
||||
|
||||
/********************************
|
||||
|
@ -14,51 +15,91 @@ char buffer[MAX_BUF_LEN] = {0};
|
|||
********************************/
|
||||
|
||||
int open_communication(){
|
||||
// fonction à implémenter qui permet d'entrer en communication via TCP
|
||||
// avec le gestionnaire de vols
|
||||
|
||||
/* 0. Initialisation des variables */
|
||||
// struct hostent* host = NULL;
|
||||
struct sockaddr_in server;
|
||||
struct sockaddr_in udp, tcp; // données des sockets
|
||||
char buffer[MAX_BUF_LEN] = {0}; // buffer
|
||||
unsigned short serverPort; // port TCP donné par requête multicast UDP
|
||||
char serverAddr[INET_ADDRSTRLEN+1]; // adresse TCP donné par requête multicast UDP
|
||||
int status;
|
||||
|
||||
/* 1. Création de la socket */
|
||||
clientsock = socket(AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
/* 1bis. Gestion erreur socket */
|
||||
if( clientsock < 0 )
|
||||
/* [1] Socket Multicast UDP
|
||||
=========================================================*/
|
||||
|
||||
|
||||
/* (1) Création socket multicast
|
||||
---------------------------------------------------------*/
|
||||
if( UDP_SOCKET(&mcast_socket, MCST_HOST, MCST_PORT, &udp) < 0 )
|
||||
return 0;
|
||||
|
||||
/* 2. Hostname Lookup */
|
||||
// host = gethostbyname(SRV_HOST);
|
||||
|
||||
// /* 2bis. Gestion erreur */
|
||||
// if( host == NULL )
|
||||
// return 0;
|
||||
/* (2) Envoi séquence initialisation avion
|
||||
---------------------------------------------------------*/
|
||||
/* 1. Construction séquence d'initialisation */
|
||||
memcpy(buffer, numero_vol, sizeof(char)*6);
|
||||
|
||||
/* 3. Mise à jour des infos serveur */
|
||||
bzero(&server, sizeof(struct sockaddr_in));
|
||||
server.sin_family = AF_INET;
|
||||
server.sin_port = htons(SRV_PORT);
|
||||
server.sin_addr.s_addr = inet_addr(SRV_HOST);
|
||||
/* 2. Envoi séquence */
|
||||
if( sendto(mcast_socket, buffer, MAX_BUF_LEN, 0, (struct sockaddr*) &udp, sizeof(struct sockaddr_in)) < 0 ){
|
||||
close(mcast_socket);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// // On récupère l'adresse serveur du lookup
|
||||
// memcpy(&server->sin_addr.s_addr, *(host->h_addr_list), host->h_length);
|
||||
|
||||
/* 4. Connection */
|
||||
if( connect(clientsock, (struct sockaddr*) &server, sizeof(struct sockaddr_in)) < 0 )
|
||||
/* (3) Attente réponse SGCA -> adresse+port TCP
|
||||
---------------------------------------------------------*/
|
||||
/* 1. Attente réponse */
|
||||
status = recv(mcast_socket, buffer, MAX_BUF_LEN, 0);
|
||||
|
||||
/* 2. Gestion erreur */
|
||||
if( status < 0 ){
|
||||
close(mcast_socket);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 3. Vérification taille */
|
||||
if( status < sizeof(char)*INET_ADDRSTRLEN+sizeof(unsigned short) ){
|
||||
close(mcast_socket);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 4. On récupère les données */
|
||||
memcpy(serverAddr, buffer, sizeof(char)*INET_ADDRSTRLEN );
|
||||
memcpy(&serverPort, buffer+sizeof(char)*INET_ADDRSTRLEN, sizeof(unsigned short) );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* [2] Socket communication TCP
|
||||
=========================================================*/
|
||||
|
||||
/* (1) Création socket TCP + connection
|
||||
---------------------------------------------------------*/
|
||||
/* 1. Création socket TCP + connection serveur */
|
||||
if( TCP_CONNECT(&commu_socket, serverAddr, serverPort, &tcp) < 0 )
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void fermer_communication(){
|
||||
// fonction à implémenter qui permet de fermer la communication
|
||||
// avec le gestionnaire de vols
|
||||
}
|
||||
|
||||
void envoyer_caracteristiques(){
|
||||
// fonction à implémenter qui envoie l'ensemble des caractéristiques
|
||||
// courantes de l'plane au gestionnaire de vols
|
||||
|
||||
/* [0] Initialisation des variables
|
||||
=========================================================*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/********************************
|
||||
|
|
|
@ -2,7 +2,13 @@
|
|||
#define _PLANE_H_
|
||||
|
||||
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "lib/header.h"
|
||||
#include "lib/network/udp/client.h"
|
||||
#include "lib/network/tcp/client.h"
|
||||
|
||||
|
||||
|
||||
#define ALTMAX 20000
|
||||
|
|
Loading…
Reference in New Issue