Reference #7 + minmod
This commit is contained in:
parent
0009aa269a
commit
8cc7dcf06c
|
@ -153,15 +153,15 @@ void* LISTEN_TCP(){
|
||||||
void* LISTEN_UDP(){
|
void* LISTEN_UDP(){
|
||||||
/* [0] Initialisation des variables
|
/* [0] Initialisation des variables
|
||||||
==========================================================*/
|
==========================================================*/
|
||||||
int CLIENT_SOCKET; // contiendra la socket UDP à envoyer sur un THREAD
|
int CLIENT_SOCKET; // contiendra la socket UDP à envoyer sur un THREAD
|
||||||
struct sockaddr_in serverInfo; // contiendra les infos serveur
|
struct sockaddr_in serverInfo; // contiendra les infos serveur
|
||||||
struct sockaddr_in clientInfo; // contiendra les infos client
|
struct sockaddr_in clientInfo; // contiendra les infos client
|
||||||
char client_ip[20]; // IP du client
|
char client_ip[INET_ADDRSTRLEN]; // IP (string) du client
|
||||||
socklen_t len; // taille de la socket
|
socklen_t len; // taille de la socket
|
||||||
int read; // compteurs
|
int read; // compteurs
|
||||||
char buffer[MAX_BUF_LEN]; // buffer requête
|
char buffer[MAX_BUF_LEN]; // buffer requête
|
||||||
struct bind_header request; // requête parsée
|
struct bind_header request; // requête parsée
|
||||||
int i, index; // compteurs
|
int i, index; // compteurs
|
||||||
|
|
||||||
// retour de @DROP_UDP_SERVER
|
// retour de @DROP_UDP_SERVER
|
||||||
int SOCKET;
|
int SOCKET;
|
||||||
|
@ -187,28 +187,28 @@ void* LISTEN_UDP(){
|
||||||
============================================================================*/
|
============================================================================*/
|
||||||
while( 1 ){
|
while( 1 ){
|
||||||
|
|
||||||
/* 0. On initialise les SOCKET en attendant la connexion et le rang du "manager" inactif */
|
/* 0. On initialise les SOCKET en attendant la connexion d'un client */
|
||||||
CLIENT_SOCKET = -1;
|
CLIENT_SOCKET = -1;
|
||||||
index = -1;
|
index = -1;
|
||||||
|
|
||||||
/* 1. On attends une connection UDP */
|
/* 1. On attends une connection UDP */
|
||||||
read = recvfrom(SOCKET, buffer, MAX_BUF_LEN, 0, (struct sockaddr*) &clientInfo, &len);
|
read = recvfrom(SOCKET, buffer, MAX_BUF_LEN, 0, (struct sockaddr*) &clientInfo, &len);
|
||||||
|
|
||||||
/* 2. Si erreur reception ou taille incorrecte */
|
/* 2. Si erreur reception ou taille incorrecte -> retour à l'écoute */
|
||||||
if( read != sizeof(char)+sizeof(unsigned short) ){
|
if( read != sizeof(char)+sizeof(unsigned short) ){
|
||||||
if( DEBUGMOD&BUF ) printf("[main][UDP_LISTEN_THREAD] read('%s') = %d bytes (expected: %d)\n", buffer, read, (int) (sizeof(char)+sizeof(unsigned short)) );
|
if( DEBUGMOD&BUF ) printf("[main][UDP_LISTEN_THREAD] read('%s') = %d bytes (expected: %d)\n", buffer, read, (int) (sizeof(char)+sizeof(unsigned short)) );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 3. On récupère l'adresse IP du client */
|
/* 3. On récupère l'adresse IP du client */
|
||||||
inet_ntop(AF_INET, &(clientInfo.sin_addr), client_ip, 20);
|
inet_ntop(AF_INET, &clientInfo.sin_addr, client_ip, INET_ADDRSTRLEN);
|
||||||
|
|
||||||
if( DEBUGMOD&SCK ) printf("[main][UDP_LISTEN_THREAD] '%s' connecté\n", client_ip);
|
if( DEBUGMOD&SCK ) printf("[main][UDP_LISTEN_THREAD] '%s' connecté\n", client_ip);
|
||||||
|
|
||||||
/* 4. On parse la requête*/
|
/* 4. On parse la requête */
|
||||||
memcpy(&request, buffer, sizeof(struct bind_header));
|
memcpy(&request.flags, buffer, sizeof(char));
|
||||||
|
memcpy(&request.port, buffer+sizeof(char), sizeof(unsigned short));
|
||||||
printf("[main][UDP_LISTEN_THREAD] received: {flag = %d; port = %d}\n", (int) request.flags, request.port);
|
printf("[main][UDP_LISTEN_THREAD] received: bind_header{flag = %d; port = %d}\n", (int) request.flags, request.port);
|
||||||
|
|
||||||
/* 5 Si on veut un port de communicatin */
|
/* 5 Si on veut un port de communicatin */
|
||||||
if( request.flags&BINDHEAD_PRT ){
|
if( request.flags&BINDHEAD_PRT ){
|
||||||
|
@ -242,20 +242,26 @@ void* LISTEN_UDP(){
|
||||||
request.flags -= BINDHEAD_PRT;
|
request.flags -= BINDHEAD_PRT;
|
||||||
|
|
||||||
// Si on a le port -> on le met dans la reponse
|
// Si on a le port -> on le met dans la reponse
|
||||||
}else
|
}else{
|
||||||
request.port = serverInfo.sin_port;
|
request.port = htons(serverInfo.sin_port);
|
||||||
|
if( DEBUGMOD&SCK ) printf("[main][UDP_LISTEN_THREAD] Comm. socket is on port %d\n", request.port);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( DEBUGMOD&SCK ) printf("[main][UDP_LISTEN_THREAD] { port: %d }\n", serverInfo.sin_port);
|
|
||||||
|
|
||||||
/* 8. On envoie la réponse */
|
/* 8. On envoie la réponse */
|
||||||
memcpy(buffer, &request, sizeof(struct bind_header));
|
bzero(buffer, MAX_BUF_LEN);
|
||||||
if( send(SOCKET, buffer, strlen(buffer), 0) < 0 ){
|
memcpy(buffer, &request.flags, sizeof(char));
|
||||||
|
memcpy(buffer+sizeof(char), &request.port, sizeof(unsigned short));
|
||||||
|
|
||||||
|
if( send(SOCKET, buffer, sizeof(char)+sizeof(unsigned short), 0) < 0 ){
|
||||||
printf("[main][UDP_LISTEN_THREAD] Impossible de répondre au client!\n");
|
printf("[main][UDP_LISTEN_THREAD] Impossible de répondre au client!\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("[main][UDP_LISTEN_THREAD] sent: bind_header{flag = %d; port = %d}\n", (int) request.flags, request.port);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# [1] Create service target (boot)
|
||||||
|
sudo ln -s $(pwd)/sgca /usr/sbin/sgca;
|
||||||
|
|
||||||
|
# [2] Create service unit
|
||||||
|
sudo ln -s $(pwd)/sgca.service /lib/systemd/system/sgca.service;
|
||||||
|
|
||||||
|
# [3] Enable service (optional if no [Install])
|
||||||
|
sudo systemctl enable sgca.service;
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
/home/xdrm-brackets/Desktop/git.xdrm.io/sysdis-project/central-manager/boot >> $1 2>&1;
|
|
@ -0,0 +1,10 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Systeme de Gestion du Controle Aerien
|
||||||
|
Requires=network.target
|
||||||
|
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=xdrm-brackets
|
||||||
|
Group=xdrm-brackets
|
||||||
|
ExecStart=/usr/sbin/sgca /var/log/sgca
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# [1] Remove service target (boot)
|
||||||
|
sudo rm /usr/sbin/sgca;
|
||||||
|
|
||||||
|
# [2] Disable service
|
||||||
|
sudo systemctl disable sgca.service;
|
||||||
|
|
||||||
|
# [3] Remove service unit
|
||||||
|
sudo rm /lib/systemd/system/sgca.service;
|
||||||
|
|
|
@ -23,7 +23,7 @@ int DROP_TCP_SERVER(const int pPort, int* pListenSock){
|
||||||
=======================================================*/
|
=======================================================*/
|
||||||
*pListenSock = socket(AF_INET, SOCK_STREAM, 0);
|
*pListenSock = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
|
||||||
if( DEBUGMOD&SCK ) printf("\t\tTCP SOCKET = %d\n", *pListenSock);
|
if( DEBUGMOD&SCK ) printf(" * /lib/tcp/server/drop_tcp_server SOCKET = %d\n", *pListenSock);
|
||||||
|
|
||||||
// si erreur
|
// si erreur
|
||||||
if( *pListenSock < 0 ) return -1;
|
if( *pListenSock < 0 ) return -1;
|
||||||
|
@ -44,7 +44,7 @@ int DROP_TCP_SERVER(const int pPort, int* pListenSock){
|
||||||
=======================================================*/
|
=======================================================*/
|
||||||
STATUS = bind(*pListenSock, (struct sockaddr*) &addr, sizeof(addr));
|
STATUS = bind(*pListenSock, (struct sockaddr*) &addr, sizeof(addr));
|
||||||
|
|
||||||
if( DEBUGMOD&SCK ) printf("\t\tTCP BIND = %d\n", STATUS);
|
if( DEBUGMOD&SCK ) printf(" * /lib/tcp/server/drop_tcp_server BIND = %d\n", STATUS);
|
||||||
|
|
||||||
// si erreur
|
// si erreur
|
||||||
if( STATUS < 0 ) return -1;
|
if( STATUS < 0 ) return -1;
|
||||||
|
@ -54,7 +54,7 @@ int DROP_TCP_SERVER(const int pPort, int* pListenSock){
|
||||||
=======================================================*/
|
=======================================================*/
|
||||||
STATUS = listen(*pListenSock, MAX_TCP_THR);
|
STATUS = listen(*pListenSock, MAX_TCP_THR);
|
||||||
|
|
||||||
if( DEBUGMOD&SCK ) printf("\t\tTCP LISTEN = %d\n", STATUS);
|
if( DEBUGMOD&SCK ) printf(" * /lib/tcp/server/drop_tcp_server LISTEN = %d\n", STATUS);
|
||||||
|
|
||||||
// si erreur
|
// si erreur
|
||||||
if( STATUS < 0 ) return -1;
|
if( STATUS < 0 ) return -1;
|
||||||
|
|
|
@ -23,7 +23,7 @@ int DROP_UDP_SERVER(const int pPort, int* pListenSock){
|
||||||
=======================================================*/
|
=======================================================*/
|
||||||
*pListenSock = socket(AF_INET, SOCK_DGRAM, 0);
|
*pListenSock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
|
||||||
if( DEBUGMOD&SCK ) printf("\t\tUDP SOCKET = %d\n", *pListenSock);
|
if( DEBUGMOD&SCK ) printf(" * /lib/udp/server/drop_udp_server SOCKET = %d\n", *pListenSock);
|
||||||
|
|
||||||
// si erreur
|
// si erreur
|
||||||
if( *pListenSock < 0 ) return -1;
|
if( *pListenSock < 0 ) return -1;
|
||||||
|
@ -44,7 +44,7 @@ int DROP_UDP_SERVER(const int pPort, int* pListenSock){
|
||||||
=======================================================*/
|
=======================================================*/
|
||||||
STATUS = bind(*pListenSock, (struct sockaddr*) &addr, sizeof(struct sockaddr_in));
|
STATUS = bind(*pListenSock, (struct sockaddr*) &addr, sizeof(struct sockaddr_in));
|
||||||
|
|
||||||
if( DEBUGMOD&SCK ) printf("\t\tUDP BIND = %d\n", STATUS);
|
if( DEBUGMOD&SCK ) printf(" * /lib/udp/server/drop_udp_server BIND = %d\n", STATUS);
|
||||||
|
|
||||||
// si erreur
|
// si erreur
|
||||||
if( STATUS < 0 ) return -1;
|
if( STATUS < 0 ) return -1;
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
../../../plane/plane.h
|
|
Loading…
Reference in New Issue