/*
* Modify this file to implement the interface specified in
* gfserver.h.
*/
typedef struct gfserver_t
{
unsigned short port;
int max_pending;
gfh_error_t (*handler)(gfcontext_t **, const char *, void *);
void *arg;
} gfserver_t;
typedef struct gfcontext_t
{
int client_socket_fd;
char *file_path;
} gfcontext_t;
void gfs_abort(gfcontext_t **ctx)
{
close((*ctx)->client_socket_fd);
free(*ctx);
*ctx = NULL;
}
gfserver_t *gfserver_create()
{
gfserver_t *gfs;
if ((gfs = (gfserver_t *)malloc(sizeof(gfserver_t))) == NULL)
{
perror("Cannot malloc gfsever_t");
exit(-1);
}
return gfs;
}
ssize_t gfs_send(gfcontext_t **ctx, const void *data, size_t len)
{
return send((*ctx)->client_socket_fd, data, len, 0);
}
ssize_t gfs_sendheader(gfcontext_t **ctx, gfstatus_t status, size_t file_len)
{
char header_buffer[BUFFER_SIZE];
char *status_str;
if (status == GF_FILE_NOT_FOUND)
{
status_str = "FILE_NOT_FOUND";
}
else if (status == GF_INVALID)
{
status_str = "INVALID";
}
else
{
status_str = "ERROR";
}
if (status == GF_OK)
This study source was downloaded by 100000850872992 from CourseHero.com on 02-11-2023 00:23:23 GMT -06:00
https://www.coursehero.com/file/71298649/gfserverc/