gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libmicrohttpd] 03/03: mhd_send.c: streamlined code, fixed doxy


From: gnunet
Subject: [libmicrohttpd] 03/03: mhd_send.c: streamlined code, fixed doxy
Date: Sun, 13 Dec 2020 17:43:52 +0100

This is an automated email from the git hooks/post-receive script.

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit 179f57bce2592b13dc7f07d6377ac9916faa32d2
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Sun Dec 13 19:43:08 2020 +0300

    mhd_send.c: streamlined code, fixed doxy
    
    Header pushing/not pushing is now correctly handled in
    function MHD_send_hdr_and_body_(), no need to use broken logic
    in MHD_send_on_connection_(). Replaced parameter
    enum MHD_SendSocketOptions options with simple bool value.
---
 src/microhttpd/connection.c |  8 +++----
 src/microhttpd/mhd_send.c   | 58 ++++++++++++++++-----------------------------
 src/microhttpd/mhd_send.h   |  2 +-
 3 files changed, 25 insertions(+), 43 deletions(-)

diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index 51384788..bb3faaa4 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -2882,7 +2882,7 @@ MHD_connection_handle_write (struct MHD_Connection 
*connection)
                                    [connection->continue_message_write_offset],
                                    MHD_STATICSTR_LEN_ (HTTP_100_CONTINUE)
                                    - connection->continue_message_write_offset,
-                                   MHD_SSO_PUSH_DATA);
+                                   true);
     if (ret < 0)
     {
       if (MHD_ERR_AGAIN_ == ret)
@@ -3025,7 +3025,7 @@ MHD_connection_handle_write (struct MHD_Connection 
*connection)
                                        [(size_t) data_write_offset],
                                        response->data_size
                                        - (size_t) data_write_offset,
-                                       MHD_SSO_PUSH_DATA);
+                                       true);
 #if _MHD_DEBUG_SEND_DATA
         if (ret > 0)
           fprintf (stderr,
@@ -3069,7 +3069,7 @@ MHD_connection_handle_write (struct MHD_Connection 
*connection)
                                    [connection->write_buffer_send_offset],
                                    connection->write_buffer_append_offset
                                    - connection->write_buffer_send_offset,
-                                   MHD_SSO_PUSH_DATA);
+                                   true);
     if (ret < 0)
     {
       if (MHD_ERR_AGAIN_ == ret)
@@ -3099,7 +3099,7 @@ MHD_connection_handle_write (struct MHD_Connection 
*connection)
                                    [connection->write_buffer_send_offset],
                                    connection->write_buffer_append_offset
                                    - connection->write_buffer_send_offset,
-                                   MHD_SSO_PUSH_DATA);
+                                   true);
     if (ret < 0)
     {
       if (MHD_ERR_AGAIN_ == ret)
diff --git a/src/microhttpd/mhd_send.c b/src/microhttpd/mhd_send.c
index b1c0dda6..78acdc8c 100644
--- a/src/microhttpd/mhd_send.c
+++ b/src/microhttpd/mhd_send.c
@@ -661,31 +661,25 @@ post_send_setopt (struct MHD_Connection *connection,
 
 
 /**
- * Send buffer on connection, and remember the current state of
- * the socket options; only call setsockopt when absolutely
- * necessary.
+ * Send buffer to the client, push data from network buffer if requested
+ * and full buffer is sent.
  *
  * @param connection the MHD_Connection structure
  * @param buffer content of the buffer to send
- * @param buffer_size the size of the buffer (in bytes)
- * @param options the #MHD_SendSocketOptions enum,
- *         #MHD_SSO_NO_CORK: definitely no corking (use NODELAY, or explicitly 
disable cork),
- *         #MHD_SSO_MAY_CORK: should enable corking (use MSG_MORE, or 
explicitly enable cork),
- *         #MHD_SSO_HDR_CORK: consider tcpi_snd_mss and consider not corking 
for the header
- *         part if the size of the header is close to the MSS.
- *         Only used if we are NOT doing 100 Continue and are still sending the
- *         header (provided in full as the buffer to #MHD_send_on_connection_ 
or as
- *         the header to #MHD_send_on_connection2_).
+ * @param buffer_size the size of the @a buffer (in bytes)
+ * @param push_data set to true to force push the data to the network from
+ *                  system buffers (usually set for the last piece of data),
+ *                  set to false to prefer holding incomplete network packets
+ *                  (more data will be send for the same reply).
  * @return sum of the number of bytes sent from both buffers or
- *         -1 on error
+ *         error code (negative)
  */
 ssize_t
 MHD_send_on_connection_ (struct MHD_Connection *connection,
                          const char *buffer,
                          size_t buffer_size,
-                         enum MHD_SendSocketOptions options)
+                         bool push_data)
 {
-  bool push_data;
   MHD_socket s = connection->socket_fd;
   ssize_t ret;
 #ifdef HTTPS_SUPPORT
@@ -701,29 +695,15 @@ MHD_send_on_connection_ (struct MHD_Connection 
*connection,
     return MHD_ERR_NOTCONN_;
   }
 
-  /* Get socket options, change/set options if necessary. */
-  switch (options)
-  {
-  /* No corking */
-  case MHD_SSO_PUSH_DATA:
-    push_data = true;
-    break;
-  /* Do corking, consider MSG_MORE instead if available. */
-  case MHD_SSO_PREFER_BUFF:
-    push_data = false;
-    break;
-  /* Cork the header. */
-  case MHD_SSO_HDR_CORK:
-    push_data = (buffer_size > 1024);
-    break;
-  }
-
-  pre_send_setopt (connection, (! tls_conn), push_data);
   if (tls_conn)
   {
 #ifdef HTTPS_SUPPORT
     if (buffer_size > SSIZE_MAX)
+    {
       buffer_size = SSIZE_MAX;
+      push_data = false; /* Incomplete send */
+    }
+    pre_send_setopt (connection, (! tls_conn), push_data);
     ret = gnutls_record_send (connection->tls_session,
                               buffer,
                               buffer_size);
@@ -758,8 +738,12 @@ MHD_send_on_connection_ (struct MHD_Connection *connection,
   {
     /* plaintext transmission */
     if (buffer_size > MHD_SCKT_SEND_MAX_SIZE_)
+    {
       buffer_size = MHD_SCKT_SEND_MAX_SIZE_; /* return value limit */
+      push_data = false; /* Incomplete send */
+    }
 
+    pre_send_setopt (connection, (! tls_conn), push_data);
 #ifdef MHD_USE_MSG_MORE
     ret = MHD_send4_ (s,
                       buffer,
@@ -884,8 +868,7 @@ MHD_send_hdr_and_body_ (struct MHD_Connection *connection,
     ret = MHD_send_on_connection_ (connection,
                                    header,
                                    header_size,
-                                   push_hdr ?
-                                   MHD_SSO_PUSH_DATA: MHD_SSO_PREFER_BUFF);
+                                   push_hdr);
     if ( ((size_t) header_size == ret) &&
          (((size_t) SSIZE_MAX > header_size)) &&
          (0 != body_size) )
@@ -905,8 +888,7 @@ MHD_send_hdr_and_body_ (struct MHD_Connection *connection,
       ret2 = MHD_send_on_connection_ (connection,
                                       body,
                                       body_size,
-                                      push_body ?
-                                      MHD_SSO_PUSH_DATA: MHD_SSO_PREFER_BUFF);
+                                      push_body);
       if (0 < ret2)
         return ret + ret2; /* Total data sent */
       if (MHD_ERR_AGAIN_ == ret2)
@@ -1217,7 +1199,7 @@ MHD_send_sendfile_ (struct MHD_Connection *connection)
   /* If there is a need to push the data from network buffers
    * call post_send_setopt(). */
   /* It's unknown whether sendfile() will be used in the next
-   * response so  assume that next response will be the same. */
+   * response so assume that next response will be the same. */
   if ( (push_data) &&
        (send_size == (size_t) ret) )
     post_send_setopt (connection, false, push_data);
diff --git a/src/microhttpd/mhd_send.h b/src/microhttpd/mhd_send.h
index 69a06769..9d64b07b 100644
--- a/src/microhttpd/mhd_send.h
+++ b/src/microhttpd/mhd_send.h
@@ -84,7 +84,7 @@ ssize_t
 MHD_send_on_connection_ (struct MHD_Connection *connection,
                          const char *buffer,
                          size_t buffer_size,
-                         enum MHD_SendSocketOptions options);
+                         bool push_data);
 
 
 /**

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]