Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
Cs283
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Joey Le
Cs283
Commits
cb5b79e7
Commit
cb5b79e7
authored
2 months ago
by
Joey Le
Browse files
Options
Downloads
Patches
Plain Diff
Removed a bunch of debug lines
probably will submit this now
parent
0262dc9a
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
Assignment-06/starter/rsh_cli.c
+6
-17
6 additions, 17 deletions
Assignment-06/starter/rsh_cli.c
Assignment-06/starter/rsh_server.c
+3
-23
3 additions, 23 deletions
Assignment-06/starter/rsh_server.c
Assignment-06/starter/rshlib.h
+1
-1
1 addition, 1 deletion
Assignment-06/starter/rshlib.h
with
10 additions
and
41 deletions
Assignment-06/starter/rsh_cli.c
+
6
−
17
View file @
cb5b79e7
...
...
@@ -99,10 +99,9 @@ int exec_remote_cmd_loop(char *address, int port) {
ssize_t
recv_bytes
;
int
is_eof
=
0
;
// Debug
: S
tarting the client
// Debug
for s
tarting the client
printf
(
"CLIENT: Starting client. Connecting to server at %s:%d...
\n
"
,
address
,
port
);
// Connect to the server
cli_socket
=
start_client
(
address
,
port
);
if
(
cli_socket
<
0
)
{
perror
(
"CLIENT: Failed to start client"
);
...
...
@@ -111,25 +110,22 @@ int exec_remote_cmd_loop(char *address, int port) {
printf
(
"CLIENT: Successfully connected to server. Socket: %d
\n
"
,
cli_socket
);
while
(
1
)
{
// Prompt the user for input
printf
(
"rsh> "
);
if
(
!
fgets
(
cmd_buff
,
RDSH_COMM_BUFF_SZ
,
stdin
))
{
printf
(
"CLIENT: Input error or EOF detected. Exiting...
\n
"
);
break
;
// Exit on input error or EOF
break
;
}
// Remove the newline character from the command
size_t
cmd_len
=
strlen
(
cmd_buff
);
if
(
cmd_len
>
0
&&
cmd_buff
[
cmd_len
-
1
]
==
'\n'
)
{
cmd_buff
[
cmd_len
-
1
]
=
'\0'
;
}
// Debug: Print the command received from the user
//Debug printing received command
printf
(
"CLIENT: Command received: %s
\n
"
,
cmd_buff
);
// Handle local commands (e.g., cd, exit)
if
(
strncmp
(
cmd_buff
,
"cd"
,
2
)
==
0
)
{
// Debug: Handling local 'cd' command
printf
(
"CLIENT: Handling local 'cd' command...
\n
"
);
cmd_buff_t
cmd
;
...
...
@@ -149,15 +145,12 @@ int exec_remote_cmd_loop(char *address, int port) {
free
(
cmd
.
_cmd_buffer
);
continue
;
}
else
if
(
strncmp
(
cmd_buff
,
"exit"
,
4
)
==
0
)
{
// Debug: Handling 'exit' command
printf
(
"CLIENT: Handling 'exit' command. Exiting...
\n
"
);
break
;
// Exit the remote shell
break
;
}
// Debug: Sending command to the server
printf
(
"CLIENT: Sending command to server: %s
\n
"
,
cmd_buff
);
// Send the command to the server
ssize_t
sent_bytes
=
send
(
cli_socket
,
cmd_buff
,
strlen
(
cmd_buff
),
0
);
if
(
sent_bytes
<
0
)
{
perror
(
"CLIENT: Failed to send command"
);
...
...
@@ -165,17 +158,14 @@ int exec_remote_cmd_loop(char *address, int port) {
}
printf
(
"CLIENT: Command sent successfully. Bytes sent: %zd
\n
"
,
sent_bytes
);
// Debug: Receiving response from the server
printf
(
"CLIENT: Waiting for server response...
\n
"
);
// Receive the server's response
while
((
recv_bytes
=
recv
(
cli_socket
,
rsp_buff
,
RDSH_COMM_BUFF_SZ
,
0
))
>
0
)
{
printf
(
"CLIENT: Received %zd bytes from server: %.*s
\n
"
,
recv_bytes
,
(
int
)
recv_bytes
,
rsp_buff
);
// Check if the last byte is EOF
if
(
rsp_buff
[
recv_bytes
-
1
]
==
RDSH_EOF_CHAR
)
{
printf
(
"CLIENT: EOF detected. End of server response.
\n
"
);
is_eof
=
1
;
// Mark EOF
is_eof
=
1
;
break
;
}
}
...
...
@@ -222,7 +212,6 @@ int start_client(char *server_ip, int port){
int
cli_socket
;
int
ret
;
// TODO set up cli_socket
cli_socket
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
if
(
cli_socket
<
0
)
{
perror
(
"socket"
);
...
...
This diff is collapsed.
Click to expand it.
Assignment-06/starter/rsh_server.c
+
3
−
23
View file @
cb5b79e7
...
...
@@ -58,18 +58,15 @@ int start_server(char *ifaces, int port, int is_threaded) {
svr_socket
=
boot_server
(
ifaces
,
port
);
if
(
svr_socket
<
0
)
{
int
err_code
=
svr_socket
;
printf
(
"SERVER: Failed to boot server.
Error code: %d
\n
"
,
err_code
);
printf
(
"SERVER: Failed to boot server.
"
);
return
err_code
;
}
printf
(
"SERVER: Server booted successfully. Socket: %d
\n
"
,
svr_socket
);
rc
=
process_cli_requests
(
svr_socket
);
printf
(
"SERVER: Stopping server...
\n
"
);
stop_server
(
svr_socket
);
printf
(
"SERVER: Server stopped. Return code: %d
\n
"
,
rc
);
return
rc
;
}
...
...
@@ -86,7 +83,6 @@ int start_server(char *ifaces, int port, int is_threaded) {
*/
int
stop_server
(
int
svr_socket
)
{
printf
(
"SERVER: Closing server socket: %d
\n
"
,
svr_socket
);
return
close
(
svr_socket
);
}
...
...
@@ -136,28 +132,23 @@ int boot_server(char *ifaces, int port) {
perror
(
"SERVER: socket failed"
);
return
ERR_RDSH_SERVER
;
}
printf
(
"SERVER: Socket created. Socket: %d
\n
"
,
svr_socket
);
int
enable
=
1
;
if
(
setsockopt
(
svr_socket
,
SOL_SOCKET
,
SO_REUSEADDR
,
&
enable
,
sizeof
(
int
))
<
0
)
{
perror
(
"SERVER: setsockopt failed"
);
close
(
svr_socket
);
return
ERR_RDSH_SERVER
;
}
printf
(
"SERVER: Socket options set.
\n
"
);
addr
.
sin_family
=
AF_INET
;
if
(
inet_pton
(
AF_INET
,
ifaces
,
&
addr
.
sin_addr
)
<=
0
)
{
perror
(
"SERVER: inet_pton failed"
);
//
perror("SERVER: inet_pton failed");
close
(
svr_socket
);
return
ERR_RDSH_SERVER
;
}
addr
.
sin_port
=
htons
(
port
);
printf
(
"SERVER: Address structure configured.
\n
"
);
ret
=
bind
(
svr_socket
,
(
const
struct
sockaddr
*
)
&
addr
,
sizeof
(
struct
sockaddr_in
));
if
(
ret
==
-
1
)
{
perror
(
"SERVER: bind failed"
);
close
(
svr_socket
);
return
ERR_RDSH_SERVER
;
}
...
...
@@ -498,9 +489,8 @@ int send_message_string(int cli_socket, char *buff) {
int
pids_st
[
clist
->
num
];
// Array to store process statuses
int
exit_code
;
printf
(
"SERVER: Executing pipeline with %d commands.
\n
"
,
clist
->
num
);
//
printf("SERVER: Executing pipeline with %d commands.\n", clist->num);
// Create all necessary pipes
for
(
int
i
=
0
;
i
<
clist
->
num
-
1
;
i
++
)
{
if
(
pipe
(
pipes
[
i
])
==
-
1
)
{
perror
(
"SERVER: pipe failed"
);
...
...
@@ -520,7 +510,6 @@ int send_message_string(int cli_socket, char *buff) {
if
(
pids
[
i
]
==
0
)
{
// Child process
printf
(
"SERVER: Child process %d executing command: %s
\n
"
,
i
,
clist
->
commands
[
i
].
argv
[
0
]);
// Redirect input for the first command
if
(
i
==
0
)
{
if
(
dup2
(
cli_sock
,
STDIN_FILENO
)
==
-
1
)
{
perror
(
"SERVER: dup2 stdin failed"
);
...
...
@@ -534,9 +523,7 @@ int send_message_string(int cli_socket, char *buff) {
}
}
// Redirect output for the last command
if
(
i
==
clist
->
num
-
1
)
{
// Redirect stdout and stderr to the client socket
if
(
dup2
(
cli_sock
,
STDOUT_FILENO
)
==
-
1
)
{
perror
(
"SERVER: dup2 stdout failed"
);
exit
(
EXIT_FAILURE
);
...
...
@@ -546,14 +533,12 @@ int send_message_string(int cli_socket, char *buff) {
exit
(
EXIT_FAILURE
);
}
}
else
{
// Redirect stdout to the write end of the current pipe
if
(
dup2
(
pipes
[
i
][
1
],
STDOUT_FILENO
)
==
-
1
)
{
perror
(
"SERVER: dup2 stdout failed"
);
exit
(
EXIT_FAILURE
);
}
}
// Close all pipe ends in the child process
for
(
int
j
=
0
;
j
<
clist
->
num
-
1
;
j
++
)
{
close
(
pipes
[
j
][
0
]);
close
(
pipes
[
j
][
1
]);
...
...
@@ -566,20 +551,15 @@ int send_message_string(int cli_socket, char *buff) {
}
}
// Parent process: close all pipe ends
for
(
int
i
=
0
;
i
<
clist
->
num
-
1
;
i
++
)
{
close
(
pipes
[
i
][
0
]);
close
(
pipes
[
i
][
1
]);
}
// Wait for all children
printf
(
"SERVER: Parent process waiting for children...
\n
"
);
for
(
int
i
=
0
;
i
<
clist
->
num
;
i
++
)
{
waitpid
(
pids
[
i
],
&
pids_st
[
i
],
0
);
printf
(
"SERVER: Child process %d exited with status: %d
\n
"
,
i
,
WEXITSTATUS
(
pids_st
[
i
]));
}
// Determine the exit code
exit_code
=
WEXITSTATUS
(
pids_st
[
clist
->
num
-
1
]);
for
(
int
i
=
0
;
i
<
clist
->
num
;
i
++
)
{
if
(
WEXITSTATUS
(
pids_st
[
i
])
==
EXIT_SC
)
{
...
...
This diff is collapsed.
Click to expand it.
Assignment-06/starter/rshlib.h
+
1
−
1
View file @
cb5b79e7
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment