Select Git revision
-
Vanshika Mohan Bongade authoredVanshika Mohan Bongade authored
rsh_cli.c 1.77 KiB
#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;
}