[PATCH 12/31] Connection: refactor source_startup

Niv Sardi <[email protected]>
Newsgroups gmane.comp.audio.icecast.devel
Message-ID <[email protected]>
Unroll logic,
if (!blah) {
   bail
}
do something else

is much nicer than

if (blah) {
   do something else;
} else {
  bail
}

Signed-off-by: Niv Sardi <[email protected]>
---
 src/connection.c |   67 +++++++++++++++++++++++++++--------------------------
 1 files changed, 34 insertions(+), 33 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index 2866ade..4dfbad7 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -993,45 +993,46 @@ static void _handle_source_request (client_t *client, const char *uri)
 void source_startup (client_t *client, const char *uri, int auth_style)
 {
     source_t *source;
+    refbuf_t *ok;
     source = source_reserve (uri);
 
-    if (source)
-    {
-        source->client = client;
-        source->parser = client->parser;
-        source->con = client->con;
-        if (connection_complete_source (source, 1) < 0)
-        {
-            source_clear_source (source);
-            source_free_source (source);
-            return;
-        }
-        client->respcode = 200;
-        if (auth_style == SHOUTCAST_SOURCE_AUTH)
-        {
-            source->shoutcast_compat = 1;
-            source_client_callback (client, source);
-        }
-        else
-        {
-            refbuf_t *ok = refbuf_new (PER_CLIENT_REFBUF_SIZE);
-            client->respcode = 200;
-            snprintf (ok->data, PER_CLIENT_REFBUF_SIZE,
-                    "HTTP/1.0 200 OK\r\n\r\n");
-            ok->len = strlen (ok->data);
-            /* we may have unprocessed data read in, so don't overwrite it */
-            ok->associated = client->refbuf;
-            client->refbuf = ok;
-            fserve_add_client_callback (client, source_client_callback, source);
-        }
-    }
-    else
-    {
+    if (!source) {
         client_send_403 (client, "Mountpoint in use");
         WARN1 ("Mountpoint %s in use", uri);
+        return;
     }
-}
 
+    source->client = client;
+    source->parser = client->parser;
+    source->con = client->con;
+    if (connection_complete_source (source, 1) < 0) {
+        source_clear_source (source);
+        source_free_source (source);
+        return;
+    }
+    client->respcode = 200;
+    switch (auth_style) {
+    case SHOUTCAST_SOURCE_AUTH:
+        source->shoutcast_compat = 1;
+    case NOAUTH_SOURCE_AUTH:
+        source_client_callback (client, source);
+        break;
+    case ICECAST_SOURCE_AUTH:
+        ok = refbuf_new (PER_CLIENT_REFBUF_SIZE);
+        client->respcode = 200;
+        snprintf (ok->data, PER_CLIENT_REFBUF_SIZE,
+                  "HTTP/1.0 200 OK\r\n\r\n");
+        ok->len = strlen (ok->data);
+        /* we may have unprocessed data read in, so don't overwrite it */
+        ok->associated = client->refbuf;
+        client->refbuf = ok;
+        fserve_add_client_callback (client, source_client_callback, source);
+        break;
+    default:
+        WARN1("Got unkown source auth type: %d", auth_style);
+        return;
+    }
+}
 
 static void _handle_stats_request (client_t *client, char *uri)
 {
-- 
1.7.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.