bool X_IsSockaddrEqualsInetSocketAddress(JNIEnv* env, sockaddr* sockAddr, jobject socketAddress) { CHK_NUL_RET_FLS(env, "env"); CHK_NUL_RET_FLS(sockAddr, "sockAddr"); CHK_NUL_RET_FLS(socketAddress, "socketAddress"); sockaddr_in* sockAddrIn = (sockaddr_in*) sockAddr; jint address1 = ntohl(sockAddrIn->sin_addr.s_addr); jint port1 = ntohs(sockAddrIn->sin_port); jobject objInetAddress = env->GetObjectField(socketAddress, isa_InetAddressID); CHK_NUL_RET_FLS(objInetAddress, "objInetAddress"); jint address2 = env->GetIntField(objInetAddress, ia_AddressID); jint port2 = env->GetIntField(socketAddress, isa_PortID); if (address1 == address2 && port1 == port2) { return true; } return false; }
bool X_IsSockaddrEqualsInetSocketAddress(JNIEnv* env, sockaddr* sockAddr, jobject socketAddress) { CHK_NUL_RET_FLS(env, "env"); CHK_NUL_RET_FLS(sockAddr, "sockAddr"); CHK_NUL_RET_FLS(socketAddress, "socketAddress"); sockaddr_in* sockAddrIn = (sockaddr_in*) sockAddr; jint address1 = ntohl(sockAddrIn->sin_addr.s_addr); jint port1 = ntohs(sockAddrIn->sin_port); jobject objInetAddress = env->CallObjectMethod(socketAddress, jdk_clsInetSocketAddress_getAddressID); CHK_NUL_RET_FLS(objInetAddress, "objInetAddress"); // FIXME private field access jint address2 = env->GetIntField(objInetAddress, ia_AddressID); jint port2 = env->CallIntMethod(socketAddress, jdk_clsInetSocketAddress_getAddressID); if (address1 == address2 && port1 == port2) { return true; } return false; }
bool X_IsSockaddrEqualsInetSocketAddress( // JNIEnv* env, // sockaddr* sockAddr, // jobject objSocketAddress // ) { CHK_NUL_RET_FLS(env, "env"); CHK_NUL_RET_FLS(sockAddr, "sockAddr"); CHK_NUL_RET_FLS(objSocketAddress, "objSocketAddress"); sockaddr_in* sockAddrIn = (sockaddr_in*) sockAddr; jint address1 = ntohl(sockAddrIn->sin_addr.s_addr); jint port1 = ntohs(sockAddrIn->sin_port); jint address2 = 0; jint port2 = env->CallIntMethod(objSocketAddress, jdk_InetSocketAddress_getPort); jobject objInetAddress = env->CallObjectMethod(objSocketAddress, jdk_InetSocketAddress_getAddress); CHK_NUL_RET_ERR(objInetAddress, "objInetAddress"); const int rv = X_ConvertInetAddressToInteger(env, objInetAddress, &address2); if (rv == JNI_ERR) { return false; } if (address1 == address2 && port1 == port2) { return true; } return false; }