move icmp packet prepartion to file icmp.c

This commit is contained in:
2025-04-24 22:54:03 +02:00
parent 01df0d6cb0
commit e622d9d175
4 changed files with 79 additions and 61 deletions

View File

@ -6,70 +6,12 @@
/* By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/24 00:03:56 by tomoron #+# #+# */
/* Updated: 2025/04/24 22:45:16 by tomoron ### ########.fr */
/* Updated: 2025/04/24 22:50:08 by tomoron ### ########.fr */
/* */
/* ************************************************************************** */
#include "includes/ft_ping.h"
#include <fcntl.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <byteswap.h>
void set_packet_data(uint8_t *packet_data)
{
int i;
i = 0;
while(i < PACKET_DATA_LENGTH)
{
packet_data[i] = i;
i++;
}
}
uint16_t calc_checksum(void *ptr, size_t len)
{
uint32_t res;
uint16_t *data;
data = ptr;
res = 0;
while (len > 1)
{
res += *data;
data++;
len -= 2;
}
if (len)
res += *(uint8_t *)data;
while (res >> 16) {
res = (res & 0xFFFF) + (res >> 16);
}
return(htons(~res));
}
t_icmp_echo prepare_icmp_echo(uint16_t sequence, uint16_t identifier)
{
t_icmp_echo packet;
packet.type = 8;
packet.code = 0;
packet.identifier = htons(identifier);
packet.sequence = htons(sequence);
set_packet_data(packet.data);
gettimeofday(&packet.time, 0);
packet.time.tv_sec = bswap_64(packet.time.tv_sec);
packet.time.tv_usec = bswap_64(packet.time.tv_usec);
packet.checksum = 0;
packet.checksum = calc_checksum(&packet, sizeof(t_icmp_echo));
return(packet);
}
int main(int argc, char **argv)
{