Skip to content

Commit

Permalink
Configured server not to serve the special backup file, separated CRC…
Browse files Browse the repository at this point in the history
…32 functionality and finalized the fraction sorting.
  • Loading branch information
skelly committed Sep 17, 2024
1 parent 50984f9 commit 4a52020
Show file tree
Hide file tree
Showing 9 changed files with 95 additions and 100 deletions.
2 changes: 1 addition & 1 deletion client/Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
CC = gcc
FLAGS = -Wall -Wextra -Wshadow
SRC = src/main.c src/sock.c src/http.c src/utils.c src/fraction.c
SRC = src/main.c src/sock.c src/http.c src/utils.c src/fraction.c src/crc32.c
OUT = client

all:
Expand Down
16 changes: 16 additions & 0 deletions client/include/crc32.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#ifndef CRC32_H
#define CRC32_H

#include <stdint.h>
#include <stdlib.h>

extern const uint32_t crc32_tab[];
/*
* A function that calculates the CRC-32 based on the table above is
* given below for documentation purposes. An equivalent implementation
* of this function that's actually used in the kernel can be found
* in sys/libkern.h, where it can be inlined.
*/
uint32_t crc32(const void *buf, size_t size);

#endif // CRC32_H
1 change: 0 additions & 1 deletion client/include/sock.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,4 @@ int sock_connect(int sfd, struct addrinfo *res);
int create_socket(struct addrinfo *res);
int h_getaddrinfo(const char *ip, const char *port, struct addrinfo *hints,
struct addrinfo **res);
int h_getnameinfo(const struct addrinfo *ainfo, char buffer[], size_t buffer_size);
#endif // SOCK_H
60 changes: 0 additions & 60 deletions client/include/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,64 +36,4 @@ static inline char *get_path_from_url(const char *url) {
int split_fraction_links(char *data, char *data_arr[], int maxlines);
void print_hex(char *str);

const uint32_t crc32_tab[] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d};

/*
* A function that calculates the CRC-32 based on the table above is
* given below for documentation purposes. An equivalent implementation
* of this function that's actually used in the kernel can be found
* in sys/libkern.h, where it can be inlined.
*/
uint32_t crc32(const void *buf, size_t size) {
const uint8_t *p = buf;
uint32_t crc;

crc = ~0U;
while (size--)
crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
return crc ^ ~0U;
}
#endif // UTILS_H
56 changes: 56 additions & 0 deletions client/src/crc32.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#include "../include/crc32.h"

const uint32_t crc32_tab[] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d};

uint32_t crc32(const void *buf, size_t size) {
const uint8_t *p = (uint8_t *)buf;
uint32_t crc;

crc = ~0U;
while (size--)
crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
return crc ^ ~0U;
}
23 changes: 9 additions & 14 deletions client/src/fraction.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ int download_fraction(int sfd, char *url, fraction_t *fraction) {

// Parse the downloaded data into a fraction
if (fraction_parse(res.data, res.size, &downloaded_fraction) != 0) {
fprintf(stderr, "Failed to parse fraction from downloaded data\n");
http_free(&res); // Free HTTP response
return 1; // Return failure
}
Expand Down Expand Up @@ -91,6 +90,14 @@ int check_magic(uint32_t magic) {
return magic == MAGIC;
}

// Function used by qsort() to compare the index of our fractions
int compare_fractions(const void *a, const void *b) {
const fraction_t *frac_a = (const fraction_t *)a;
const fraction_t *frac_b = (const fraction_t *)b;

return frac_a->index - frac_b->index;
}

void print_fraction(fraction_t fraction) {
printf("Magic: 0x%08x\n", fraction.magic);
printf("Index: %u\n", fraction.index);
Expand All @@ -99,7 +106,7 @@ void print_fraction(fraction_t fraction) {
for (size_t i = 0; i < sizeof(fraction.iv); i++) {
printf("%02x ", (unsigned char)fraction.iv[i]);
}
printf("\n");
printf("\n\n");
}

void fraction_free(fraction_t *fraction) {
Expand All @@ -108,15 +115,3 @@ void fraction_free(fraction_t *fraction) {
fraction->index = 0;
fraction->crc = 0;
}

// Function used by qsort() to compare the index of our fractions
int compare_fractions(const void* a, const void* b) {
const fraction_t* frac_a = (const fraction_t*)a;
const fraction_t* frac_b = (const fraction_t*)b;

if (frac_a->index < frac_b->index) {
return -1;
} else {
return 1;
}
}
21 changes: 10 additions & 11 deletions client/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
int main(void) {
struct addrinfo hints, *ainfo;
int sfd; // socket file descriptor
char hostname[NI_MAXHOST];
http_res_t http_fraction_res, http_post_res;

/* Setup socket and initiate connection with the server */
Expand All @@ -25,13 +24,8 @@ int main(void) {
return EXIT_FAILURE;
}

if (h_getnameinfo(ainfo, hostname, sizeof(hostname)) != 0) {
freeaddrinfo(ainfo);
fprintf(stderr, "Failed to get server hostname\n");
return EXIT_FAILURE;
}

printf("Connecting to: %s\n", hostname);
printf("Connecting to: %s:%s\n", SERVER_IP, SERVER_PORT);
sfd = create_sock_and_conn(ainfo);
if (sfd == -1) {
fprintf(stderr, "Failed to create socket and connect\n");
Expand Down Expand Up @@ -68,10 +62,19 @@ int main(void) {

// Storing the fractions in a array
fraction_t *fractions = malloc(lines_read * sizeof(fraction_t));
if (fractions == NULL) {
fprintf(stderr, "Failed to malloc memory for fractions\n");
}

for (int i=0; i<lines_read; i++) {
if (download_fraction(sfd, fraction_links[i], &fractions[i]) != 0) {
fprintf(stderr, "Failed to parse fraction\n");
}
}

// Sort the fractions based on index
qsort(fractions, lines_read, sizeof(fraction_t), compare_fractions);
for (int i = 0; i < lines_read; i++) {
print_fraction(fractions[i]);
}

Expand All @@ -89,12 +92,8 @@ int main(void) {
http_free(&http_fraction_res);
http_free(&http_post_res);

// Sort the fractions based on index
qsort(fractions, lines_read, sizeof(fraction_t), compare_fractions);

// Free fractions and links
for (int i = 0; i < lines_read; i++) {

free(fraction_links[i]);
fraction_free(&fractions[i]);
}
Expand Down
11 changes: 0 additions & 11 deletions client/src/sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,6 @@ int h_getaddrinfo(const char *ip, const char *port, struct addrinfo *hints,
return 0;
}


int h_getnameinfo(const struct addrinfo *ainfo, char buffer[], size_t buffer_size) {
int res;
res = getnameinfo(ainfo->ai_addr, ainfo->ai_addrlen, buffer, buffer_size, NULL, 0, 0);
if (res != 0) {
fprintf(stderr, "Error: getnameinfo: %s\n", gai_strerror(res));
return res;
}
return 0;
}

/* Create a socket and return the socket file descriptor */
int create_socket(struct addrinfo *ainfo) {
int sfd;
Expand Down
5 changes: 3 additions & 2 deletions server/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,9 @@ def list_directory(self, path):
server_addr = self.server.server_address
host, port = server_addr
for name in file_list:
display_name = f"http://{host}:{port}{self.path}{name}"
contents.append(html.escape(display_name, quote=False))
if name != ".erebos_bckp":
display_name = f"http://{host}:{port}{self.path}{name}"
contents.append(html.escape(display_name, quote=False))

encoded = "\n".join(contents).encode(enc, "surrogateescape")
f = io.BytesIO()
Expand Down

0 comments on commit 4a52020

Please sign in to comment.