Change TCP transfer 25/177425/2 accepted/tizen/unified/20180516.065714 accepted/tizen/unified/20180521.003626 submit/tizen/20180511.003859 submit/tizen/20180516.001848 submit/tizen/20180517.232110
authorMinje Ahn <minje.ahn@samsung.com>
Thu, 26 Apr 2018 04:42:49 +0000 (13:42 +0900)
committerhj kim <backto.kim@samsung.com>
Fri, 11 May 2018 00:40:46 +0000 (00:40 +0000)
1. Rollback to split transmission
2. Change block size 512 to 10K

Change-Id: I1786a26c08546ccaade8089970ad8edeb2cf2a60
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
(cherry picked from commit bd703adacacd8e39c94140883cfe535ce05d3dee)

server/thumb-server-internal.c
src/ipc/media-thumb-ipc.c

index 5a279d4..32fd5a3 100755 (executable)
@@ -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);
index 917aa6a..354dc8e 100755 (executable)
@@ -31,6 +31,7 @@
 #include <grp.h>
 #include <pwd.h>
 
+#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;
 }