Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Qt IOS Application Extension - Packet Tunnel for Custom VPN Functionality
Forum Updated to NodeBB v4.3 + New Features

Qt IOS Application Extension - Packet Tunnel for Custom VPN Functionality

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
3 Posts 2 Posters 182 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • O Offline
    O Offline
    Ozan Cansel
    wrote last edited by
    #1

    I am trying to create an application extension which provides vpn functionality over network extension with packet-tunnel. But when I enable vpn it doesn't call related callbacks.

    Currently, i didn't find any example in qt documentation. So I read the documents of ios and qt and trying to find the right path.

    Here is the CMakeLists.txt

    add_executable(overlay-service MACOSX_BUNDLE main.cpp tunnel_provider.h tunnel_provider.mm)
       
       set_target_properties(overlay-service PROPERTIES
           MACOSX_BUNDLE_IDENTIFIER org.zenarmor.zenoverlay.network-extension
           BUNDLE YES
           XCODE_PRODUCT_TYPE com.apple.product-type.app-extension
           # XCODE_EMBED_FRAMEWORKS /System/Library/Frameworks/NetworkExtension.framework
       )
    
    target_link_libraries(
       overlay-service
    
       PUBLIC
           Qt6::CorePrivate
           overlay-lib
    )
    

    tunnel_provider.h

    #ifndef _TUNNEL_PROVIDER_H
    #define _TUNNEL_PROVIDER_H
    
    #import <Foundation/Foundation.h>
    #import <NetworkExtension/NetworkExtension.h>
    
    @interface ZenTunnelProvider : NEPacketTunnelProvider {
        int fd;
    }
    
    - (void) startTunnelWithOptions:(NSDictionary<NSString *,NSObject *> *) options
                  completionHandler:(void (^)(NSError * error)) completionHandler;
    - (void) stopTunnelWithReason:(NEProviderStopReason) reason
                completionHandler:(void (^)()) completionHandler;
    @end
    
    #endif
    

    tunnel_provider.mm

    #import "tunnel_provider.h"
    #import <Foundation/Foundation.h>
    #import <os/log.h>
    
    @implementation ZenTunnelProvider
    - (void) startTunnelWithOptions:(NSDictionary<NSString *,NSObject *> *) options
                  completionHandler:(void (^)(NSError * error)) completionHandler {
    
        NSLog(@"===================== Tunnel Started, x=%i, %@", 5, self.protocolConfiguration);
    
        completionHandler(nil);
    }
    - (void) stopTunnelWithReason:(NEProviderStopReason) reason
                completionHandler:(void (^)()) completionHandler{
        NSLog(@"===================== Tunnel Stopped");;
        completionHandler();
    }
    
    @end
    

    How I create configuration is:

            NETunnelProviderProtocol *provider_protocol = [[NETunnelProviderProtocol alloc] init];
    
            provider_protocol.providerBundleIdentifier = @"org.zenarmor.zenoverlay.packet-tunnel";
            provider_protocol.serverAddress = @"0.0.0.0";
            provider_protocol.providerConfiguration = @{
                @"helloString" : @"Hello, World!",
                @"magicNumber" : @42
            };
    
          NSLog(@"===================== Vpn configuration is written, x=%i", 5);
    
            vpn_manager.protocolConfiguration = provider_protocol;
            vpn_manager.localizedDescription  = @"ZenOverlayTunnel";
            vpn_manager.enabled               = true;
    
            [vpn_manager saveToPreferencesWithCompletionHandler:^(NSError * _Nullable error) {
                if (error)
                {
                    NSLog(@"err: %@", error);
                }
                else
                {
                    NSLog(@"Successfully saved");
                }
            }];
    

    Any help would be super beneficial for me.

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote last edited by
      #2

      Hi and welcome to devnet,

      Never used that class, sorry, but I found this StackOverflow answer that might give you some clues.

      Hope it helps

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • O Offline
        O Offline
        Ozan Cansel
        wrote last edited by
        #3

        Thank you, let me try, but I did all of them already :D Does QT have an exampe of app extension?

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved