Establecer una conexión VPN programáticamente en Android 4.0

Estoy trabajando para configurar mediante programación una conexión VPN en dispositivos Android. Pude hacerlo con éxito para dispositivos que usaban OS 2.3.5 y antes (usé la reflexión para llegar a las clases ocultas). Pero con Android 4.0 se deshicieron de las clases anteriores y usaron la clase VPNService en su lugar.

Pensé que el mejor lugar para comenzar sería usar el ejemplo de Android de ToyVPN provisto, pero me enfrento a muchos desafíos. En el código de ejemplo solo necesitaban enviar la dirección del servidor:

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

Y luego creó el túnel VPN abriendo el canal:

tunnel = DatagramChannel.open();

Pero en mi caso necesito enviar la dirección del servidor, nombre de usuario y contraseña. Hasta ahora no he descubierto cómo hacerlo. Mi mejor conjetura fue hacer algo como esto:

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

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

        tunnel = DatagramChannel.open();

Pero esto no funciono. así que lo que estoy preguntando es:

¿Hay alguna otra forma, aparte de lo que se usa en ToyVpn, para crear una conexión VPN mediante programación?De lo contrario, ¿cómo envío las credenciales cuando quiero establecer una conexión con el servidor?

Editar

Olvidé mencionar que necesito especificar el tipo de VPN (PPTP, L2TP, L2TP / IPSec PSK o L2TP / IPSec CRT).

Respuestas a la pregunta(2)

Su respuesta a la pregunta