From 0535efd70fb085c5a4fdf5ecab0b87bb93f81407 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sun, 30 Jun 2019 10:59:52 +0000 Subject: added socks5 proxy support git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8971 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/General/lyrics/lyricswindow.cpp | 2 + src/plugins/General/scrobbler/scrobbler.cpp | 4 + src/plugins/General/streambrowser/streamwindow.cpp | 2 + src/plugins/Input/cdaudio/decoder_cdaudio.cpp | 2 +- src/plugins/Transports/http/httpstreamreader.cpp | 7 ++ src/qmmp/qmmpsettings.cpp | 12 ++- src/qmmp/qmmpsettings.h | 28 ++++--- src/qmmpui/configdialog.cpp | 5 ++ src/qmmpui/forms/configdialog.ui | 98 ++++++++++++---------- src/qmmpui/playlistdownloader.cpp | 2 + 10 files changed, 107 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/plugins/General/lyrics/lyricswindow.cpp b/src/plugins/General/lyrics/lyricswindow.cpp index 17fe95109..0ef6c83d6 100644 --- a/src/plugins/General/lyrics/lyricswindow.cpp +++ b/src/plugins/General/lyrics/lyricswindow.cpp @@ -47,6 +47,8 @@ LyricsWindow::LyricsWindow(const QString &artist, const QString &title, QWidget if (gs->isProxyEnabled()) { QNetworkProxy proxy(QNetworkProxy::HttpProxy, gs->proxy().host(), gs->proxy().port()); + if(gs->proxyType() == QmmpSettings::SOCKS5_PROXY) + proxy.setType(QNetworkProxy::Socks5Proxy); if(gs->useProxyAuth()) { proxy.setUser(gs->proxy().userName()); diff --git a/src/plugins/General/scrobbler/scrobbler.cpp b/src/plugins/General/scrobbler/scrobbler.cpp index 07f33e72d..9c8a9a0ea 100644 --- a/src/plugins/General/scrobbler/scrobbler.cpp +++ b/src/plugins/General/scrobbler/scrobbler.cpp @@ -268,6 +268,8 @@ void Scrobbler::setupProxy() if (gs->isProxyEnabled()) { QNetworkProxy proxy(QNetworkProxy::HttpProxy, gs->proxy().host(), gs->proxy().port()); + if(gs->proxyType() == QmmpSettings::SOCKS5_PROXY) + proxy.setType(QNetworkProxy::Socks5Proxy); if(gs->useProxyAuth()) { proxy.setUser(gs->proxy().userName()); @@ -399,6 +401,8 @@ ScrobblerAuth::ScrobblerAuth(const QString &scrobblerUrl, const QString &authUrl if (gs->isProxyEnabled()) { QNetworkProxy proxy(QNetworkProxy::HttpProxy, gs->proxy().host(), gs->proxy().port()); + if(gs->proxyType() == QmmpSettings::SOCKS5_PROXY) + proxy.setType(QNetworkProxy::Socks5Proxy); if(gs->useProxyAuth()) { proxy.setUser(gs->proxy().userName()); diff --git a/src/plugins/General/streambrowser/streamwindow.cpp b/src/plugins/General/streambrowser/streamwindow.cpp index 504914025..dc276e872 100644 --- a/src/plugins/General/streambrowser/streamwindow.cpp +++ b/src/plugins/General/streambrowser/streamwindow.cpp @@ -96,6 +96,8 @@ StreamWindow::StreamWindow(QWidget *parent) if (gs->isProxyEnabled()) { QNetworkProxy proxy(QNetworkProxy::HttpProxy, gs->proxy().host(), gs->proxy().port()); + if(gs->proxyType() == QmmpSettings::SOCKS5_PROXY) + proxy.setType(QNetworkProxy::Socks5Proxy); if(gs->useProxyAuth()) { proxy.setUser(gs->proxy().userName()); diff --git a/src/plugins/Input/cdaudio/decoder_cdaudio.cpp b/src/plugins/Input/cdaudio/decoder_cdaudio.cpp index 11e8119ab..afc6b2995 100644 --- a/src/plugins/Input/cdaudio/decoder_cdaudio.cpp +++ b/src/plugins/Input/cdaudio/decoder_cdaudio.cpp @@ -252,7 +252,7 @@ QList DecoderCDAudio::generateTrackList(const QString &device, TrackIn { cddb_http_enable (cddb_conn); cddb_set_http_path_query (cddb_conn, settings.value("cddb_path").toByteArray().constData()); - if (QmmpSettings::instance()->isProxyEnabled()) + if (QmmpSettings::instance()->isProxyEnabled() && QmmpSettings::instance()->proxyType() == QmmpSettings::HTTP_PROXY) { QUrl proxy = QmmpSettings::instance()->proxy(); cddb_http_proxy_enable (cddb_conn); diff --git a/src/plugins/Transports/http/httpstreamreader.cpp b/src/plugins/Transports/http/httpstreamreader.cpp index 5cba24d0c..0cefbe775 100644 --- a/src/plugins/Transports/http/httpstreamreader.cpp +++ b/src/plugins/Transports/http/httpstreamreader.cpp @@ -325,12 +325,19 @@ void HttpStreamReader::run() m_handle = curl_easy_init(); //proxy if (QmmpSettings::instance()->isProxyEnabled()) + { curl_easy_setopt(m_handle, CURLOPT_PROXY, strdup((QmmpSettings::instance()->proxy().host() + ":" + QString("%1").arg(QmmpSettings::instance()->proxy().port())). toLatin1 ().constData ())); + + if(QmmpSettings::instance()->proxyType() == QmmpSettings::SOCKS5_PROXY) + curl_easy_setopt(m_handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + } else + { curl_easy_setopt(m_handle, CURLOPT_NOPROXY, "*"); + } if (QmmpSettings::instance()->useProxyAuth()) curl_easy_setopt(m_handle, CURLOPT_PROXYUSERPWD, diff --git a/src/qmmp/qmmpsettings.cpp b/src/qmmp/qmmpsettings.cpp index 158c4d9ad..a078d0613 100644 --- a/src/qmmp/qmmpsettings.cpp +++ b/src/qmmp/qmmpsettings.cpp @@ -42,7 +42,7 @@ QmmpSettings::QmmpSettings(QObject *parent) : QObject(parent) settings.endGroup(); //audio settings m_aud_software_volume = settings.value("Output/software_volume", false).toBool(); - m_aud_format = (Qmmp::AudioFormat) settings.value("Output/format", Qmmp::PCM_S16LE).toInt(); + m_aud_format = static_cast(settings.value("Output/format", Qmmp::PCM_S16LE).toInt()); m_aud_dithering = settings.value("Output/dithering", true).toBool(); m_volume_step = settings.value("Output/volume_step", 5).toInt(); //cover settings @@ -55,6 +55,7 @@ QmmpSettings::QmmpSettings(QObject *parent) : QObject(parent) //network settings m_proxy_enabled = settings.value("Proxy/use_proxy", false).toBool(); m_proxy_auth = settings.value("Proxy/authentication", false).toBool(); + m_proxy_type = static_cast(settings.value("Proxy/proxy_type", HTTP_PROXY).toInt()); m_proxy_url = settings.value("Proxy/url").toUrl(); //buffer m_buffer_size = settings.value("Output/buffer_size", 500).toInt(); @@ -168,10 +169,16 @@ const QUrl &QmmpSettings::proxy() const return m_proxy_url; } -void QmmpSettings::setNetworkSettings(bool use_proxy, bool auth, const QUrl &proxy) +QmmpSettings::ProxyType QmmpSettings::proxyType() const +{ + return m_proxy_type; +} + +void QmmpSettings::setNetworkSettings(bool use_proxy, bool auth, ProxyType type, const QUrl &proxy) { m_proxy_enabled = use_proxy; m_proxy_auth = auth; + m_proxy_type = type; m_proxy_url = proxy; m_timer->start(); emit networkSettingsChanged(); @@ -250,6 +257,7 @@ void QmmpSettings::sync() settings.setValue("Proxy/use_proxy", m_proxy_enabled); settings.setValue("Proxy/authentication", m_proxy_auth); settings.setValue("Proxy/url", m_proxy_url); + settings.setValue("Proxy/proxy_type", m_proxy_type); //equalizer settings settings.beginGroup(QString("Equalizer_%1").arg(m_eq_settings.bands())); for (int i = 0; i < m_eq_settings.bands(); ++i) diff --git a/src/qmmp/qmmpsettings.h b/src/qmmp/qmmpsettings.h index 1588c382c..97e33f282 100644 --- a/src/qmmp/qmmpsettings.h +++ b/src/qmmp/qmmpsettings.h @@ -36,6 +36,21 @@ class QMMP_EXPORT QmmpSettings : public QObject { Q_OBJECT public: + /*! + * This enum describes possible replaygain modes. + */ + enum ReplayGainMode + { + REPLAYGAIN_TRACK = 0, /*!< Use track gain/peak */ + REPLAYGAIN_ALBUM, /*!< Use album gain/peak */ + REPLAYGAIN_DISABLED /*!< Disable ReplayGain */ + }; + + enum ProxyType + { + HTTP_PROXY = 0, + SOCKS5_PROXY + }; /*! * Constructor. * @param parent Parent object. @@ -46,15 +61,6 @@ public: * Destructor. */ virtual ~QmmpSettings(); - /*! - * This enum describes possible replaygain modes. - */ - enum ReplayGainMode - { - REPLAYGAIN_TRACK = 0, /*!< Use track gain/peak */ - REPLAYGAIN_ALBUM, /*!< Use album gain/peak */ - REPLAYGAIN_DISABLED /*!< Disable ReplayGain */ - }; /*! * Returns current ReplayGain mode. */ @@ -133,13 +139,14 @@ public: * Returns global proxy url. */ const QUrl &proxy() const; + ProxyType proxyType() const; /*! * Sets network settings. * @param use_proxy Enables or disables global proxy. * @param auth Enables or disables proxy authentication. * @param proxy Proxy url. */ - void setNetworkSettings(bool use_proxy, bool auth, const QUrl &proxy); + void setNetworkSettings(bool use_proxy, bool auth, ProxyType type, const QUrl &proxy); /*! * Returns equalizer settings. */ @@ -234,6 +241,7 @@ private: bool m_proxy_enabled; bool m_proxy_auth; QUrl m_proxy_url; + ProxyType m_proxy_type; //equalizer settings EqSettings m_eq_settings; //buffer size diff --git a/src/qmmpui/configdialog.cpp b/src/qmmpui/configdialog.cpp index 599026f1b..47764e2dd 100644 --- a/src/qmmpui/configdialog.cpp +++ b/src/qmmpui/configdialog.cpp @@ -69,6 +69,8 @@ ConfigDialog::ConfigDialog (QWidget *parent) : QDialog (parent) #ifndef Q_OS_WIN m_ui->bitDepthComboBox->addItem("32 (float)", Qmmp::PCM_FLOAT); #endif + m_ui->proxyTypeComboBox->addItem(tr("HTTP"), QmmpSettings::HTTP_PROXY); + m_ui->proxyTypeComboBox->addItem(tr("SOCKS5"), QmmpSettings::SOCKS5_PROXY); readSettings(); loadPluginsInfo(); loadLanguages(); @@ -131,6 +133,7 @@ void ConfigDialog::readSettings() m_ui->enableProxyCheckBox->setChecked(gs->isProxyEnabled()); m_ui->authProxyCheckBox->setChecked(gs->useProxyAuth()); m_ui->hostLineEdit->setText(gs->proxy().host()); + m_ui->proxyTypeComboBox->setCurrentIndex(m_ui->proxyTypeComboBox->findData(gs->proxyType())); if (gs->proxy().port(0)) m_ui->portLineEdit->setText(QString::number(gs->proxy().port(0))); m_ui->proxyUserLineEdit->setText(gs->proxy().userName()); @@ -138,6 +141,7 @@ void ConfigDialog::readSettings() m_ui->hostLineEdit->setEnabled(m_ui->enableProxyCheckBox->isChecked()); m_ui->portLineEdit->setEnabled(m_ui->enableProxyCheckBox->isChecked()); + m_ui->proxyTypeComboBox->setEnabled(m_ui->enableProxyCheckBox->isChecked()); m_ui->proxyUserLineEdit->setEnabled(m_ui->authProxyCheckBox->isChecked()); m_ui->proxyPasswLineEdit->setEnabled(m_ui->authProxyCheckBox->isChecked()); //file type determination @@ -404,6 +408,7 @@ void ConfigDialog::saveSettings() proxyUrl.setPassword(m_ui->proxyPasswLineEdit->text()); gs->setNetworkSettings(m_ui->enableProxyCheckBox->isChecked(), m_ui->authProxyCheckBox->isChecked(), + static_cast(m_ui->proxyTypeComboBox->currentData().toInt()), proxyUrl); gs->setCoverSettings(m_ui->coverIncludeLineEdit->text().split(","), diff --git a/src/qmmpui/forms/configdialog.ui b/src/qmmpui/forms/configdialog.ui index 93ed345dc..0960b807a 100644 --- a/src/qmmpui/forms/configdialog.ui +++ b/src/qmmpui/forms/configdialog.ui @@ -517,19 +517,7 @@ - - - 9 - - - 5 - - - 0 - - - 0 - + @@ -541,7 +529,7 @@ false - + @@ -550,6 +538,16 @@ + + + Proxy type: + + + + + + + Proxy host name: @@ -559,10 +557,10 @@ - + - + Proxy port: @@ -572,17 +570,17 @@ - + - + Use authentication with proxy - + Proxy user name: @@ -592,10 +590,10 @@ - + - + Proxy password: @@ -605,7 +603,7 @@ - + QLineEdit::Password @@ -915,12 +913,12 @@ setEnabled(bool) - 275 - 37 + 480 + 63 - 275 - 37 + 617 + 131 @@ -931,12 +929,12 @@ setEnabled(bool) - 275 - 37 + 480 + 63 - 275 - 37 + 617 + 163 @@ -947,12 +945,12 @@ setEnabled(bool) - 275 - 37 + 617 + 192 - 275 - 37 + 617 + 224 @@ -963,12 +961,12 @@ setEnabled(bool) - 275 - 37 + 617 + 192 - 272 - 37 + 617 + 256 @@ -1011,12 +1009,12 @@ setEnabled(bool) - 275 - 37 + 480 + 192 - 275 - 37 + 617 + 194 @@ -1036,5 +1034,21 @@ + + enableProxyCheckBox + toggled(bool) + proxyTypeComboBox + setEnabled(bool) + + + 342 + 55 + + + 356 + 88 + + + diff --git a/src/qmmpui/playlistdownloader.cpp b/src/qmmpui/playlistdownloader.cpp index 6ea9785ef..122b8ba97 100644 --- a/src/qmmpui/playlistdownloader.cpp +++ b/src/qmmpui/playlistdownloader.cpp @@ -37,6 +37,8 @@ PlayListDownloader::PlayListDownloader(QObject *parent) : QObject(parent) if (gs->isProxyEnabled()) { QNetworkProxy proxy(QNetworkProxy::HttpProxy, gs->proxy().host(), gs->proxy().port()); + if(gs->proxyType() == QmmpSettings::SOCKS5_PROXY) + proxy.setType(QNetworkProxy::Socks5Proxy); if(gs->useProxyAuth()) { proxy.setUser(gs->proxy().userName()); -- cgit v1.2.3-13-gbd6f