mirror of
https://github.com/emqx/neuron.git
synced 2026-10-29 15:09:11 +08:00
fix(driver): write string
This commit is contained in:
@@ -284,9 +284,13 @@ void neu_adapter_driver_process_msg(neu_adapter_driver_t *driver,
|
||||
case NEU_DTYPE_BOOL:
|
||||
neu_dvalue_get_bool(int_val->val, &value.boolean);
|
||||
break;
|
||||
case NEU_DTYPE_CSTR:
|
||||
neu_dvalue_get_ref_cstr(int_val->val, (char **) &value.str);
|
||||
case NEU_DTYPE_CSTR: {
|
||||
char *str = NULL;
|
||||
neu_dvalue_get_cstr(int_val->val, &str);
|
||||
strncpy(value.str, str, sizeof(value.str) - 1);
|
||||
free(str);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
assert(1 == 0);
|
||||
break;
|
||||
|
||||
@@ -90,5 +90,8 @@ static void tag_sort(neu_tag_sort_result_t *result, void *tag,
|
||||
utarray_new(result->sorts[result->n_sort - 1].tags, &icd);
|
||||
utarray_push_back(result->sorts[result->n_sort - 1].tags, &tag);
|
||||
result->sorts[result->n_sort - 1].info.size = 1;
|
||||
fn(&result->sorts[result->n_sort - 1],
|
||||
*(void **) utarray_back(result->sorts[result->n_sort - 1].tags),
|
||||
tag);
|
||||
}
|
||||
}
|
||||
@@ -228,6 +228,22 @@ ssize_t neu_conn_tcp_server_recv(neu_conn_t *conn, int fd, uint8_t *buf,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t neu_conn_tcp_server_recv_msg(neu_conn_t *conn, int fd,
|
||||
uint8_t *buf, ssize_t len)
|
||||
{
|
||||
ssize_t ret = 0;
|
||||
assert(conn->param.type == NEU_CONN_TCP_SERVER);
|
||||
|
||||
ret = recv(fd, buf, len, 0);
|
||||
if (ret == -1) {
|
||||
log_error("tcp server fd: %d, recv buf len %d, ret: %d, errno: %s(%d)",
|
||||
fd, len, ret, strerror(errno), errno);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
ssize_t neu_conn_send(neu_conn_t *conn, uint8_t *buf, ssize_t len)
|
||||
{
|
||||
ssize_t ret = 0;
|
||||
@@ -327,6 +343,38 @@ ssize_t neu_conn_recv(neu_conn_t *conn, uint8_t *buf, ssize_t len)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t neu_conn_tcp_client_recv_msg(neu_conn_t *conn, uint8_t *buf,
|
||||
ssize_t len)
|
||||
{
|
||||
ssize_t ret = 0;
|
||||
|
||||
pthread_mutex_lock(&conn->mtx);
|
||||
|
||||
assert(conn->param.type == NEU_CONN_TCP_CLIENT);
|
||||
ret = recv(conn->fd, buf, len, 0);
|
||||
if (ret == -1) {
|
||||
log_error("tcp client fd: %d, recv buf len %d, ret: %d, errno: %s(%d)",
|
||||
conn->fd, len, ret, strerror(errno), errno);
|
||||
}
|
||||
|
||||
if (errno == EPIPE || ret <= 0) {
|
||||
conn_disconnect(conn);
|
||||
if (conn->callback_trigger == true) {
|
||||
conn->disconnected(conn->data, conn->fd);
|
||||
conn->callback_trigger = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret > 0 && conn->callback_trigger == false) {
|
||||
conn->connected(conn->data, conn->fd);
|
||||
conn->callback_trigger = true;
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&conn->mtx);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void neu_conn_tcp_server_flush(neu_conn_t *conn, int fd)
|
||||
{
|
||||
(void) conn;
|
||||
@@ -653,8 +701,8 @@ void neu_conn_stream_consume(neu_conn_t *conn, void *context,
|
||||
{
|
||||
static __thread uint8_t recv_buf[2048] = { 0 };
|
||||
static __thread uint16_t offset = 0;
|
||||
ssize_t ret =
|
||||
neu_conn_recv(conn, recv_buf + offset, sizeof(recv_buf) - offset);
|
||||
ssize_t ret = neu_conn_tcp_client_recv_msg(conn, recv_buf + offset,
|
||||
sizeof(recv_buf) - offset);
|
||||
if (ret > 0) {
|
||||
offset += ret;
|
||||
neu_protocol_unpack_buf_t protocol_buf = { 0 };
|
||||
@@ -682,8 +730,8 @@ void neu_conn_stream_tcp_server_consume(neu_conn_t *conn, int fd, void *context,
|
||||
{
|
||||
static __thread uint8_t recv_buf[2048] = { 0 };
|
||||
static __thread uint16_t offset = 0;
|
||||
ssize_t ret = neu_conn_tcp_server_recv(conn, fd, recv_buf + offset,
|
||||
sizeof(recv_buf) - offset);
|
||||
ssize_t ret = neu_conn_tcp_server_recv_msg(conn, fd, recv_buf + offset,
|
||||
sizeof(recv_buf) - offset);
|
||||
if (ret > 0) {
|
||||
offset += ret;
|
||||
neu_protocol_unpack_buf_t protocol_buf = { 0 };
|
||||
|
||||
Reference in New Issue
Block a user