From 89c20c9599dd3aade2c057b436f2a10601efd14b Mon Sep 17 00:00:00 2001 From: Vanshika Mohan Bongade <vb525@drexel.edu> Date: Fri, 28 Feb 2025 18:17:10 +0000 Subject: [PATCH] Upload New File --- WEEK-8/rsh_cli.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 WEEK-8/rsh_cli.c diff --git a/WEEK-8/rsh_cli.c b/WEEK-8/rsh_cli.c new file mode 100644 index 0000000..2f6b488 --- /dev/null +++ b/WEEK-8/rsh_cli.c @@ -0,0 +1,74 @@ + +#include "rshlib.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/socket.h> +#include <arpa/inet.h> + + +int start_client(char *server_ip, int port) { + int sock; + struct sockaddr_in server; + + // Create socket + sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock == -1) { + perror("[ERROR] Could not create socket"); + return ERR_RDSH_CLIENT; + } + + server.sin_addr.s_addr = inet_addr(server_ip); + server.sin_family = AF_INET; + server.sin_port = htons(port); + + // Connect to server + if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) { + perror("[ERROR] Connection failed"); + return ERR_RDSH_CLIENT; + } + + printf("[DEBUG] Connected to server at %s:%d\n", server_ip, port); + return sock; +} + +/** + * Main loop for remote command execution. + */ +int exec_remote_cmd_loop(char *address, int port) { + int sock = start_client(address, port); + if (sock < 0) return sock; + + char cmd[RDSH_COMM_BUFF_SZ]; + while (1) { + printf("dsh4> "); + if (fgets(cmd, sizeof(cmd), stdin) == NULL) { + printf("\n"); + break; + } + cmd[strcspn(cmd, "\n")] = '\0'; + + if (strcmp(cmd, "exit") == 0) { + break; + } + + // Send command to server + if (send(sock, cmd, strlen(cmd) + 1, 0) < 0) { + perror("[ERROR] Send failed"); + break; + } + + // Receive output + char response[RDSH_COMM_BUFF_SZ]; + int recv_size; + while ((recv_size = recv(sock, response, sizeof(response), 0)) > 0) { + response[recv_size] = '\0'; + printf("%s", response); + if (response[recv_size - 1] == RDSH_EOF_CHAR) break; + } + } + + close(sock); + return OK; +} -- GitLab