sysdis-project/central-manager/lib/network/common.c

68 lines
1.8 KiB
C
Raw Normal View History

2017-04-26 12:25:05 +00:00
/**************************
* Network Common Depend. *
***************************
* Designed & Developed by *
* Adrien Marquès *
* <xdrm-brackets> *
***************************
* doowap31@gmail.com *
**************************/
#include "common.h"
/* Retourne l'adresse IP du serveur (première interface excepté "lo")
*
* @history
* [0] Initialisation des variables
* [1] On récupère la liste des interfaces
* [2] Parcourt des interfaces
* 1. Si "lo" -> suivant
* 2. Si pas IPV4 -> suivant
* 3. Si ok, on retourne l'ip
* [3] Cas échéant -> aucun résultat (NULL)
*
*/
struct in_addr* GET_LOCAL_IP(){
/* [0] Initialisation des variables
=========================================================*/
struct ifaddrs *list; // list of interfaces
struct ifaddrs *it; // interface iterator
struct sockaddr_in *info; // interface info
struct in_addr *result; // ip trouvée
result = malloc( sizeof(struct in_addr) );
/* [1] On récupère la liste des interfaces
=========================================================*/
getifaddrs(&list);
/* [2] Parcourt des interfaces
=========================================================*/
for( it = list ; it ; it = it->ifa_next ){
/* 1. Si "lo" -> suivant */
if( strcmp(it->ifa_name, "lo") == 0 )
continue;
/* 2. Si pas IPV4 -> suivant */
if( it->ifa_addr->sa_family != AF_INET )
continue;
/* 3. Si ok, on retourne l'ip */
info = (struct sockaddr_in*) it->ifa_addr;
memcpy(result, &info->sin_addr, sizeof(struct in_addr));
freeifaddrs(list);
return result;
}
/* [3] Cas échéant -> aucun résultat
=========================================================*/
freeifaddrs(list);
return NULL;
}