diff options
-rw-r--r-- | src/input/CurlInputPlugin.cxx | 62 |
1 files changed, 30 insertions, 32 deletions
diff --git a/src/input/CurlInputPlugin.cxx b/src/input/CurlInputPlugin.cxx index dd4cd7543..b329d626f 100644 --- a/src/input/CurlInputPlugin.cxx +++ b/src/input/CurlInputPlugin.cxx @@ -116,6 +116,22 @@ struct input_curl { struct tag *tag; GError *postponed_error; + + input_curl(const char *url, GMutex *mutex, GCond *cond) + :range(nullptr), request_headers(nullptr), + buffers(g_queue_new()), + paused(false), + meta_name(nullptr), + tag(nullptr), + postponed_error(nullptr) { + input_stream_init(&base, &input_plugin_curl, url, mutex, cond); + icy_clear(&icy_metadata); + } + + ~input_curl(); + + input_curl(const input_curl &) = delete; + input_curl &operator=(const input_curl &) = delete; }; /** libcurl should accept "ICY 200 OK" */ @@ -718,26 +734,21 @@ input_curl_flush_buffers(struct input_curl *c) g_queue_clear(c->buffers); } -/** - * Frees this stream, including the input_stream struct. - */ -static void -input_curl_free(struct input_curl *c) +input_curl::~input_curl() { - if (c->tag != NULL) - tag_free(c->tag); - g_free(c->meta_name); + if (tag != NULL) + tag_free(tag); + g_free(meta_name); - input_curl_easy_free_indirect(c); - input_curl_flush_buffers(c); + input_curl_easy_free_indirect(this); + input_curl_flush_buffers(this); - g_queue_free(c->buffers); + g_queue_free(buffers); - if (c->postponed_error != NULL) - g_error_free(c->postponed_error); + if (postponed_error != NULL) + g_error_free(postponed_error); - input_stream_deinit(&c->base); - g_free(c); + input_stream_deinit(&base); } static bool @@ -924,7 +935,7 @@ input_curl_close(struct input_stream *is) { struct input_curl *c = (struct input_curl *)is; - input_curl_free(c); + delete c; } static bool @@ -1227,31 +1238,18 @@ input_curl_open(const char *url, GMutex *mutex, GCond *cond, assert(mutex != NULL); assert(cond != NULL); - struct input_curl *c; - if (strncmp(url, "http://", 7) != 0) return NULL; - c = g_new0(struct input_curl, 1); - input_stream_init(&c->base, &input_plugin_curl, url, - mutex, cond); - - c->buffers = g_queue_new(); - - icy_clear(&c->icy_metadata); - c->tag = NULL; - - c->postponed_error = NULL; - - c->paused = false; + struct input_curl *c = new input_curl(url, mutex, cond); if (!input_curl_easy_init(c, error_r)) { - input_curl_free(c); + delete c; return NULL; } if (!input_curl_easy_add_indirect(c, error_r)) { - input_curl_free(c); + delete c; return NULL; } |