diff --git a/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.cpp b/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.cpp index 91691e4067f8a010c2c98eeca67d0bede97f5b83..3362f4b248edb1d846ce3cfe53e1e7554954bca4 100644 --- a/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.cpp +++ b/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.cpp @@ -214,15 +214,15 @@ ChChainNetSrvVpn::ChChainNetSrvVpn(DapStreamer * a_streamer, DapSession * mainDa { tun = new DapTunNative(); m_fdListener = nullptr; - connect(tun, &DapTunNative::created, this, &ChChainNetSrvVpn::tunCreated); - connect(tun, &DapTunNative::destroyed, this, &ChChainNetSrvVpn::tunDestroyed); - connect(tun, &DapTunNative::error , this, &ChChainNetSrvVpn::tunError); - connect(tun, &DapTunNative::packetOut, this, &ChChainNetSrvVpn::packetOut); - connect(tun, &DapTunNative::sendCmd, this, &ChChainNetSrvVpn::sendCmdAll); - connect(tun, &DapTunNative::bytesRead, this, &ChChainNetSrvVpn::bytesRead); - connect(tun, &DapTunNative::bytesWrite, this, &ChChainNetSrvVpn::bytesWrite); - connect(tun, &DapTunNative::nativeCreateRequest, this, &ChChainNetSrvVpn::sigTunNativeCreate); - connect(tun, &DapTunNative::nativeDestroyRequest, this, &ChChainNetSrvVpn::sigNativeDestroy); + connect(tun, &DapTunNative::created, this, &ChChainNetSrvVpn::tunCreated); + connect(tun, &DapTunNative::destroyed, this, &ChChainNetSrvVpn::tunDestroyed); + connect(tun, &DapTunNative::error, this, &ChChainNetSrvVpn::tunError); + connect(tun, &DapTunNative::packetOut, this, &ChChainNetSrvVpn::packetOut); + connect(tun, &DapTunNative::sendCmd, this, &ChChainNetSrvVpn::sendCmdAll); + connect(tun, &DapTunNative::bytesRead, this, &ChChainNetSrvVpn::bytesRead); + connect(tun, &DapTunNative::bytesWrite, this, &ChChainNetSrvVpn::bytesWrite); + connect(tun, &DapTunNative::nativeCreateRequest, this, &ChChainNetSrvVpn::sigTunNativeCreate); + connect(tun, &DapTunNative::nativeDestroyRequest, this, &ChChainNetSrvVpn::sigNativeDestroy); } /** @@ -257,13 +257,11 @@ void ChChainNetSrvVpn::packetOut(Dap::Stream::Packet *pkt) */ void ChChainNetSrvVpn::requestIP(quint32 a_usageId) { - emit netConfigRequested(); Dap::Stream::Packet * pktOut = reinterpret_cast<Dap::Stream::Packet*>(::calloc(1 ,sizeof(pktOut->header))); pktOut->header.op_code=STREAM_SF_PACKET_OP_CODE_RAW_L3_ADDR_REQUEST; pktOut->header.usage_id = a_usageId; qInfo() << "Request for IP with usage_id: " << pktOut->header.usage_id; packetOut(pktOut); - emit ipRequested(); } /** @@ -273,7 +271,6 @@ void ChChainNetSrvVpn::netConfigClear() { m_addr.clear(); m_gw.clear(); - emit netConfigCleared(); } /** @@ -309,6 +306,11 @@ void ChChainNetSrvVpn::tunCreate() QThread::msleep(1000); tunSocket = QtAndroid::androidService().callMethod<jint>("getTunSocket"); } + if (tunSocket == -1) { + qCritical() << "Permission denied!"; + emit androidPermissionDenied(); + return; + } qInfo() << "Socket num: " << tunSocket; workerStart(tunSocket); #else @@ -318,6 +320,11 @@ void ChChainNetSrvVpn::tunCreate() // +void ChChainNetSrvVpn::tunStandby() +{ + tun->standby(); +} + void ChChainNetSrvVpn::tunDestroy() { tun->destroy(); @@ -334,6 +341,10 @@ void ChChainNetSrvVpn::workerStart(int a_tunSocket) tun->workerStart(); // start loop } +int ChChainNetSrvVpn::tunSocket() { + return tun->m_tunSocket; +} + /** * @brief ChChainNetSrvVpn::onPktIn * @param pkt diff --git a/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.h b/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.h index f31ee99b062c27eac2f4b9df70a3b6dcd00b386a..268476cf5237616c2c52423ef3efa6563675be17 100644 --- a/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.h +++ b/stream/ch/chain/net/srv/vpn/DapStreamChChainNetSrvVpn.h @@ -106,15 +106,17 @@ namespace Dap { void sigTunNativeCreate(); void sigNativeDestroy(); - public: ChChainNetSrvVpn(DapStreamer * a_streamer, DapSession * mainDapSession); bool isTunCreated(){return tun->isCreated();} + void addNewUpstreamRoute(const QString &a_dest) { + tun->addNewUpstreamRoute(a_dest); + } void tunCreate (const QString& a_addr, const QString& a_gw); void workerStart(int a_tunSocket); - + int tunSocket(); quint16 addForwarding(const QString remoteAddr, quint16 remotePort, quint16 localPort); void delForwarding(int sockId); void delForwardingAll(); @@ -123,16 +125,13 @@ namespace Dap { signals: void netConfigReceived(QString,QString); - void netConfigRequested(); void netConfigReceivedSame(); - void netConfigCleared(); void tunCreated(); void tunDestroyed(); void tunError(const QString&); + void androidPermissionDenied(); void tunWriteData(); - void ipRequested(); - void sendCmdAll(const QString&); public slots: void onPktIn(DapChannelPacket *pkt) override; @@ -143,6 +142,7 @@ namespace Dap { void tunCreate(); // create with all predefined before values void tunDestroy(); + void tunStandby(); }; }