/************************** * Network Common Depend. * *************************** * Designed & Developed by * * Adrien Marquès * * * *************************** * 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; }