s3:smbd: take less than SMB_BUFFER_SIZE_MIN ('500') as header overhead in ipc.c
[samba.git] / source3 / smbd / ipc.c
index 91d5047c4c67a20dccc48a0f545cd71b50fb2c97..dbb259cedc2b1f52bee6dda668af8c7630f4c888 100644 (file)
@@ -109,12 +109,14 @@ void send_trans_reply(connection_struct *conn,
        int lparam = rparam ? rparam_len : 0;
        struct smbd_server_connection *sconn = req->sconn;
        int max_send = sconn->smb1.sessions.max_send;
        int lparam = rparam ? rparam_len : 0;
        struct smbd_server_connection *sconn = req->sconn;
        int max_send = sconn->smb1.sessions.max_send;
+       /* HACK: make sure we send at least 128 byte in one go */
+       int hdr_overhead = SMB_BUFFER_SIZE_MIN - 128;
 
        if (buffer_too_large)
                DEBUG(5,("send_trans_reply: buffer %d too large\n", ldata ));
 
 
        if (buffer_too_large)
                DEBUG(5,("send_trans_reply: buffer %d too large\n", ldata ));
 
-       this_lparam = MIN(lparam,max_send - 500); /* hack */
-       this_ldata  = MIN(ldata,max_send - (500+this_lparam));
+       this_lparam = MIN(lparam,max_send - hdr_overhead);
+       this_ldata  = MIN(ldata,max_send - (hdr_overhead+this_lparam));
 
        align = ((this_lparam)%4);
 
 
        align = ((this_lparam)%4);
 
@@ -163,9 +165,9 @@ void send_trans_reply(connection_struct *conn,
        while (tot_data_sent < ldata || tot_param_sent < lparam)
        {
                this_lparam = MIN(lparam-tot_param_sent,
        while (tot_data_sent < ldata || tot_param_sent < lparam)
        {
                this_lparam = MIN(lparam-tot_param_sent,
-                                 max_send - 500); /* hack */
+                                 max_send - hdr_overhead);
                this_ldata  = MIN(ldata -tot_data_sent,
                this_ldata  = MIN(ldata -tot_data_sent,
-                                 max_send - (500+this_lparam));
+                                 max_send - (hdr_overhead+this_lparam));
 
                if(this_lparam < 0)
                        this_lparam = 0;
 
                if(this_lparam < 0)
                        this_lparam = 0;