Как написать Android VpnService использовать C ++ - PullRequest
0 голосов
/ 23 июня 2019

Я пишу приложение VPN, когда я использую Java, все в порядке. но когда я использую собственный код c ++, он отправляет на мой удаленный хост в порядке, а также может получить пакет. Но кажется, что не могу писать в Tun FD. что я не прав?

//has problem

public int onStartCommand(Intent intent, int flags, int startId)
{
    Builder builder = new Builder();
    builder.setSession("MyVPNService");
    builder.addAddress("192.168.1.94", 24);
    builder.addDnsServer("8.8.8.8");
    builder.addRoute("0.0.0.0", 0);

    mInterface = builder.establish();
    final int fd = mInterface.getFd();
    //final int fd = mInterface.detachFd(); //no use

    int clientFd = getClientFd();
    protect(clientFd);

    new Thread(new Runnable() {
        @Override
        public void run() {
            int re = sendFd(fd);
        }
    }).start();

    return START_STICKY;
}
//my native code

if(events_in[i].data.fd == client_fd && events_in[i].events & EPOLLIN)
{
    struct sockaddr_in src = { 0 };
    socklen_t len = sizeof(struct sockaddr);;
    memset(buf, 0, MAX_BKG_LEN);
    int n = recvfrom(client_fd, buf, MAX_BKG_LEN, 0, (struct sockaddr*)&src, &len);
    write(fd, buf, n); //Did I wrong?
}
...