Android VpnService защищает сокет, который хранится в собственном коде?
Я пишу приложение VPN, и сокет, используемый для VPN-соединения, обрабатывается в моем родном коде C, а не в Java. Как я использую VpnService.protect()
на этой розетке? Я заметил, что у него есть VpnService.protect(int)
перегрузка, могу ли я вернуть int, что socket
возвращается из нативного кода в Java и защищает его таким образом?
пример
// Native Code
int socket;
JNIEXPORT jint JNICALL
Java_com_my_package_Class_initializeSocket
(
JNIEnv *env,
jobject jobj
) {
socket = socket(AF_INET, SOCK_DGRAM, 0);
// . . . Handler other socket preparations
return (jint)socket;
}
// Java Code
public native int initializeSocket();
. . .
int socket = initializeSocket();
this.protect(socket);
редактировать
Я нашел этот вопрос, который описывает, как protect
функция работает, и похоже, что она может иметь довольно простую реализацию в C, так как кажется, что она просто использует setsockopt
вызов. Но я также относительно новичок в C, поэтому не могу точно понять, как его повторить.
1 ответ
Я просто хотел проверить, что мои процессы были в силе, после завершения дополнительного тестирования я убедился, что он работает.
пример
// Native Code
int socket;
JNIEXPORT jint JNICALL
Java_com_my_package_Class_initializeSocket
(
JNIEnv *env,
jobject jobj
) {
socket = socket(AF_INET, SOCK_DGRAM, 0);
// . . . Handler other socket preparations
return (jint)socket;
}
// Java Code
public native int initializeSocket();
. . .
int socket = initializeSocket();
this.protect(socket);