add function sf_set_body_length

support_rdma
YuQing 2023-09-05 16:45:51 +08:00
parent e22400fa1c
commit b3334d2ad5
4 changed files with 34 additions and 18 deletions

View File

@ -439,6 +439,8 @@ static int load_rdma_apis(SFNetworkHandler *handler)
return EFAULT;
}
LOAD_API(handler, get_connection_size);
LOAD_API(handler, init_connection);
LOAD_API(handler, create_server);
LOAD_API(handler, close_server);
LOAD_API(handler, accept_connection);

View File

@ -654,24 +654,7 @@ ssize_t sf_socket_recv_data(struct fast_task_info *task, SFCommAction *action)
return bytes;
}
if (SF_CTX->set_body_length(task) != 0) {
return -1;
}
if (task->length < 0) {
logError("file: "__FILE__", line: %d, "
"client ip: %s, pkg length: %d < 0",
__LINE__, task->client_ip,
task->length);
return -1;
}
task->length += SF_CTX->header_size;
if (task->length > g_sf_global_vars.max_pkg_size) {
logError("file: "__FILE__", line: %d, "
"client ip: %s, pkg length: %d > "
"max pkg size: %d", __LINE__,
task->client_ip, task->length,
g_sf_global_vars.max_pkg_size);
if (sf_set_body_length(task) != 0) {
return -1;
}

View File

@ -92,6 +92,32 @@ void sf_task_switch_thread(struct fast_task_info *task,
void sf_task_detach_thread(struct fast_task_info *task);
static inline int sf_set_body_length(struct fast_task_info *task)
{
if (SF_CTX->set_body_length(task) != 0) {
return -1;
}
if (task->length < 0) {
logError("file: "__FILE__", line: %d, "
"client ip: %s, pkg length: %d < 0",
__LINE__, task->client_ip,
task->length);
return -1;
}
task->length += SF_CTX->header_size;
if (task->length > g_sf_global_vars.max_pkg_size) {
logError("file: "__FILE__", line: %d, "
"client ip: %s, pkg length: %d > "
"max pkg size: %d", __LINE__,
task->client_ip, task->length,
g_sf_global_vars.max_pkg_size);
return -1;
}
return 0;
}
int sf_socket_async_connect_server(struct fast_task_info *task);
int sf_socket_connect_server_done(struct fast_task_info *task);

View File

@ -60,6 +60,9 @@ typedef enum {
} SFCommAction;
struct sf_listener;
typedef int (*sf_get_connection_size_callback)();
typedef int (*sf_init_connection_callback)(struct fast_task_info *task, void *arg);
typedef int (*sf_create_server_callback)(struct sf_listener
*listener, int af, const char *bind_addr);
typedef void (*sf_close_server_callback)(struct sf_listener *listener);
@ -99,6 +102,8 @@ typedef struct sf_network_handler {
SFListener outer;
/* for server side */
sf_get_connection_size_callback get_connection_size;
sf_init_connection_callback init_connection;
sf_create_server_callback create_server;
sf_close_server_callback close_server;
sf_accept_connection_callback accept_connection;