Beispiel #1
0
int nombreElements(llist liste)
{
    /* Si la liste est vide, il y a 0 élément */
    if(liste == NULL)
        return 0;

    /* Sinon, il y a un élément (celui que l'on est en train de traiter)
    plus le nombre d'éléments contenus dans le reste de la liste */
    return nombreElements(liste->nxt)+1;
}
Beispiel #2
0
void* thread_reception_data(void* data)
{
	//se mettre en ecoute sur 0.0.0.0
	struct sockaddr_in sin;
	int sock = socket(AF_INET, SOCK_DGRAM, 0), sock_envoie;
	int tmp, taille, ip;
	short port;
	LargePaquet paquet;
	if(sock == SOCKET_ERROR)
	{
		printf("[-] Erreur socket\n");
		return NULL;
	}

	sin.sin_addr.s_addr = inet_addr("0.0.0.0");
	sin.sin_family = AF_INET;
	sin.sin_port = htons(PORT_UDP);

	tmp = bind(sock, (struct sockaddr*)&sin, sizeof(sin)); //On associe l'adresse au socket
	if(tmp == SOCKET_ERROR)
	{
		perror("[-] bind");
		return;
	}
	//On ecoute en permanence
	while(1)
	{
		taille = sizeof(sin);
		tmp = recvfrom(sock, (char*) &paquet, sizeof(Paquet), 0, (struct sockaddr*)&sin, &taille);
		if(tmp == SOCKET_ERROR)
		{
			perror("[-] recvfrom");
			continue;
		}

		ip = htonl(sin.sin_addr.s_addr);
		port = paquet.paquet.port_usage;
		//On check l'action et on fait une action
		switch(paquet.paquet.action)
		{
			case ASK_CONNECTION:
				printf("[i] reception ASK_CONNECTION\n");
				traitement_ASK_CONNECTION(ip, port);
				break;
			case ANS_CONNECTION_NO:
				printf("[i] reception ANS_CONNECTION_NO\n");
				traitement_ANS_CONNECTION_NO(ip);
				break;
			case ANS_CONNECTION_YES:
				printf("[i] reception ANS_CONNECTION_YES\n");
				traitement_ANS_CONNECTION_YES(ip, port);
				break;
			case VAL_CONNECTION:
				printf("[i] reception VAL_CONNECTION\n");
				traitement_VAL_CONNECTION(ip);
				break;
			case KEEP_CONTACTE:
				printf("[i] reception KEEP_CONTACTE\n");
				traitement_KEEP_CONTACTE(ip);
				break;
			case ASK_MAJ:
				printf("[i] reception ASK_MAJ\n");
				traitement_ASK_MAJ(ip, port);
				break;
			case ANS_MAJ_NO:
				printf("[i] reception ANS_MAJ_NO\n");
				traitement_ANS_MAJ_NO();
				break;
			case ANS_MAJ_YES:
				printf("[i] reception ANS_MAJ_YES\n");
				traitement_ANS_MAJ_YES(ip, port);
				break;
			case GIVE_CONTACTE:
				printf("[i] reception GIVE_CONTACTE\n");
				traitement_GIVE_CONTACTE(paquet);
				break;
		}
		printf("[i] Serveur: %d\tClient: %d\n", nombreElements(liste_serveur), nombreElements(liste_client));
		//verifie la version
		if(paquet.paquet.version > VERSION)
		{
			printf("[+] La version %d semble etre disponible\n", paquet.paquet.version);
			demander_maj(ip, port);
		}
	} 

	return NULL;
}