Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions include/box_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@ int insert_into_box(box_entry_t *entries, char* path, time_t global_time, time_t
box_entry_t* read_box(char *path);
int write_box(char *path, box_entry_t *entries);
void print_box(box_entry_t* head);
box_entry_t* find_in_box(box_entry_t *box_entry, char *name);
void create_or_update(box_entry_t *box_entry, char *name, size_t size, time_t local_time, time_t server_time);

#endif
4 changes: 3 additions & 1 deletion include/communication_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ typedef struct BoxEntry {
} box_entry_t;


void send_file(int socket, const char* path, message_type_t type);
void send_file(int socket, const char* path, message_type_t type, time_t mod_time);
message_info_t receive_message_info(int socket);
void receive_file(int socket, const char* new_path, size_t size);
void send_message_info(int socket, message_type_t type, const char* path, size_t size, time_t mod_time);
message_info_t receive_message_info(int socket);

#endif
2 changes: 1 addition & 1 deletion include/server.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ server_t get_server(int socket);
void register_client(server_t* server);
void add_client(int socket, int* client_array, int* client_num);
void handle_file_request(int socket, message_info_t info);
void handle_client_message(int socket);
void handle_client_message(int socket, server_t* server);

#endif
44 changes: 42 additions & 2 deletions src/box_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,47 @@ int write_box(char *path, box_entry_t *entries)
void print_box(box_entry_t* head)
{
while(head->next != NULL) {
printf("%s\n", head->path);
printf("%s %d %d\n", head->path, head->global_timestamp, head->local_timestamp);
head = head->next;
}
}
}


box_entry_t* find_in_box(box_entry_t *box_entry, char *name)
{
box_entry_t *it;

it = box_entry;

while(it->next != NULL) {
if(strcmp(it->path, name) == 0) {
return it;
}
it = it->next;
}

return NULL;
}


void create_or_update(box_entry_t *box_entry, char *name, size_t size, time_t local_time, time_t server_time)
{
box_entry_t *entry;

entry = find_in_box(box_entry, name);


if(entry == NULL) {
insert_into_box(box_entry, name, server_time, local_time, -1);
} else {
strcpy(entry->path, name);

if(local_time != 0) {
entry->local_timestamp = local_time;
}

if(server_time != 0) {
entry->global_timestamp = server_time;
}
}
}
Loading