ネットワークインターフェース情報の取得(3)

作業を本題のJavaでネットワークインターフェースの情報を取得するロジックに戻して・・・。


単純に一覧にして取得するところまでは昨日のロジックで完了していたので、インターフェース番号からとインターフェース名から情報を取得するメソッドを追加します。
IfInfo.javaに以下の2つのメソッドを追加して、

    public static native IfInfo getInterfaceByIndex(long index);
    public static native IfInfo getInterfaceByName(String name);

いつものようにコンパイルとヘッダファイルの生成。


次に、jniに必要なロジックを追加します。

JNIEXPORT jobject JNICALL Java_net_IfInfo_getInterfaceByIndex(JNIEnv *env, jclass cls, jlong index) {
    jobject one_interface = NULL;

    IfInfo info = IfInfo::findInterfaceByIndex((int)index);
    if (info.getIndex() > 0) {
        one_interface = load_class(env, info);
    }
    return one_interface;
}

JNIEXPORT jobject JNICALL Java_net_IfInfo_getInterfaceByName(JNIEnv *env, jclass cls, jstring name) {
    jobject one_interface = NULL;

    const jchar *words = env->GetStringChars(name, NULL);
    _bstr_t name_str = _bstr_t((wchar_t *)words);
    env->ReleaseStringChars(name, words);
    String name_value = String((_TCHAR *)name_str);
    IfInfo info = IfInfo::findInterfaceByName(name_value);
    if (info.getIndex() > 0) {
        one_interface = load_class(env, info);
    }
    return one_interface;
}

Javaのテストに

    IfInfo ni = IfInfo.getInterfaceByName("ローカル エリア接続");
    System.out.println("Found interface:");
    print(ni);

を追加すると、完了!