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