diff --git a/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.cpp b/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.cpp index 91a9acaf80713b3c39c59b0c10371ba80158833a..4f921d17bea5ead635249962d3517d5456f2dbc7 100644 --- a/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.cpp +++ b/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.cpp @@ -43,6 +43,12 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic #include <winsock2.h> #endif +#ifdef Q_OS_ANDROID +#include <QtAndroid> +#include <QAndroidJniEnvironment> +#include <QAndroidJniObject> +#endif + #include <QProcess> #include <QFile> @@ -291,28 +297,20 @@ void ChChainNetSrvVpn::tunCreate(const QString &a_addr, const QString &a_gw) */ void ChChainNetSrvVpn::tunCreate() { + qDebug()<< "tunCreate()"; tun->create(m_addr, m_gw, m_mainDapSession->upstreamAddress(), m_mainDapSession->upstreamPort(), streamer()->upstreamSocket()); #ifdef ANDROID - if (m_fdListener == nullptr) { - m_fdListener = new QTcpServer(); - - connect(m_fdListener, &QTcpServer::newConnection, this, [&] { - qDebug() << "f0"; - auto pending = m_fdListener->nextPendingConnection(); - connect(pending, &QTcpSocket::readyRead, this, [=] { - if (pending) { - int val = pending->readAll().toInt(); - workerStart(val); - m_fdListener->close(); - } - }); - }); + jint tunSocket = -1; + for (; tunSocket <= 0;) { + QThread::msleep(1000); + tunSocket = QtAndroid::androidService().callMethod<jint>("getTunSocket"); + qInfo() << "Socket num: " << tunSocket; } - m_fdListener->listen(QHostAddress::LocalHost, 22500); + workerStart(tunSocket); #else tun->workerStart(); #endif