[Icecast-dev] [PATCH 08/31] connection: _handle_connection re-roll logic in a more readeable way.

Niv Sardi nsardi at smartjog.com
Fri Jul 30 07:54:30 PDT 2010


we have a lot of
if (something) {
   do something
   ....
} else
  break;

change that to bail out as soon as possible, keeping indentation flatish.

Signed-off-by: Niv Sardi <nsardi at smartjog.com>
---
 src/connection.c |  127 ++++++++++++++++++++++++++----------------------------
 1 files changed, 61 insertions(+), 66 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index e558cd0..bb6cdc8 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -1213,84 +1213,79 @@ static void _handle_connection(void)
     while (1)
     {
         node = _get_connection();
-        if (node)
-        {
-            client_t *client = node->client;
-
-            /* Check for special shoutcast compatability processing */
-            if (node->shoutcast)
-            {
-                _handle_shoutcast_compatible (node);
-                continue;
-            }
+        if (! node)
+            break;
 
-            /* process normal HTTP headers */
-            parser = httpp_create_parser();
-            httpp_initialize(parser, NULL);
-            client->parser = parser;
-            if (httpp_parse (parser, client->refbuf->data, node->offset))
-            {
-                char *uri;
+        client_t *client = node->client;
+        char *uri;
 
-                /* we may have more than just headers, so prepare for it */
-                if (node->stream_offset == node->offset)
-                    client->refbuf->len = 0;
-                else
-                {
-                    char *ptr = client->refbuf->data;
-                    client->refbuf->len = node->offset - node->stream_offset;
-                    memmove (ptr, ptr + node->stream_offset, client->refbuf->len);
-                }
+        /* Check for special shoutcast compatability processing */
+        if (node->shoutcast)
+        {
+            _handle_shoutcast_compatible (node);
+            continue;
+        }
 
-                rawuri = httpp_getvar(parser, HTTPP_VAR_URI);
+        /* process normal HTTP headers */
+        parser = httpp_create_parser();
+        httpp_initialize(parser, NULL);
+        client->parser = parser;
+        if (!httpp_parse (parser, client->refbuf->data, node->offset))
+        {
+            free (node);
+            ERROR0("HTTP request parsing failed");
+            client_destroy (client);
+            continue;
+        }
 
-                /* assign a port-based shoutcast mountpoint if required */
-                if (node->shoutcast_mount && strcmp (rawuri, "/admin.cgi") == 0)
-                    httpp_set_query_param (client->parser, "mount", node->shoutcast_mount);
+        /* we may have more than just headers, so prepare for it */
+        if (node->stream_offset == node->offset) {
+            client->refbuf->len = 0;
+        } else {
+            char *ptr = client->refbuf->data;
+            client->refbuf->len = node->offset - node->stream_offset;
+            memmove (ptr, ptr + node->stream_offset, client->refbuf->len);
+        }
 
-                free (node->shoutcast_mount);
-                free (node);
+        rawuri = httpp_getvar(parser, HTTPP_VAR_URI);
 
-                if (strcmp("ICE",  httpp_getvar(parser, HTTPP_VAR_PROTOCOL)) &&
-                    strcmp("HTTP", httpp_getvar(parser, HTTPP_VAR_PROTOCOL))) {
-                    ERROR0("Bad HTTP protocol detected");
-                    client_destroy (client);
-                    continue;
-                }
+        /* assign a port-based shoutcast mountpoint if required */
+        if (node->shoutcast_mount && strcmp (rawuri, "/admin.cgi") == 0)
+            httpp_set_query_param (client->parser, "mount", node->shoutcast_mount);
 
-                uri = util_normalise_uri(rawuri);
+        free (node->shoutcast_mount);
+        free (node);
 
-                if (uri == NULL)
-                {
-                    client_destroy (client);
-                    continue;
-                }
+        if (strcmp("ICE",  httpp_getvar(parser, HTTPP_VAR_PROTOCOL)) &&
+            strcmp("HTTP", httpp_getvar(parser, HTTPP_VAR_PROTOCOL))) {
+            ERROR0("Bad HTTP protocol detected");
+            client_destroy (client);
+            continue;
+        }
 
-                if (parser->req_type == httpp_req_source) {
-                    _handle_source_request (client, uri);
-                }
-                else if (parser->req_type == httpp_req_stats) {
-                    _handle_stats_request (client, uri);
-                }
-                else if (parser->req_type == httpp_req_get) {
-                    _handle_get_request (client, uri);
-                }
-                else {
-                    ERROR0("Wrong request type from client");
-                    client_send_400 (client, "unknown request");
-                }
+        uri = util_normalise_uri(rawuri);
 
-                free(uri);
-            }
-            else
-            {
-                free (node);
-                ERROR0("HTTP request parsing failed");
-                client_destroy (client);
-            }
+        if (uri == NULL)
+        {
+            client_destroy (client);
             continue;
         }
-        break;
+
+        if (parser->req_type == httpp_req_source) {
+            _handle_source_request (client, uri);
+        }
+        else if (parser->req_type == httpp_req_stats) {
+            _handle_stats_request (client, uri);
+        }
+        else if (parser->req_type == httpp_req_get) {
+            _handle_get_request (client, uri);
+        }
+        else {
+            ERROR0("Wrong request type from client");
+            client_send_400 (client, "unknown request");
+        }
+
+        free(uri);
     }
 }
 
-- 
1.7.1



More information about the Icecast-dev mailing list