temp fix for sending 2048 bytes 36/11236/2
authorho.namkoong <ho.namkoong@samsung.com>
Wed, 23 Oct 2013 04:38:21 +0000 (13:38 +0900)
committerho.namkoong <ho.namkoong@samsung.com>
Wed, 23 Oct 2013 04:42:10 +0000 (13:42 +0900)
Change-Id: I6ae6b9931a8edfa3d63c854f35299938042c3fee

src/common_modules.h
src/sockets.c
src/transport.c

index 231e17fcc3b8ee1f24435fc275681ecac053bd27..8d9ad5f01b3a5effd9952265bf6192ea585b89cf 100644 (file)
@@ -130,6 +130,10 @@ struct socket {
     FD_EVENT fde;
     int fd;
 
+    //TODO HOT PATCH FOR REDWOOD 8974. When target is REDWOOD 8974, 2048 bytes can be broken.
+    char char_2048;
+    int check_2048;
+
     LIST_NODE* pkt_list;
     TRANSPORT *transport;
 
index 66c6e3f4289b9cf48253b6a543c40404e5e50ad1..04e4076f75c39cef528e3975480b3076a6252be4 100755 (executable)
@@ -476,6 +476,14 @@ static void local_socket_event_func(int fd, unsigned ev, void *_s)
             put_apacket(p);
         } else {
             p->len = MAX_PAYLOAD - avail;
+
+            //TODO HOT PATCH FOR 2048.
+            if(p->len == 2048) {
+                p->len = 2047;
+                s->char_2048 = p->data[2047];
+                s->check_2048 = 1;
+            }
+
             if(peer_enqueue(s, p) < 0) {
                 //local socket is already closed by peer or should not close the socket.
                 return;
@@ -499,6 +507,7 @@ SDB_SOCKET *create_local_socket(int fd)
     s->node = NULL;
     s->pkt_list = NULL;
     s->fd = fd;
+    s->check_2048 = 0;
 
     s->local_id = local_socket_next_id++;
     s->node = prepend(&local_socket_list, s);
index 177a5c2c71a61fadc8ad0654c08193189c3f8221..69a4f7f25f038d916744a5017b186f2901ec8dfd 100755 (executable)
@@ -770,7 +770,19 @@ void wakeup_select_func(int _fd, unsigned ev, void *data) {
                 sock->remote_id = remote_id;
                 sock->transport = t;
             }
-            local_socket_ready(sock);
+            //TODO HOT PATCH FOR 2048.
+            if(sock->check_2048 == 1) {
+                sock->check_2048 = 0;
+                PACKET *__p = get_apacket();
+                __p->msg.command = A_WRTE;
+                __p->msg.arg0 = sock->local_id;
+                __p->msg.arg1 = sock->remote_id;
+                __p->msg.data_length = 1;
+                send_packet(__p, sock->transport);
+            }
+            else {
+                local_socket_ready(sock);
+            }
         }
     }
     if(cmd == A_CLSE) {