From a8a44d994137ab2f8884a36830007a84fd626ba4 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 28 Apr 2017 16:37:29 +0200 Subject: [PATCH] =?UTF-8?q?[DONE]=20Gestion=20envoi=20de=20donn=C3=A9es=20?= =?UTF-8?q?pour=20ctrlTerm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- central-manager/lib/local/handler.c | 30 ++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/central-manager/lib/local/handler.c b/central-manager/lib/local/handler.c index 98e206f..70d0cdc 100644 --- a/central-manager/lib/local/handler.c +++ b/central-manager/lib/local/handler.c @@ -307,12 +307,14 @@ void* manageCtrlTerm(void* THREADABLE_ARGS){ /* 1. Initialisation des variables */ struct sockaddr_in clientInfo; socklen_t len; - char loop = 1, update = 0; - int count, last, sent, nb; // compteurs d'envoi - int i, index = -1; // Compteurs globaux - int pindex; // index of the current plane - char buffer[MAX_BUF_LEN]; // Buffer d'envoi - struct term_req request; // Requête + size_t dataLen; + char loop = 1, update = 0, fbk = 0; + int count, last, sent, nb; // compteurs d'envoi + int i, index = -1; // Compteurs globaux + int pindex; // index of the current plane + char buffer[MAX_BUF_LEN]; // Buffer d'envoi + char* dataBuffer = malloc(1); + struct term_req request; // Requête /* 2. On récupère les arguments */ struct handler_arg* arg = THREADABLE_ARGS; @@ -371,7 +373,8 @@ void* manageCtrlTerm(void* THREADABLE_ARGS){ =========================================================*/ /* 1. On vérifie qu'il y a bien un update demandé (ou DATA) */ update = ( request.flags&TERMREQ_ALT || request.flags&TERMREQ_CAP || request.flags&TERMREQ_SPD ); - if( !( update || request.flags&TERMREQ_FBK ) ){ + fbk = request.flags&TERMREQ_FBK; + if( !( update || fbk ) ){ send(arg->socket, "0", sizeof(char)*2, 0); printf("{udp_cterm}{com}(%d) Invalid flag, passing\n", index); continue; @@ -435,20 +438,25 @@ void* manageCtrlTerm(void* THREADABLE_ARGS){ if( !(buffer[0]&TERMREQ_SPD) && request.flags&TERMREQ_SPD ) request.flags -= TERMREQ_SPD; - }else{ + } + + if( fbk ){ /* [5] Données des avions =========================================================*/ - /* 1. Si TERMREQ_FBK, on récupère les données */ - + /* 1. On récupère les données */ + getPlaneData(&dataBuffer, &dataLen, arg->sgca); + /* 2. Si update, on mixe les flags */ + if( update ) + dataBuffer[0] |= request.flags; } /* [6] Réponse au terminal =========================================================*/ - if( send(arg->socket, buffer, sizeof(char)*2, 0) < 0 ) + if( send(arg->socket, dataBuffer, dataLen+1, 0) < 0 ) printf("{udp_cterm}{com}(%d) Cannot answer to terminal\n", index);