From 7c69a752fe648c40dc02c40abbde669eeaa07109 Mon Sep 17 00:00:00 2001 From: Minje Ahn Date: Thu, 26 Apr 2018 13:42:49 +0900 Subject: [PATCH] Change TCP transfer 1. Rollback to split transmission 2. Change block size 512 to 10K Change-Id: I1786a26c08546ccaade8089970ad8edeb2cf2a60 Signed-off-by: Minje Ahn (cherry picked from commit bd703adacacd8e39c94140883cfe535ce05d3dee) --- server/thumb-server-internal.c | 28 ++++++++++++++-------------- src/ipc/media-thumb-ipc.c | 40 ++++++++++++++++++++++++++++++---------- 2 files changed, 44 insertions(+), 24 deletions(-) diff --git a/server/thumb-server-internal.c b/server/thumb-server-internal.c index 5a279d4..32fd5a3 100755 --- a/server/thumb-server-internal.c +++ b/server/thumb-server-internal.c @@ -37,6 +37,7 @@ #define LOG_TAG "MEDIA_THUMBNAIL_SERVER" #define THUMB_DEFAULT_WIDTH 320 #define THUMB_DEFAULT_HEIGHT 240 +#define THUMB_BLOCK_SIZE 10240 #define THUMB_COMM_SOCK_PATH tzplatform_mkpath(TZ_SYS_RUN, "media-server/media_ipc_thumbcomm.socket") #define THUMB_EMPTY_STR "" @@ -135,24 +136,23 @@ gboolean _thumb_server_read_socket(GIOChannel *src, GIOCondition condition, gpoi res_msg.dst_path[0] = '\0'; int buf_size = 0; - int remain_size = 0; - int head_size = sizeof(res_msg) - sizeof(unsigned char *); + int sending_block = 0; + int block_size = sizeof(res_msg) - sizeof(unsigned char *); unsigned char *buf = NULL; _media_thumb_set_buffer(&res_msg, &buf, &buf_size); - remain_size = buf_size - head_size; - if (send(client_sock, buf, head_size, 0) < 0) { - thumb_stderror("send failed"); - } else { - if (remain_size > 0) { - if (send(client_sock, buf + head_size, remain_size, 0) < 0) { - thumb_stderror("send failed"); - } else { - thumb_dbg_slog("Sent data(%d) from %s", res_msg.thumb_size, res_msg.org_path); - } - } else { - thumb_dbg_slog("Sent thumbnail(%s) from %s", res_msg.dst_path, res_msg.org_path); + while (buf_size > 0) { + if (buf_size < THUMB_BLOCK_SIZE) + block_size = buf_size; + + if (send(client_sock, buf+sending_block, block_size, 0) < 0) { + thumb_stderror("send failed"); } + + sending_block += block_size; + buf_size -= block_size; + if (block_size < THUMB_BLOCK_SIZE) + block_size = THUMB_BLOCK_SIZE; } SAFE_FREE(buf); diff --git a/src/ipc/media-thumb-ipc.c b/src/ipc/media-thumb-ipc.c index 917aa6a..354dc8e 100755 --- a/src/ipc/media-thumb-ipc.c +++ b/src/ipc/media-thumb-ipc.c @@ -31,6 +31,7 @@ #include #include +#define THUMB_SOCK_BLOCK_SIZE 10240 #define THUMB_IPC_PATH tzplatform_mkpath(TZ_SYS_RUN, "media-server/media_ipc_thumbcreator.socket") static GQueue *g_manage_queue = NULL; @@ -246,53 +247,70 @@ bool __media_thumb_check_cancel_for_raw(void) int _media_thumb_recv_msg(int sock, int header_size, thumbMsg *msg) { int remain_size = 0; + int block_size = THUMB_SOCK_BLOCK_SIZE; + int recv_block = 0; unsigned char *buf = NULL; + unsigned char *block_buf = NULL; THUMB_MALLOC(buf, header_size); - if (buf == NULL) { + THUMB_MALLOC(block_buf, THUMB_SOCK_BLOCK_SIZE); + if (buf == NULL || block_buf == NULL) { thumb_err("memory allocation failed"); SAFE_FREE(buf); + SAFE_FREE(block_buf); return MS_MEDIA_ERR_OUT_OF_MEMORY; } if (recv(sock, buf, header_size, 0) < 0) { thumb_stderror("recv failed"); SAFE_FREE(buf); + SAFE_FREE(block_buf); return _media_thumb_get_error(); } memcpy(msg, buf, header_size); + SAFE_FREE(buf); if (strlen(msg->org_path) == 0 || strlen(msg->org_path) >= MAX_FILEPATH_LEN) { thumb_err("org_path size is invalid %d", strlen(msg->org_path)); - SAFE_FREE(buf); + SAFE_FREE(block_buf); return MS_MEDIA_ERR_SOCKET_RECEIVE; } /* it can be empty string */ if (strlen(msg->dst_path) >= MAX_FILEPATH_LEN) { thumb_err("dst_path size is invalid %d", strlen(msg->dst_path)); - SAFE_FREE(buf); + SAFE_FREE(block_buf); return MS_MEDIA_ERR_SOCKET_RECEIVE; } - SAFE_FREE(buf); - if (msg->thumb_size < 0) { thumb_err("recv data is wrong"); + SAFE_FREE(block_buf); return MS_MEDIA_ERR_SOCKET_RECEIVE; } if (msg->thumb_size > 0) { remain_size = msg->thumb_size; THUMB_MALLOC(buf, remain_size); - if (buf == NULL) + if (buf == NULL) { + SAFE_FREE(block_buf); return MS_MEDIA_ERR_OUT_OF_MEMORY; + } - if (recv(sock, buf, remain_size, 0) < 0) { - thumb_stderror("recv failed"); - SAFE_FREE(buf); - return _media_thumb_get_error(); + while (remain_size > 0) { + if (remain_size < THUMB_SOCK_BLOCK_SIZE) { + block_size = remain_size; + } + if (recv(sock, block_buf, block_size, 0) < 0) { + thumb_stderror("recv failed"); + SAFE_FREE(buf); + SAFE_FREE(block_buf); + return _media_thumb_get_error(); + } + memcpy(buf+recv_block, block_buf, block_size); + recv_block += block_size; + remain_size -= block_size; } SAFE_FREE(msg->thumb_data); @@ -301,12 +319,14 @@ int _media_thumb_recv_msg(int sock, int header_size, thumbMsg *msg) memcpy(msg->thumb_data, buf, msg->thumb_size); } else { SAFE_FREE(buf); + SAFE_FREE(block_buf); return MS_MEDIA_ERR_OUT_OF_MEMORY; } } SAFE_FREE(buf); + SAFE_FREE(block_buf); return MS_MEDIA_ERR_NONE; } -- 2.7.4