static size_t curl_header(void *data, size_t size, size_t nmemb, void *pointer) { Downloader *dl = (Downloader *)pointer; dl->mutex()->lock (); size_t data_size = size * nmemb; if (data_size < 3) { dl->mutex()->unlock(); return data_size; } //qDebug("header received: %s", (char*) data); QString str = QString::fromAscii((char *) data, data_size); str = str.trimmed (); if (str.left(4).contains("HTTP")) { qDebug("Downloader: header received"); //TODO open metadata socket } else if (str.left(4).contains("ICY")) { qDebug("Downloader: shoutcast header received"); //dl->stream()->icy_meta_data = true; } else { QString key = str.left(str.indexOf(":")).trimmed().toLower(); QString value = str.right(str.size() - str.indexOf(":") - 1).trimmed().toLower(); dl->stream()->header.insert(key, value); qDebug("Downloader: key=%s, value=%s",qPrintable(key),qPrintable(value)); if (key == "icy-metaint") { dl->stream()->icy_metaint = value.toInt(); dl->stream()->icy_meta_data = true; } } dl->mutex()->unlock(); return data_size; }
int curl_progress(void *pointer, double dltotal, double dlnow, double ultotal, double ulnow) { Q_UNUSED(dltotal); Q_UNUSED(dlnow); Q_UNUSED(ultotal); Q_UNUSED(ulnow); Downloader *dl = (Downloader *)pointer; dl->mutex()->lock (); bool aborted = dl->stream()->aborted; dl->mutex()->unlock(); if (aborted) { return -1; } return 0; }