Definir uma conexão VPN programaticamente no android 4.0

Eu estou trabalhando em definir programaticamente uma conexão VPN em dispositivos Android. Eu consegui fazer isso com sucesso para dispositivos que usam o OS 2.3.5 e antes (usei a reflexão para acessar as classes ocultas). Mas com o Android 4.0 eles se livraram das classes antigas e usaram a classe VPNService.

Imaginei que o melhor lugar para começar seria usar o exemplo do Android do ToyVPN, mas estou enfrentando muitos desafios com ele. No código de exemplo, eles precisavam apenas enviar o endereço do servidor:

InetSocketAddress server = new InetSocketAddress(mServerAddress, Integer.parseInt(mServerPort));

E então criei o túnel VPN abrindo o canal:

tunnel = DatagramChannel.open();

Mas no meu caso eu preciso enviar o endereço do servidor, nome de usuário e senha. Até agora eu não descobri como fazer isso. Meu melhor palpite era fazer algo assim:

Authenticator.setDefault(new Authenticator(){
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("user","pass".toCharArray());
        }});

    try {
        // Create a DatagramChannel as the VPN tunnel.

        tunnel = DatagramChannel.open();

Mas isso não funcionou. então o que eu estou perguntando é:

Existe uma maneira, diferente do que é usado no ToyVpn, para criar uma conexão VPN programaticamente?Se não, como envio as credenciais quando desejo estabelecer uma conexão com o servidor?

Editar

Esqueci de mencionar que preciso especificar o tipo de VPN (PPTP, L2TP, L2TP / IPSec PSK ou L2TP / IPSec CRT).

questionAnswers(2)

yourAnswerToTheQuestion