Skip to content
Snippets Groups Projects
Commit 89437af9 authored by Roman Khlopkov's avatar Roman Khlopkov 🔜 Committed by alexandr.kravchenko
Browse files

[*] Node CLI restored

parent 0eb1f5b6
No related branches found
No related tags found
2 merge requests!251Master,!250Master
...@@ -2,7 +2,7 @@ project(cellframe-sdk C) ...@@ -2,7 +2,7 @@ project(cellframe-sdk C)
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 2.8)
set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD 11)
set(CELLFRAME_SDK_NATIVE_VERSION "2.6-28") set(CELLFRAME_SDK_NATIVE_VERSION "2.6-29")
add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"") add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
set(DAPSDK_MODULES "") set(DAPSDK_MODULES "")
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#else #else
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/un.h> #include <sys/un.h>
#include <sys/stat.h>
#endif #endif
#include "dap_common.h" #include "dap_common.h"
...@@ -52,12 +53,20 @@ ...@@ -52,12 +53,20 @@
static int s_status; static int s_status;
//callback function to receive http data //staic function to receive http data
static void dap_app_cli_http_read(uint64_t *socket, dap_app_cli_cmd_state_t *l_cmd) static void dap_app_cli_http_read(dap_app_cli_connect_param_t *socket, dap_app_cli_cmd_state_t *l_cmd)
{ {
ssize_t l_recv_len = recv(*socket, &l_cmd->cmd_res[l_cmd->cmd_res_cur], DAP_CLI_HTTP_RESPONSE_SIZE_MAX, 0); ssize_t l_recv_len = recv(*socket, &l_cmd->cmd_res[l_cmd->cmd_res_cur], DAP_CLI_HTTP_RESPONSE_SIZE_MAX, 0);
if (l_recv_len == 0) {
s_status = DAP_CLI_ERROR_INCOMPLETE;
return;
}
if (l_recv_len == -1) { if (l_recv_len == -1) {
s_status = DAP_CLI_ERROR_SOCKET; if (errno == EAGAIN || errno == EWOULDBLOCK) {
s_status = DAP_CLI_ERROR_TIMEOUT;
} else {
s_status = DAP_CLI_ERROR_SOCKET;
}
return; return;
} }
l_cmd->cmd_res_cur +=(size_t) l_recv_len; l_cmd->cmd_res_cur +=(size_t) l_recv_len;
...@@ -69,16 +78,10 @@ static void dap_app_cli_http_read(uint64_t *socket, dap_app_cli_cmd_state_t *l_c ...@@ -69,16 +78,10 @@ static void dap_app_cli_http_read(uint64_t *socket, dap_app_cli_cmd_state_t *l_c
l_cmd->cmd_res_len = atoi(l_str_ptr + strlen(l_cont_len_str)); l_cmd->cmd_res_len = atoi(l_str_ptr + strlen(l_cont_len_str));
if (l_cmd->cmd_res_len == 0) { if (l_cmd->cmd_res_len == 0) {
s_status = DAP_CLI_ERROR_FORMAT; s_status = DAP_CLI_ERROR_FORMAT;
break;
} }
else { else {
s_status++; s_status++;
// resize buffer for received data
if (l_cmd->cmd_res_len > l_cmd->cmd_res_len_max) {
size_t l_len_max = l_cmd->cmd_res_len_max;
l_cmd->cmd_res_len_max = l_cmd->cmd_res_len + 1;
l_cmd->cmd_res = DAP_REALLOC(l_cmd->cmd_res, l_cmd->cmd_res_len_max);
memset(l_cmd->cmd_res + l_len_max, 0, l_cmd->cmd_res_len_max - l_len_max);
}
} }
} else { } else {
break; break;
...@@ -102,6 +105,8 @@ static void dap_app_cli_http_read(uint64_t *socket, dap_app_cli_cmd_state_t *l_c ...@@ -102,6 +105,8 @@ static void dap_app_cli_http_read(uint64_t *socket, dap_app_cli_cmd_state_t *l_c
if (l_cmd->cmd_res_cur == l_cmd->cmd_res_len) { if (l_cmd->cmd_res_cur == l_cmd->cmd_res_len) {
l_cmd->cmd_res[l_cmd->cmd_res_cur] = 0; l_cmd->cmd_res[l_cmd->cmd_res_cur] = 0;
s_status = 0; s_status = 0;
} else {
s_status = DAP_CLI_ERROR_FORMAT;
} }
} break; } break;
} }
...@@ -125,6 +130,8 @@ dap_app_cli_connect_param_t* dap_app_cli_connect(const char *a_socket_path) ...@@ -125,6 +130,8 @@ dap_app_cli_connect_param_t* dap_app_cli_connect(const char *a_socket_path)
SOCKET l_socket = socket(AF_INET, SOCK_STREAM, 0); SOCKET l_socket = socket(AF_INET, SOCK_STREAM, 0);
setsockopt((SOCKET)l_socket, SOL_SOCKET, SO_SNDBUF, (char *)&buffsize, sizeof(int) ); setsockopt((SOCKET)l_socket, SOL_SOCKET, SO_SNDBUF, (char *)&buffsize, sizeof(int) );
setsockopt((SOCKET)l_socket, SOL_SOCKET, SO_RCVBUF, (char *)&buffsize, sizeof(int) ); setsockopt((SOCKET)l_socket, SOL_SOCKET, SO_RCVBUF, (char *)&buffsize, sizeof(int) );
DWORD l_to = DAP_CLI_HTTP_TIMEOUT;
setsockopt((SOCKET)l_socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&l_to, sizeof(l_to));
#else #else
if (!a_socket_path) { if (!a_socket_path) {
return NULL; return NULL;
...@@ -134,8 +141,10 @@ dap_app_cli_connect_param_t* dap_app_cli_connect(const char *a_socket_path) ...@@ -134,8 +141,10 @@ dap_app_cli_connect_param_t* dap_app_cli_connect(const char *a_socket_path)
if (l_socket < 0) { if (l_socket < 0) {
return NULL; return NULL;
} }
struct timeval l_to = {DAP_CLI_HTTP_TIMEOUT, 0};
setsockopt(l_socket, SOL_SOCKET, SO_SNDBUF, (void*) &buffsize, sizeof(buffsize)); setsockopt(l_socket, SOL_SOCKET, SO_SNDBUF, (void*) &buffsize, sizeof(buffsize));
setsockopt(l_socket, SOL_SOCKET, SO_RCVBUF, (void*) &buffsize, sizeof(buffsize)); setsockopt(l_socket, SOL_SOCKET, SO_RCVBUF, (void*) &buffsize, sizeof(buffsize));
setsockopt(l_socket, SOL_SOCKET, SO_RCVTIMEO, (void *)&l_to, sizeof(l_to));
#endif #endif
// connect // connect
int l_addr_len; int l_addr_len;
...@@ -160,7 +169,7 @@ dap_app_cli_connect_param_t* dap_app_cli_connect(const char *a_socket_path) ...@@ -160,7 +169,7 @@ dap_app_cli_connect_param_t* dap_app_cli_connect(const char *a_socket_path)
closesocket(l_socket); closesocket(l_socket);
return NULL; return NULL;
} }
uint64_t *l_ret = DAP_NEW(uint64_t); dap_app_cli_connect_param_t *l_ret = DAP_NEW(dap_app_cli_connect_param_t);
*l_ret = l_socket; *l_ret = l_socket;
return l_ret; return l_ret;
} }
...@@ -188,7 +197,6 @@ int dap_app_cli_post_command( dap_app_cli_connect_param_t *a_socket, dap_app_cli ...@@ -188,7 +197,6 @@ int dap_app_cli_post_command( dap_app_cli_connect_param_t *a_socket, dap_app_cli
assert(0); assert(0);
return -1; return -1;
} }
s_status = 1;
a_cmd->cmd_res = DAP_NEW_Z_SIZE(char, DAP_CLI_HTTP_RESPONSE_SIZE_MAX); a_cmd->cmd_res = DAP_NEW_Z_SIZE(char, DAP_CLI_HTTP_RESPONSE_SIZE_MAX);
a_cmd->cmd_res_cur = 0; a_cmd->cmd_res_cur = 0;
dap_string_t *l_cmd_data = dap_string_new(a_cmd->cmd_name); dap_string_t *l_cmd_data = dap_string_new(a_cmd->cmd_name);
...@@ -218,10 +226,11 @@ int dap_app_cli_post_command( dap_app_cli_connect_param_t *a_socket, dap_app_cli ...@@ -218,10 +226,11 @@ int dap_app_cli_post_command( dap_app_cli_connect_param_t *a_socket, dap_app_cli
//wait for command execution //wait for command execution
time_t l_start_time = time(NULL); time_t l_start_time = time(NULL);
s_status = 1;
while(s_status > 0) { while(s_status > 0) {
dap_app_cli_http_read(a_socket, a_cmd); dap_app_cli_http_read(a_socket, a_cmd);
if (time(NULL) - l_start_time > DAP_CLI_HTTP_TIMEOUT) if (time(NULL) - l_start_time > DAP_CLI_HTTP_TIMEOUT)
return DAP_CLI_ERROR_TIMEOUT; s_status = DAP_CLI_ERROR_TIMEOUT;
} }
// process result // process result
if (a_cmd->cmd_res && !s_status) { if (a_cmd->cmd_res && !s_status) {
......
...@@ -34,7 +34,6 @@ typedef struct dap_app_cli_cmd_state { ...@@ -34,7 +34,6 @@ typedef struct dap_app_cli_cmd_state {
int ret_code; int ret_code;
// for reply // for reply
char *cmd_res; char *cmd_res;
size_t cmd_res_len_max;
size_t cmd_res_len; size_t cmd_res_len;
size_t cmd_res_cur; size_t cmd_res_cur;
} dap_app_cli_cmd_state_t; } dap_app_cli_cmd_state_t;
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#define DAP_CLI_ERROR_FORMAT -1 #define DAP_CLI_ERROR_FORMAT -1
#define DAP_CLI_ERROR_TIMEOUT -2 #define DAP_CLI_ERROR_TIMEOUT -2
#define DAP_CLI_ERROR_SOCKET -3 #define DAP_CLI_ERROR_SOCKET -3
#define DAP_CLI_ERROR_INCOMPLETE -4
// connection description // connection description
typedef uint64_t dap_app_cli_connect_param_t; typedef uint64_t dap_app_cli_connect_param_t;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment