mirror of
https://github.com/Qv2ray/Qv2ray.git
synced 2025-05-20 02:40:20 +08:00
[add] Added sock UDP and fixed a few bugs, now using a proper build versioning number
Former-commit-id: bfd5b5f042
This commit is contained in:
parent
984ded0c0d
commit
ef37928114
2
3rdparty/x2struct
vendored
2
3rdparty/x2struct
vendored
@ -1 +1 @@
|
||||
Subproject commit d397106558a75a41e760126c15efdf30ec9cc33f
|
||||
Subproject commit 07e828ddd2e0a78e565b61c2f135b12462947663
|
1
Build.Counter
Normal file
1
Build.Counter
Normal file
@ -0,0 +1 @@
|
||||
77
|
@ -11,9 +11,14 @@ TEMPLATE = app
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
CONFIG += c++11 openssl-linked lrelease embed_translations
|
||||
|
||||
VERSION = 1.99.99.5
|
||||
DEFINES += QV_MAJOR_VERSION=\"\\\"$${VERSION}\\\"\"
|
||||
# Now read build number file.
|
||||
_BUILD_NUMBER=$$cat(Build.Counter)
|
||||
_BUILD_NUMBER = $$num_add($$_BUILD_NUMBER, 1)
|
||||
write_file("Build.Counter", _BUILD_NUMBER)
|
||||
|
||||
VERSION = 1.99.99.$$_BUILD_NUMBER
|
||||
|
||||
DEFINES += QV_MAJOR_VERSION=\"\\\"$${VERSION}\\\"\"
|
||||
SOURCES += \
|
||||
src/main.cpp \
|
||||
src/QvConfigUpgrade.cpp \
|
||||
|
@ -62,6 +62,8 @@ namespace Qv2ray
|
||||
// SOCKS
|
||||
int socks_port;
|
||||
bool socks_useAuth;
|
||||
bool socksUDP;
|
||||
string socksLocalIP;
|
||||
AccountObject socksAccount;
|
||||
// HTTP
|
||||
int http_port;
|
||||
@ -73,8 +75,10 @@ namespace Qv2ray
|
||||
socks_port = socksPort;
|
||||
http_port = httpPort;
|
||||
listenip = listen;
|
||||
socksLocalIP = "0.0.0.0";
|
||||
socksUDP = true;
|
||||
}
|
||||
XTOSTRUCT(O(listenip, socks_port, socks_useAuth, socksAccount, http_port, http_useAuth, httpAccount))
|
||||
XTOSTRUCT(O(listenip, socks_port, socks_useAuth, socksAccount, socksUDP, socksLocalIP, http_port, http_useAuth, httpAccount))
|
||||
};
|
||||
|
||||
struct Qv2rayConfig {
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
#include "QvUtils.h"
|
||||
|
||||
#define UPDATELOG(msg) LOG(MODULE_CONFIG, "[" + to_string(fromVersion) + "-" + to_string(fromVersion + 1) + "] --> " msg)
|
||||
#define UPDATELOG(msg) LOG(MODULE_CONFIG, " [" + to_string(fromVersion) + "-" + to_string(fromVersion + 1) + "] --> " msg)
|
||||
|
||||
namespace Qv2ray
|
||||
{
|
||||
@ -78,6 +78,7 @@ namespace Qv2ray
|
||||
case 6: {
|
||||
root["enableStats"] = true;
|
||||
UPDATELOG("Default statistics enabled.")
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,7 +119,12 @@ namespace Qv2ray
|
||||
accounts.append(GetRootObject(acc));
|
||||
}
|
||||
|
||||
JADD(auth, accounts, udp, ip, userLevel)
|
||||
if (udp) {
|
||||
JADD(auth, accounts, udp, ip, userLevel)
|
||||
} else {
|
||||
JADD(auth, accounts, userLevel)
|
||||
}
|
||||
|
||||
RROOT
|
||||
}
|
||||
|
||||
@ -208,7 +213,10 @@ namespace Qv2ray
|
||||
socksInBoundObject.insert("port", gConf.inBoundSettings.socks_port);
|
||||
socksInBoundObject.insert("protocol", "socks");
|
||||
socksInBoundObject.insert("tag", "socks_IN");
|
||||
auto socksInSettings = GenerateSocksIN(gConf.inBoundSettings.socks_useAuth ? "password" : "noauth", QList<AccountObject>() << gConf.inBoundSettings.socksAccount);
|
||||
auto socksInSettings = GenerateSocksIN(gConf.inBoundSettings.socks_useAuth ? "password" : "noauth",
|
||||
QList<AccountObject>() << gConf.inBoundSettings.socksAccount,
|
||||
gConf.inBoundSettings.socksUDP,
|
||||
QSTRING(gConf.inBoundSettings.socksLocalIP));
|
||||
socksInBoundObject.insert("settings", socksInSettings);
|
||||
inboundsList.append(socksInBoundObject);
|
||||
}
|
||||
@ -237,7 +245,7 @@ namespace Qv2ray
|
||||
// TODO
|
||||
//
|
||||
// We don't want to add MUX into the first one in the list.....
|
||||
// However, this can be added to the Connection Edit Window...
|
||||
// TODO: However, this can be added to the Connection Edit Window...
|
||||
//QJsonObject first = outbounds.first().toObject();
|
||||
//first.insert("mux", GetRootObject(gConf.mux));
|
||||
//outbounds[0] = first;
|
||||
|
@ -98,6 +98,7 @@ namespace Qv2ray
|
||||
void Qv2Instance::StopVCore()
|
||||
{
|
||||
vProcess->close();
|
||||
lastData = QMap<QString, long>();
|
||||
VCoreStatus = STOPPED;
|
||||
}
|
||||
|
||||
|
@ -104,6 +104,7 @@ int main(int argc, char *argv[])
|
||||
LOG(MODULE_UI, "Found Translator: " + lang.toStdString())
|
||||
}
|
||||
}
|
||||
|
||||
// Qv2ray Initialize
|
||||
if (!initQv())
|
||||
return -1;
|
||||
|
@ -159,20 +159,24 @@ void InboundEditor::on_httpRemoveUserBtn_clicked()
|
||||
PREPARE_RETURN
|
||||
|
||||
if (ui->httpAccountListBox->currentRow() != -1) {
|
||||
auto userpass = ui->httpAccountListBox->currentItem();
|
||||
auto item = ui->httpAccountListBox->currentItem();
|
||||
auto list = httpSettings["accounts"].toArray();
|
||||
|
||||
for (int i = 0 ; i < list.count(); i++) {
|
||||
auto user = list[i].toObject();
|
||||
auto entry = user["user"].toString() + ":" + user["pass"].toString();
|
||||
|
||||
if (user["user"].toString() + ":" + user["pass"].toString() == userpass->text()) {
|
||||
if (entry == item->text().trimmed()) {
|
||||
list.removeAt(i);
|
||||
ui->httpAccountListBox->removeItemWidget(userpass);
|
||||
return;
|
||||
httpSettings["accounts"] = list;
|
||||
LOG(MODULE_UI, "Removed http inbound user " + entry.toStdString())
|
||||
ui->httpAccountListBox->takeItem(ui->httpAccountListBox->currentRow());
|
||||
}
|
||||
}
|
||||
|
||||
//QvMessageBox(this, tr("Removing a user"), tr("No user has been removed. Why?"));
|
||||
} else {
|
||||
QvMessageBox(this, tr("Removing a user"), tr("You haven't selected a user yet,"));
|
||||
QvMessageBox(this, tr("Removing a user"), tr("You haven't selected a user yet."));
|
||||
}
|
||||
}
|
||||
|
||||
@ -193,13 +197,68 @@ void InboundEditor::on_httpAddUserBtn_clicked()
|
||||
}
|
||||
}
|
||||
|
||||
ui->httpAddUserTxt->clear();
|
||||
ui->httpAddPasswordTxt->clear();
|
||||
QJsonObject entry;
|
||||
entry["user"] = user;
|
||||
entry["pass"] = pass;
|
||||
list.append(entry);
|
||||
ui->httpAccountListBox->addItem(user + ":" + pass);
|
||||
httpSettings["accounts"] = list;
|
||||
}
|
||||
|
||||
void InboundEditor::on_socksRemoveUserBtn_clicked()
|
||||
{
|
||||
PREPARE_RETURN
|
||||
|
||||
if (ui->socksAccountListBox->currentRow() != -1) {
|
||||
auto item = ui->socksAccountListBox->currentItem();
|
||||
auto list = socksSettings["accounts"].toArray();
|
||||
|
||||
for (int i = 0 ; i < list.count(); i++) {
|
||||
auto user = list[i].toObject();
|
||||
auto entry = user["user"].toString() + ":" + user["pass"].toString();
|
||||
|
||||
if (entry == item->text().trimmed()) {
|
||||
list.removeAt(i);
|
||||
socksSettings["accounts"] = list;
|
||||
LOG(MODULE_UI, "Removed http inbound user " + entry.toStdString())
|
||||
ui->socksAccountListBox->takeItem(ui->socksAccountListBox->currentRow());
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
QvMessageBox(this, tr("Removing a user"), tr("You haven't selected a user yet."));
|
||||
}
|
||||
}
|
||||
|
||||
void InboundEditor::on_socksAddUserBtn_clicked()
|
||||
{
|
||||
PREPARE_RETURN
|
||||
auto user = ui->socksAddUserTxt->text();
|
||||
auto pass = ui->socksAddPasswordTxt->text();
|
||||
//
|
||||
auto list = socksSettings["accounts"].toArray();
|
||||
|
||||
for (int i = 0 ; i < list.count(); i++) {
|
||||
auto _user = list[i].toObject();
|
||||
|
||||
if (_user["user"].toString() == user) {
|
||||
QvMessageBox(this, tr("Add a user"), tr("This user exists already."));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ui->socksAddUserTxt->clear();
|
||||
ui->socksAddPasswordTxt->clear();
|
||||
QJsonObject entry;
|
||||
entry["user"] = user;
|
||||
entry["pass"] = pass;
|
||||
list.append(entry);
|
||||
ui->socksAccountListBox->addItem(user + ":" + pass);
|
||||
socksSettings["accounts"] = list;
|
||||
}
|
||||
|
||||
void InboundEditor::on_strategyCombo_currentIndexChanged(const QString &arg1)
|
||||
{
|
||||
PREPARE_RETURN
|
||||
@ -259,52 +318,6 @@ void InboundEditor::on_socksUserLevelSB_valueChanged(int arg1)
|
||||
socksSettings["userLevel"] = arg1;
|
||||
}
|
||||
|
||||
void InboundEditor::on_socksRemoveUserBtn_clicked()
|
||||
{
|
||||
PREPARE_RETURN
|
||||
|
||||
if (ui->socksAccountListBox->currentRow() != -1) {
|
||||
auto userpass = ui->socksAccountListBox->currentItem();
|
||||
auto list = socksSettings["accounts"].toArray();
|
||||
|
||||
for (int i = 0 ; i < list.count(); i++) {
|
||||
auto user = list[i].toObject();
|
||||
|
||||
if (user["user"].toString() + ":" + user["pass"].toString() == userpass->text()) {
|
||||
list.removeAt(i);
|
||||
ui->socksAccountListBox->removeItemWidget(userpass);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
QvMessageBox(this, tr("Removing a user"), tr("You haven't selected a user yet,"));
|
||||
}
|
||||
}
|
||||
|
||||
void InboundEditor::on_socksAddUserBtn_clicked()
|
||||
{
|
||||
PREPARE_RETURN
|
||||
auto user = ui->socksAddUserTxt->text();
|
||||
auto pass = ui->socksAddPasswordTxt->text();
|
||||
//
|
||||
auto list = socksSettings["accounts"].toArray();
|
||||
|
||||
for (int i = 0 ; i < list.count(); i++) {
|
||||
auto _user = list[i].toObject();
|
||||
|
||||
if (_user["user"].toString() == user) {
|
||||
QvMessageBox(this, tr("Add a user"), tr("This user exists already."));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
QJsonObject entry;
|
||||
entry["user"] = user;
|
||||
entry["pass"] = pass;
|
||||
list.append(entry);
|
||||
socksSettings["accounts"] = list;
|
||||
}
|
||||
|
||||
void InboundEditor::on_dokoIPAddrTxt_textEdited(const QString &arg1)
|
||||
{
|
||||
PREPARE_RETURN
|
||||
|
@ -294,7 +294,7 @@
|
||||
<item row="4" column="0">
|
||||
<widget class="QStackedWidget" name="stackedWidget">
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="HTTPPage">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
|
@ -262,8 +262,8 @@ void MainWindow::on_stopButton_clicked()
|
||||
ui->startButton->setEnabled(true);
|
||||
ui->stopButton->setEnabled(false);
|
||||
//
|
||||
ui->netspeedLabel->setText("");
|
||||
ui->dataamountLabel->setText("");
|
||||
ui->netspeedLabel->setText("0.00 B/s\r\n0.00 B/s");
|
||||
ui->dataamountLabel->setText("0.00 B\r\n0.00 B");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -251,8 +251,8 @@
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0.00 KB/s
|
||||
0.00 KB/s</string>
|
||||
<string>0.00 B/s
|
||||
0.00 B/s</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -325,8 +325,8 @@
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0.00 KB
|
||||
0.00 KB</string>
|
||||
<string>0.00 B
|
||||
0.00 B</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -55,6 +55,10 @@ PrefrencesWindow::PrefrencesWindow(QWidget *parent) : QDialog(parent),
|
||||
ui->socksAuthPasswordTxt->setEnabled(have_socks && CurrentConfig.inBoundSettings.socks_useAuth);
|
||||
ui->socksAuthUsernameTxt->setText(QSTRING(CurrentConfig.inBoundSettings.socksAccount.user));
|
||||
ui->socksAuthPasswordTxt->setText(QSTRING(CurrentConfig.inBoundSettings.socksAccount.pass));
|
||||
// Socks UDP Options
|
||||
ui->socksUDPCB->setChecked(CurrentConfig.inBoundSettings.socksUDP);
|
||||
ui->socksUDPIP->setEnabled(CurrentConfig.inBoundSettings.socksUDP);
|
||||
ui->socksUDPIP->setText(QSTRING(CurrentConfig.inBoundSettings.socksLocalIP));
|
||||
//
|
||||
//
|
||||
ui->vCoreAssetsPathTxt->setText(QSTRING(CurrentConfig.v2AssetsPath));
|
||||
@ -363,3 +367,16 @@ void PrefrencesWindow::on_httpPortLE_valueChanged(int arg1)
|
||||
NEEDRESTART
|
||||
CurrentConfig.inBoundSettings.http_port = arg1;
|
||||
}
|
||||
|
||||
void PrefrencesWindow::on_socksUDPCB_stateChanged(int arg1)
|
||||
{
|
||||
NEEDRESTART
|
||||
CurrentConfig.inBoundSettings.socksUDP = arg1 == Qt::Checked;
|
||||
ui->socksUDPIP->setEnabled(arg1 == Qt::Checked);
|
||||
}
|
||||
|
||||
void PrefrencesWindow::on_socksUDPIP_textEdited(const QString &arg1)
|
||||
{
|
||||
NEEDRESTART
|
||||
CurrentConfig.inBoundSettings.socksLocalIP = arg1.toStdString();
|
||||
}
|
||||
|
@ -77,6 +77,10 @@ class PrefrencesWindow : public QDialog
|
||||
|
||||
void on_statsPortBox_valueChanged(int arg1);
|
||||
|
||||
void on_socksUDPCB_stateChanged(int arg1);
|
||||
|
||||
void on_socksUDPIP_textEdited(const QString &arg1);
|
||||
|
||||
private:
|
||||
bool IsConnectionPropertyChanged = false;
|
||||
bool finishedLoading = false;
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>710</width>
|
||||
<height>380</height>
|
||||
<height>417</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
@ -213,7 +213,11 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="listenIPTxt"/>
|
||||
<widget class="QLineEdit" name="listenIPTxt">
|
||||
<property name="placeholderText">
|
||||
<string notr="true">0.0.0.0</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
@ -271,7 +275,11 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="socksAuthUsernameTxt"/>
|
||||
<widget class="QLineEdit" name="socksAuthUsernameTxt">
|
||||
<property name="placeholderText">
|
||||
<string notr="true">user</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_12">
|
||||
@ -281,7 +289,39 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLineEdit" name="socksAuthPasswordTxt"/>
|
||||
<widget class="QLineEdit" name="socksAuthPasswordTxt">
|
||||
<property name="placeholderText">
|
||||
<string notr="true">pass</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_14">
|
||||
<property name="text">
|
||||
<string>SOCKS UDP</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_25">
|
||||
<property name="text">
|
||||
<string>Local IP</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QCheckBox" name="socksUDPCB">
|
||||
<property name="text">
|
||||
<string>Enabled</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QLineEdit" name="socksUDPIP">
|
||||
<property name="placeholderText">
|
||||
<string notr="true">127.0.0.1</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -341,7 +381,11 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="httpAuthUsernameTxt"/>
|
||||
<widget class="QLineEdit" name="httpAuthUsernameTxt">
|
||||
<property name="placeholderText">
|
||||
<string notr="true">user</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_13">
|
||||
@ -351,7 +395,11 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLineEdit" name="httpAuthPasswordTxt"/>
|
||||
<widget class="QLineEdit" name="httpAuthPasswordTxt">
|
||||
<property name="placeholderText">
|
||||
<string notr="true">pass</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -496,7 +544,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<item row="2" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
@ -529,7 +577,7 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="4" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
@ -580,7 +628,7 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="5" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_5">
|
||||
@ -631,7 +679,7 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<item row="9" column="0">
|
||||
<spacer name="verticalSpacer1">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
@ -644,7 +692,7 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<item row="9" column="1">
|
||||
<widget class="QPushButton" name="aboutQt">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
@ -657,7 +705,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<item row="7" column="0">
|
||||
<spacer name="verticalSpacer1_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
@ -670,7 +718,7 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<item row="8" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
@ -708,6 +756,39 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_26">
|
||||
<property name="text">
|
||||
<string>Built Time</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="qvBuildTime">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>10</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
Loading…
Reference in New Issue
Block a user