aboutsummaryrefslogtreecommitdiff
path: root/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'server.c')
-rw-r--r--server.c62
1 files changed, 2 insertions, 60 deletions
diff --git a/server.c b/server.c
index c2994fb..1464091 100644
--- a/server.c
+++ b/server.c
@@ -1,5 +1,7 @@
/* The server recieves connections and passes files to the clients
*/
+#include <server-connection.h>
+
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
@@ -14,9 +16,6 @@
#include <sds/sds.h>
#include <util.h>
-#define username 0
-#define path_root 1
-#define path_error 2
sds constructFilePath(const sds root, const char* file) {
sds path = sdsdup(root);
@@ -28,63 +27,6 @@ sds constructFilePath(const sds root, const char* file) {
return path;
}
-void on_connection(const char* client, const int fd_client, sds **vhosts, const int vhostsc) {
- printf("[%s@%d] Connected successfully!\n", client, fd_client);
-
- /* Get address request */
- char address[256];
- read(fd_client, address, 256);
- printf("[%s@%d] Requested %s\n", client, fd_client, address);
-
- /* Does vhosts contain an address with the username? */
- int usernameLen = strchr(address, '@') - address;
-
- const sds *vhost = NULL;
- for (int i = 0; i < vhostsc; i++) {
- if (strncmp(vhosts[i][username], address, usernameLen) == 0) {
- vhost = *vhosts + i;
- break;
- }
- }
-
- if (vhost == NULL) {
- fprintf(stderr, "[%s@%d] Unknown username in address %s\n", client, fd_client, address);
- return;
- }
-
- /* Try to open the requested file or the error file */
- sds filePath = constructFilePath(vhost[path_root], address + usernameLen + 1);
-
- int fd = open(filePath, O_RDONLY);
- if (fd < 0) {
- fprintf(stderr, "[%s@%d] Error opening %s\n", client, fd_client, filePath);
-
- sdsfree(filePath);
- filePath = constructFilePath(vhost[path_root], vhost[path_error]);
- fd = open(filePath, O_RDONLY);
- if (fd < 0) {
- fprintf(stderr, "[%s@%d] Error opening %s\n", client, fd_client, filePath);
- sdsfree(filePath);
- return;
- }
- }
-
- /* Send the file to the client */
- printf("[%s@%d] Serving %s\n", client, fd_client, filePath);
- sdsfree(filePath);
-
- char buff[256];
- memset(buff, 0, sizeof(buff));
- while (read(fd, buff, 256)) {
- write(fd_client, buff, strlen(buff));
- memset(buff, 0, sizeof(buff));
- }
-
- /* Finalize */
- close(fd);
- printf("[%s@%d] Served!\n", client, fd_client);
-}
-
void freeVhosts(sds **vhosts, int argc) {
for (int i = 1; i < argc; i++) {