mirror of
https://github.com/ChronosX88/netsukuku.git
synced 2024-11-22 10:12:18 +00:00
ntk-console: Cleanup commands, accept command packets
* console commands now read as standardized struct packets * responses are still character arrays
This commit is contained in:
parent
84e377eff5
commit
eb12395dcb
@ -22,6 +22,7 @@
|
|||||||
#define CONSOLE_SOCKET_PATH "/tmp/ntk-console"
|
#define CONSOLE_SOCKET_PATH "/tmp/ntk-console"
|
||||||
#define CONSOLE_VERSION_MAJOR 0
|
#define CONSOLE_VERSION_MAJOR 0
|
||||||
#define CONSOLE_VERSION_MINOR 3
|
#define CONSOLE_VERSION_MINOR 3
|
||||||
|
#define CONSOLE_ARGV_LENGTH 250
|
||||||
#define CONSOLE_BUFFER_LENGTH 250
|
#define CONSOLE_BUFFER_LENGTH 250
|
||||||
|
|
||||||
#ifndef TRUE
|
#ifndef TRUE
|
||||||
@ -48,4 +49,12 @@ typedef enum {
|
|||||||
} command_t;
|
} command_t;
|
||||||
|
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct {
|
||||||
|
command_t command;
|
||||||
|
char* argv[CONSOLE_ARGV_LENGTH];
|
||||||
|
} cmd_packet_t;
|
||||||
|
#pragma pack(0)
|
||||||
|
|
||||||
|
|
||||||
#endif /* CONSOLE_H */
|
#endif /* CONSOLE_H */
|
||||||
|
@ -91,82 +91,64 @@ send_response(int session_fd, char response[CONSOLE_BUFFER_LENGTH], ...)
|
|||||||
* to data from ntkd structures such as: me
|
* to data from ntkd structures such as: me
|
||||||
* into a response for the ntk console client. */
|
* into a response for the ntk console client. */
|
||||||
|
|
||||||
static int
|
static void
|
||||||
request_processing(int session_fd, char unprocessed_request[CONSOLE_BUFFER_LENGTH])
|
request_processing(int session_fd, cmd_packet_t packet)
|
||||||
{
|
{
|
||||||
if(strncmp(unprocessed_request,"uptime", (int)strlen(unprocessed_request)) == 0)
|
switch (packet.command) {
|
||||||
|
case COMMAND_UPTIME:
|
||||||
send_response(session_fd, (char)time(0)-me.uptime);
|
send_response(session_fd, (char)time(0)-me.uptime);
|
||||||
|
break;
|
||||||
else if(strncmp(unprocessed_request,"version", (int)strlen(unprocessed_request)) == 0)
|
case COMMAND_VERSION:
|
||||||
send_response(session_fd, VERSION_STR);
|
send_response(session_fd, VERSION_STR);
|
||||||
|
break;
|
||||||
else if(strncmp(unprocessed_request,"inet_connected", (int)strlen(unprocessed_request)) == 0)
|
case COMMAND_CURIFS:
|
||||||
send_response(session_fd, (char)me.inet_connected);
|
|
||||||
|
|
||||||
else if(strncmp(unprocessed_request,"cur_ifs", (int)strlen(unprocessed_request)) == 0)
|
|
||||||
send_response(session_fd, (char)me.cur_ifs);
|
send_response(session_fd, (char)me.cur_ifs);
|
||||||
|
break;
|
||||||
else if(strncmp(unprocessed_request,"cur_ifs_n", (int)strlen(unprocessed_request)) == 0)
|
case COMMAND_CURIFSCT:
|
||||||
send_response(session_fd, (char)me.cur_ifs_n);
|
send_response(session_fd, (char)me.cur_ifs_n);
|
||||||
|
break;
|
||||||
else if(strncmp(unprocessed_request,"cur_qspn_id", (int)strlen(unprocessed_request)) == 0)
|
case COMMAND_INETCONN:
|
||||||
|
send_response(session_fd, (char)me.inet_connected);
|
||||||
|
break;
|
||||||
|
case COMMAND_CURQSPNID:
|
||||||
send_response(session_fd, (char)me.cur_qspn_id);
|
send_response(session_fd, (char)me.cur_qspn_id);
|
||||||
|
break;
|
||||||
else if(strncmp(unprocessed_request,"cur_ip", (int)strlen(unprocessed_request)) == 0)
|
case COMMAND_CURIP:
|
||||||
send_response(session_fd, (char)me.cur_ip.data);
|
send_response(session_fd, (char)me.cur_ip.data);
|
||||||
|
break;
|
||||||
/*else if(strncmp(unprocessed_request,"cur_node", (int)strlen(unprocessed_request)) == 0)
|
case COMMAND_CURNODE:
|
||||||
send_response(me.cur_node);
|
send_response(session_fd, (char)me.cur_node);
|
||||||
|
break;
|
||||||
else if(strncmp(unprocessed_request,"ifs", (int)strlen(unprocessed_request)) == 0)
|
case COMMAND_IFS:
|
||||||
return 0;
|
send_response(session_fd, "IFS: TODO");
|
||||||
|
break;
|
||||||
else if(strncmp(unprocessed_request,"ifs_n", (int)strlen(unprocessed_request)) == 0)
|
case COMMAND_IFSCT:
|
||||||
return 0;*/
|
send_response(session_fd, "IFS: TODO");
|
||||||
send_response(session_fd, unprocessed_request, " Is invalid or yet to be implemented.");
|
break;
|
||||||
return -1;
|
default:
|
||||||
|
send_response(session_fd, "Provided command is invalid or yet to be implemented.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
|
||||||
request_receive(int sock, char message[], int max)
|
|
||||||
{
|
|
||||||
int total = 0;
|
|
||||||
const int bsize = 1024;
|
|
||||||
char buffer[bsize+1];
|
|
||||||
int read = bsize;
|
|
||||||
|
|
||||||
message[0] = 0; // initialize for strcat()
|
|
||||||
|
|
||||||
while(read == bsize) {
|
|
||||||
read = recv(sock, buffer, bsize, 0);
|
|
||||||
if(read < 0)
|
|
||||||
return -1; // error, bail out
|
|
||||||
total += read;
|
|
||||||
if(total > max)
|
|
||||||
return -2; // overflow
|
|
||||||
buffer[read] = 0;
|
|
||||||
strcat(message, buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_session(int session_fd)
|
handle_session(int session_fd)
|
||||||
{
|
{
|
||||||
char request[CONSOLE_BUFFER_LENGTH];
|
cmd_packet_t packetIn;
|
||||||
|
|
||||||
rc = request_receive(session_fd, request, CONSOLE_BUFFER_LENGTH);
|
rc = recv(session_fd, &packetIn, sizeof(packetIn), 0);
|
||||||
if (rc < 0) {
|
|
||||||
|
printf("%d bytes of data were received\n", rc);
|
||||||
|
if (rc < sizeof(packetIn)) {
|
||||||
perror("recv() failed");
|
perror("recv() failed");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("%d bytes of data were received\n", rc);
|
printf("0x%x command received\n", packetIn.command);
|
||||||
|
|
||||||
request_processing(session_fd, request);
|
request_processing(session_fd, packetIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -100,19 +100,18 @@ request_receive(int sock, char message[], int max)
|
|||||||
|
|
||||||
/* Sends and receives to ntkd */
|
/* Sends and receives to ntkd */
|
||||||
void
|
void
|
||||||
ntkd_request(char *request)
|
ntkd_request(command_t command)
|
||||||
{
|
{
|
||||||
if (sockfd <= 0) {
|
if (sockfd <= 0) {
|
||||||
perror("ntkd connection closed unexpectedly!\n");
|
perror("ntkd connection closed unexpectedly!\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int request_length = strlen(request) - 1;
|
cmd_packet_t packetOut;
|
||||||
request[request_length] = '\0';
|
packetOut.command = command;
|
||||||
|
|
||||||
printf("request: '%s'\n", request);
|
rc = send(sockfd, &packetOut, sizeof(packetOut), 0);
|
||||||
rc = send(sockfd, request, request_length, 0);
|
if (rc < sizeof(packetOut)) {
|
||||||
if (rc < 0) {
|
|
||||||
perror("send() failed");
|
perror("send() failed");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
@ -228,13 +227,13 @@ console(char* request)
|
|||||||
case COMMAND_CURNODE:
|
case COMMAND_CURNODE:
|
||||||
case COMMAND_IFS:
|
case COMMAND_IFS:
|
||||||
case COMMAND_IFSCT:
|
case COMMAND_IFSCT:
|
||||||
ntkd_request(request);
|
ntkd_request(commandID);
|
||||||
millisleep(200);
|
millisleep(200);
|
||||||
break;
|
break;
|
||||||
case COMMAND_VERSION:
|
case COMMAND_VERSION:
|
||||||
printf("ntk-console version: %d.%d\n",
|
printf("ntk-console version: %d.%d\n",
|
||||||
CONSOLE_VERSION_MAJOR, CONSOLE_VERSION_MINOR);
|
CONSOLE_VERSION_MAJOR, CONSOLE_VERSION_MINOR);
|
||||||
ntkd_request(request);
|
ntkd_request(commandID);
|
||||||
break;
|
break;
|
||||||
case COMMAND_CONSUPTIME:
|
case COMMAND_CONSUPTIME:
|
||||||
console_uptime();
|
console_uptime();
|
||||||
|
Loading…
Reference in New Issue
Block a user