Skip to content
This repository was archived by the owner on Sep 24, 2020. It is now read-only.

Commit 511bea8

Browse files
committed
all protocols initialized
1 parent 53f87cd commit 511bea8

File tree

9 files changed

+153
-20
lines changed

9 files changed

+153
-20
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ LIBRARIES = $(filter-out $(wildcard ./cmd/*/*.c), $(call rwildcard,./,*.c))
3636
TARGET = $(notdir $(patsubst %/,%,$(dir $(wildcard ./cmd/*/.))))
3737

3838
.PHONY: dep client run-client server run-server clean
39-
client: clean
39+
client:
4040
- $(MKDIR) ./bin
4141
- $(RM) ./bin/client
4242
- gcc -o ./bin/client ${LIBRARIES} ./cmd/client/main.c -std=c99 -lpthread -Wall -lnsl
4343
run-client: client
4444
- $(CLEAR)
4545
- ./bin/client ${SERVER_IP} ${SERVER_PORT}
4646

47-
server: clean
47+
server:
4848
- $(CLEAR)
4949
- $(MKDIR) ./bin
5050
- $(RM) ./bin/server

bin/client

144 Bytes
Binary file not shown.

pkg/client/client.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ void Loop(int socket) {
1111
if (show_menu) {
1212
printf("\n--------------------------------------------------\n");
1313
puts("Please select your prefer service:\n 1. Echo\n 2. "
14-
"Broadcast\n 3. "
15-
"Quit\nEnter your choice: ");
14+
"Download\n 3. Upload\n 4. Change Directory\n 5. List "
15+
"Directory\n "
16+
"6. Quit\nEnter your choice: ");
1617
show_menu = 0;
1718
}
1819

@@ -46,13 +47,14 @@ void Loop(int socket) {
4647
reply.size = payload_size;
4748
reply.body = recv_buffer;
4849

49-
fprintf(stderr,
50-
"MAGIC "
51-
"[0x%04hX] | PROTOCOL "
52-
"[0x%04hX] = [%C] | data : %s\n",
53-
reply.magic, reply.protocol, reply.protocol, reply.body);
5450
switch (reply.protocol) {
5551
case ECHO_REPLY: {
52+
fprintf(stderr,
53+
"MAGIC "
54+
"[0x%04hX] | PROTOCOL "
55+
"[0x%04hX] = [%C] | data : %s\n",
56+
reply.magic, reply.protocol, reply.protocol,
57+
reply.body);
5658
fprintf(stderr, "[ ECHO FROM SERVER ] ");
5759
break;
5860
}
@@ -84,23 +86,30 @@ void Loop(int socket) {
8486
}
8587
}
8688
if (bcmp(choice, "1", 1) && bcmp(choice, "2", 1) &&
87-
bcmp(choice, "3", 1)) {
89+
bcmp(choice, "3", 1) && bcmp(choice, "4", 1) &&
90+
bcmp(choice, "5", 1) && bcmp(choice, "6", 1)) {
8891
printf("Please enter a valid number from 1 to 3\n");
8992
continue;
9093
}
9194
system("clear");
9295

9396
waiting_for_choice = 0;
9497
// Quit-----------------------------------------------------------------------------------------
95-
if (!bcmp(choice, "3", 1)) {
98+
if (!bcmp(choice, "6", 1)) {
9699
printf("Your choice is to Quit the program\n");
100+
leave_request(socket);
97101
exit(0);
98102
}
99103
// Echo-----------------------------------------------------------------------------------------
100104
if (!bcmp(choice, "1", 1)) {
101105
printf("Your choice is Echo Protocol\n");
102106
EchoProtocolSendRequestToServer(socket);
103107
}
108+
// Echo-----------------------------------------------------------------------------------------
109+
if (!bcmp(choice, "2", 1)) {
110+
printf("Your choice is Download Protocol\n");
111+
DownloadProtocolSendRequestToServer(socket);
112+
}
104113
}
105114
printf("MSG WAS SENT SUCCEFULLY\n");
106115
}

pkg/handlers/change_directory.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include "handlers.h"
2+
void ChangeDirectoryProtocolSendRequestToServer(int socket) {
3+
printf("Enter Directory name For server TO change into\n");
4+
char input[MAX_BUFFER];
5+
fgets(input, MAX_BUFFER - 1, stdin);
6+
char *arr_ptr = &input[0];
7+
char *request = malloc(strlen(arr_ptr) + PROTOCOL_HEADER_LEN);
8+
int mesg_length = MarshallMessage(request, 0xC0DE, CHANGE_DIR_REQUEST, input);
9+
Message message;
10+
message.body = (char *)(request + PROTOCOL_HEADER_LEN);
11+
12+
if (send(socket, request, strlen(arr_ptr) + PROTOCOL_HEADER_LEN, 0) == -1)
13+
perror("write failed: ");
14+
fprintf(stderr,
15+
"[DEBUG] client : sending download reques for file %s to server\n",
16+
message.body);
17+
}
18+
void ChangeDirectoryProtocolServerHandler(int socket, Message message) {
19+
char *arr_ptr = &message.body[0];
20+
int payload_length = strlen(arr_ptr);
21+
char *reply = malloc(strlen(arr_ptr) + PROTOCOL_HEADER_LEN);
22+
int mesg_length = MarshallMessage(reply, 0xC0DE, message.protocol, arr_ptr);
23+
if (send(socket, reply, strlen(arr_ptr) + PROTOCOL_HEADER_LEN, 0) == -1)
24+
perror("write failed: ");
25+
fprintf(stderr, "[DEBUG] Echo Handler Server : Replying bac .... \n");
26+
}

pkg/handlers/download.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
2+
#include "handlers.h"
3+
4+
void DownloadProtocolSendRequestToServer(int socket) {
5+
printf("Enter File Name for download\n");
6+
char input[MAX_BUFFER];
7+
fgets(input, MAX_BUFFER - 1, stdin);
8+
char *arr_ptr = &input[0];
9+
char *request = malloc(strlen(arr_ptr) + PROTOCOL_HEADER_LEN);
10+
int mesg_length = MarshallMessage(request, 0xC0DE, DOWNLOAD_REQUEST, input);
11+
Message message;
12+
message.body = (char *)(request + PROTOCOL_HEADER_LEN);
13+
14+
if (send(socket, request, strlen(arr_ptr) + PROTOCOL_HEADER_LEN, 0) == -1)
15+
perror("write failed: ");
16+
fprintf(stderr,
17+
"[DEBUG] client : sending download reques for file %s to server\n",
18+
message.body);
19+
}
20+
void DownloadProtocolServerHandler(int socket, Message message) {
21+
char *arr_ptr = &message.body[0];
22+
int payload_length = strlen(arr_ptr);
23+
24+
char *reply = malloc(strlen(arr_ptr) + PROTOCOL_HEADER_LEN);
25+
int mesg_length = MarshallMessage(reply, 0xC0DE, FILE_REPLY, arr_ptr);
26+
if (send(socket, reply, strlen(arr_ptr) + PROTOCOL_HEADER_LEN, 0) == -1)
27+
perror("write failed: ");
28+
fprintf(stderr, "[DEBUG] Echo Handler Server : Replying bac .... \n");
29+
}

pkg/handlers/echo.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
#include "handlers.h"
2-
#include <stdio.h>
3-
#include <stdlib.h>
4-
#include <string.h>
52

63
void EchoProtocolSendRequestToServer(int socket) {
74
char input[MAX_BUFFER];

pkg/handlers/handlers.h

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,28 @@
1919
#include <stdint.h>
2020
#include <stdio.h>
2121
#include <stdlib.h>
22-
22+
#include <string.h>
2323
// https://www.ibm.com/support/knowledgecenter/en/SSVSD8_8.4.1/com.ibm.websphere.dtx.dsgnstud.doc/references/r_design_studio_intro_Hex_Decimal_and_Symbol_Values.htm
2424

2525
typedef enum {
2626
// 'A' in hex
2727
ECHO_REQUEST = 0x0042,
28-
// 'a' in hex
28+
// 'a' in hex
2929
ECHO_REPLY = 0x0062,
30-
30+
// 'D' in hex
31+
DOWNLOAD_REQUEST = 0x0044,
32+
// 'U' in hex
33+
UPLOAD_REQUEST = 0x0055,
34+
// 'R' in hex
35+
READY_REPLY = 0x0052,
36+
// 'F' in hex
37+
FILE_REPLY = 0x0046,
38+
// 'P' in hex
39+
CHANGE_DIR_REQUEST = 0x0050,
40+
// 'L' in hex
41+
LIST_DIR_REQUEST = 0x0050,
42+
// 'l' in hex
43+
LIST_DIR_REPLY = 0x006C,
3144
UNKNOWN_TYPE = 0xFFFF
3245
} MessageType;
3346
// RequestHandler - this is the main method
@@ -36,9 +49,14 @@ typedef enum {
3649
// handler
3750
void *ServerRequestHandler(void *arg);
3851

39-
// EchoProtocolSendRequestToServer - reads from stdin and
40-
// sends a message to server . it uses ECHO_REQUEST
41-
// as the protocol value
4252
void EchoProtocolSendRequestToServer(int socket);
4353
void EchoProtocolServerHandler(int socket, Message message);
54+
void DownloadProtocolSendRequestToServer(int socket);
55+
void DownloadProtocolServerHandler(int socket, Message message);
56+
void UploadProtocolSendRequestToServer(int socket);
57+
void UploadProtocolServerHandler(int socket, Message message);
58+
void ChangeDirectoryProtocolSendRequestToServer(int socket);
59+
void ChangeDirectoryProtocolServerHandler(int socket, Message message);
60+
void ListDirectoryProtocolSendRequestToServer(int socket);
61+
void ListDirectoryProtocolServerHandler(int socket, Message message);
4462
#endif

pkg/handlers/list_directory.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include "handlers.h"
2+
void ListDirectoryProtocolSendRequestToServer(int socket) {
3+
printf("Enter Directory name For server list\n");
4+
char input[MAX_BUFFER];
5+
fgets(input, MAX_BUFFER - 1, stdin);
6+
char *arr_ptr = &input[0];
7+
char *request = malloc(strlen(arr_ptr) + PROTOCOL_HEADER_LEN);
8+
int mesg_length = MarshallMessage(request, 0xC0DE, LIST_DIR_REQUEST, input);
9+
Message message;
10+
message.body = (char *)(request + PROTOCOL_HEADER_LEN);
11+
12+
if (send(socket, request, strlen(arr_ptr) + PROTOCOL_HEADER_LEN, 0) == -1)
13+
perror("write failed: ");
14+
fprintf(stderr,
15+
"[DEBUG] client : sending download reques for file %s to server\n",
16+
message.body);
17+
}
18+
void ListDirectoryProtocolServerHandler(int socket, Message message) {
19+
char *arr_ptr = &message.body[0];
20+
int payload_length = strlen(arr_ptr);
21+
22+
char *reply = malloc(strlen(arr_ptr) + PROTOCOL_HEADER_LEN);
23+
int mesg_length = MarshallMessage(reply, 0xC0DE, message.protocol, arr_ptr);
24+
if (send(socket, reply, strlen(arr_ptr) + PROTOCOL_HEADER_LEN, 0) == -1)
25+
perror("write failed: ");
26+
fprintf(stderr, "[DEBUG] Echo Handler Server : Replying bac .... \n");
27+
}

pkg/handlers/upload.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include "handlers.h"
2+
void UploadProtocolSendRequestToServer(int socket) {
3+
printf("Enter File name (path) to upload\n");
4+
char input[MAX_BUFFER];
5+
fgets(input, MAX_BUFFER - 1, stdin);
6+
char *arr_ptr = &input[0];
7+
char *request = malloc(strlen(arr_ptr) + PROTOCOL_HEADER_LEN);
8+
int mesg_length = MarshallMessage(request, 0xC0DE, DOWNLOAD_REQUEST, input);
9+
Message message;
10+
message.body = (char *)(request + PROTOCOL_HEADER_LEN);
11+
12+
if (send(socket, request, strlen(arr_ptr) + PROTOCOL_HEADER_LEN, 0) == -1)
13+
perror("write failed: ");
14+
fprintf(stderr,
15+
"[DEBUG] client : sending download reques for file %s to server\n",
16+
message.body);
17+
}
18+
19+
void UploadProtocolServerHandler(int socket, Message message) {
20+
char *arr_ptr = &message.body[0];
21+
int payload_length = strlen(arr_ptr);
22+
char *reply = malloc(strlen(arr_ptr) + PROTOCOL_HEADER_LEN);
23+
int mesg_length = MarshallMessage(reply, 0xC0DE, LIST_DIR_REPLY, arr_ptr);
24+
if (send(socket, reply, strlen(arr_ptr) + PROTOCOL_HEADER_LEN, 0) == -1)
25+
perror("write failed: ");
26+
fprintf(stderr, "[DEBUG] Echo Handler Server : Replying bac .... \n");
27+
}

0 commit comments

Comments
 (0)