J’écris un petit programme POSIX et je dois calculer la sum de contrôle d’un segment TCP. J’aimerais utiliser une fonction existante afin d’éviter d’en écrire un moi-même.
Quelque chose comme (pseudocode):
char *data = .... u16_integer = computeChecksum(data);
J’ai cherché sur le web mais je n’ai pas trouvé la bonne réponse, aucune suggestion?
Ici, c’est pris plus ou moins directement de la RFC:
uint16_t ip_calc_csum(int len, uint16_t * ptr) { int sum = 0; unsigned short answer = 0; unsigned short *w = ptr; int nleft = len; while (nleft > 1) { sum += *w++; nleft -= 2; } sum = (sum >> 16) + (sum & 0xFFFF); sum += (sum >> 16); answer = ~sum; return (answer); }