From 7c3a5146cc623ea2940177e272afdd072a07e690 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sun, 19 May 2013 07:14:59 +0000 Subject: added timeout for transport plugins git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3471 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Transports/http/httpinputfactory.cpp | 2 +- src/plugins/Transports/http/httpinputfactory.h | 4 ++-- src/plugins/Transports/http/httpinputsource.cpp | 7 ++++++- src/plugins/Transports/http/httpinputsource.h | 1 + src/plugins/Transports/http/httpstreamreader.cpp | 18 +++++++++++++++--- src/plugins/Transports/mms/mmsinputfactory.cpp | 2 +- src/plugins/Transports/mms/mmsinputfactory.h | 4 ++-- src/plugins/Transports/mms/mmsinputsource.cpp | 7 ++++++- src/plugins/Transports/mms/mmsinputsource.h | 1 + src/plugins/Transports/mms/mmsstreamreader.cpp | 4 +++- 10 files changed, 38 insertions(+), 12 deletions(-) (limited to 'src/plugins/Transports') diff --git a/src/plugins/Transports/http/httpinputfactory.cpp b/src/plugins/Transports/http/httpinputfactory.cpp index 46688d2f6..9660877c3 100644 --- a/src/plugins/Transports/http/httpinputfactory.cpp +++ b/src/plugins/Transports/http/httpinputfactory.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2012 by Ilya Kotov * + * Copyright (C) 2009-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * diff --git a/src/plugins/Transports/http/httpinputfactory.h b/src/plugins/Transports/http/httpinputfactory.h index d674f71d0..acc4f5999 100644 --- a/src/plugins/Transports/http/httpinputfactory.h +++ b/src/plugins/Transports/http/httpinputfactory.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2012 by Ilya Kotov * + * Copyright (C) 2009-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -33,7 +33,7 @@ class QTranslator; class HTTPInputFactory : public QObject, InputSourceFactory { Q_OBJECT -Q_INTERFACES(InputSourceFactory); +Q_INTERFACES(InputSourceFactory) public: const InputSourceProperties properties() const; InputSource *create(const QString &url, QObject *parent = 0); diff --git a/src/plugins/Transports/http/httpinputsource.cpp b/src/plugins/Transports/http/httpinputsource.cpp index 623f39bac..aebbe89b3 100644 --- a/src/plugins/Transports/http/httpinputsource.cpp +++ b/src/plugins/Transports/http/httpinputsource.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2012 by Ilya Kotov * + * Copyright (C) 2009-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -44,6 +44,11 @@ bool HTTPInputSource::isReady() return m_reader->isOpen(); } +bool HTTPInputSource::isWaiting() +{ + return (!m_reader->bytesAvailable() && m_reader->isOpen()); +} + QString HTTPInputSource::contentType() const { return m_reader->contentType(); diff --git a/src/plugins/Transports/http/httpinputsource.h b/src/plugins/Transports/http/httpinputsource.h index ca90a1b79..cea3bc7b4 100644 --- a/src/plugins/Transports/http/httpinputsource.h +++ b/src/plugins/Transports/http/httpinputsource.h @@ -37,6 +37,7 @@ public: QIODevice *ioDevice(); bool initialize(); bool isReady(); + bool isWaiting(); QString contentType() const; private: diff --git a/src/plugins/Transports/http/httpstreamreader.cpp b/src/plugins/Transports/http/httpstreamreader.cpp index da71be35d..adf9916e7 100644 --- a/src/plugins/Transports/http/httpstreamreader.cpp +++ b/src/plugins/Transports/http/httpstreamreader.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2012 by Ilya Kotov * + * Copyright (C) 2006-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -201,6 +201,11 @@ qint64 HttpStreamReader::readData(char* data, qint64 maxlen) qint64 len = 0; m_mutex.lock(); + if(m_stream.buf_fill == 0) + { + m_mutex.unlock(); + return 0; + } if (!m_stream.icy_meta_data || m_stream.icy_metaint == 0) len = readBuffer(data, maxlen); else @@ -210,7 +215,6 @@ qint64 HttpStreamReader::readData(char* data, qint64 maxlen) while (maxlen > nread && m_stream.buf_fill > nread) { to_read = qMin(m_stream.icy_metaint - m_metacount, maxlen - nread); - //to_read = (maxlen - nread); qint64 res = readBuffer(data + nread, to_read); nread += res; m_metacount += res; @@ -343,6 +347,7 @@ void HttpStreamReader::run() setErrorString(errorBuffer); emit error(); } + QIODevice::close(); } qint64 HttpStreamReader::readBuffer(char* data, qint64 maxlen) @@ -392,7 +397,14 @@ void HttpStreamReader::readICYMetaData() uint8_t packet_size; m_metacount = 0; m_mutex.lock(); - readBuffer((char *)&packet_size, sizeof(packet_size)); + + while (m_stream.buf_fill < 1 && m_thread->isRunning()) + { + m_mutex.unlock(); + qApp->processEvents(); + m_mutex.lock(); + } + readBuffer((char *)&packet_size, 1); if (packet_size != 0) { int size = packet_size * 16; diff --git a/src/plugins/Transports/mms/mmsinputfactory.cpp b/src/plugins/Transports/mms/mmsinputfactory.cpp index beb9fbf87..b485c7d03 100644 --- a/src/plugins/Transports/mms/mmsinputfactory.cpp +++ b/src/plugins/Transports/mms/mmsinputfactory.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010-2012 by Ilya Kotov * + * Copyright (C) 2010-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * diff --git a/src/plugins/Transports/mms/mmsinputfactory.h b/src/plugins/Transports/mms/mmsinputfactory.h index 8e12d7f3c..fd2bdb77e 100644 --- a/src/plugins/Transports/mms/mmsinputfactory.h +++ b/src/plugins/Transports/mms/mmsinputfactory.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2010 by Ilya Kotov * + * Copyright (C) 2010-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -33,7 +33,7 @@ class QTranslator; class MMSInputFactory : public QObject, InputSourceFactory { Q_OBJECT -Q_INTERFACES(InputSourceFactory); +Q_INTERFACES(InputSourceFactory) public: const InputSourceProperties properties() const; InputSource *create(const QString &url, QObject *parent = 0); diff --git a/src/plugins/Transports/mms/mmsinputsource.cpp b/src/plugins/Transports/mms/mmsinputsource.cpp index 31f995890..8e72fa264 100644 --- a/src/plugins/Transports/mms/mmsinputsource.cpp +++ b/src/plugins/Transports/mms/mmsinputsource.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2012 by Ilya Kotov * + * Copyright (C) 2009-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -44,6 +44,11 @@ bool MMSInputSource::isReady() return m_reader->isOpen(); } +bool MMSInputSource::isWaiting() +{ + return (!m_reader->bytesAvailable() && m_reader->isOpen()); +} + QString MMSInputSource::contentType() const { return "audio/x-ms-wma"; diff --git a/src/plugins/Transports/mms/mmsinputsource.h b/src/plugins/Transports/mms/mmsinputsource.h index 9590e1e7c..359a96f09 100644 --- a/src/plugins/Transports/mms/mmsinputsource.h +++ b/src/plugins/Transports/mms/mmsinputsource.h @@ -37,6 +37,7 @@ public: QIODevice *ioDevice(); bool initialize(); bool isReady(); + bool isWaiting(); QString contentType() const; private: diff --git a/src/plugins/Transports/mms/mmsstreamreader.cpp b/src/plugins/Transports/mms/mmsstreamreader.cpp index db4663fb1..8bc9e9790 100644 --- a/src/plugins/Transports/mms/mmsstreamreader.cpp +++ b/src/plugins/Transports/mms/mmsstreamreader.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2012 by Ilya Kotov * + * Copyright (C) 2006-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -145,6 +145,7 @@ void MMSStreamReader::run() qWarning("MMSStreamReader: connection failed"); setErrorString("connection failed"); emit error(); + QIODevice::close(); return; } m_mutex.lock(); @@ -188,6 +189,7 @@ void MMSStreamReader::run() break; DownloadThread::usleep(5000); } + QIODevice::close(); } void MMSStreamReader::checkBuffer() -- cgit v1.2.3-13-gbd6f