struct packet {
	char type;
	uint32_t sequence;
	uint32_t length;
	uint8_t  *payload;
	struct sockaddr_in source;
	struct sockaddr_in destination;
	char *dot_addr;
};



int Socket(int domain, int type, int protocol);
int Bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
int Sendto(int s, void *buf, size_t len, int flags, 
		struct sockaddr *to, socklen_t tolen);
ssize_t Recvfrom(int s, void *buf, size_t len, int flags,
				struct sockaddr *from, socklen_t *fromlen);
FILE *Fopen(char *path, char *mode);
ssize_t Write(int fd, const void *buf, size_t count);

double get_time();

void error(char *message);
uint8_t* packet_to_buffer(struct packet *packet, unsigned int *packet_size);
struct packet* buffer_to_packet(uint8_t *);

void packet_send(int sockfd, struct packet* packet);

struct packet* packet_receive(int sockfd);

void print_packet(struct packet* packet);
void print_sockaddr(struct sockaddr_in* a);
