fix(driver): write string

This commit is contained in:
fengzero
2022-05-19 06:45:38 +00:00
parent 2578d6925f
commit fcd267d6ce
6 changed files with 132 additions and 11 deletions
+6 -2
View File
@@ -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;
+3
View File
@@ -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);
}
}
+52 -4
View File
@@ -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 };