diff --git a/bindings/java/src/jni/javasigar.c b/bindings/java/src/jni/javasigar.c index c8143001..6a5e9cc0 100644 --- a/bindings/java/src/jni/javasigar.c +++ b/bindings/java/src/jni/javasigar.c @@ -410,7 +410,7 @@ JNIEXPORT jobjectArray SIGAR_JNI(Sigar_getFileSystemListNative) return fsarray; } -JNIEXPORT jboolean SIGAR_JNI(RPC_ping) +JNIEXPORT jint SIGAR_JNI(RPC_ping) (JNIEnv *env, jclass cls_obj, jstring jhostname, jint protocol, jlong program, jlong version) { @@ -419,23 +419,23 @@ JNIEXPORT jboolean SIGAR_JNI(RPC_ping) #else jboolean is_copy; const char *hostname; - jboolean retval; + int status; if (!jhostname) { - return JNI_FALSE; + return 13; /* RPC_UNKNOWNHOST */ } hostname = JENV->GetStringUTFChars(env, jhostname, &is_copy); - retval = - (sigar_rpc_ping((char *)hostname, - protocol, program, version) == SIGAR_OK); + status = + sigar_rpc_ping((char *)hostname, + protocol, program, version); if (is_copy) { JENV->ReleaseStringUTFChars(env, jhostname, hostname); } - return retval; + return status; #endif } diff --git a/bindings/java/src/net/hyperic/sigar/NfsFileSystem.java b/bindings/java/src/net/hyperic/sigar/NfsFileSystem.java index 4a9bb251..a99bff0a 100644 --- a/bindings/java/src/net/hyperic/sigar/NfsFileSystem.java +++ b/bindings/java/src/net/hyperic/sigar/NfsFileSystem.java @@ -30,7 +30,7 @@ public class NfsFileSystem extends FileSystem { } public boolean ping() { - return RPC.ping(getHostname(), NFS_PROGRAM); + return RPC.ping(getHostname(), NFS_PROGRAM) == 0; } public String getUnreachableMessage() { diff --git a/bindings/java/src/net/hyperic/sigar/RPC.java b/bindings/java/src/net/hyperic/sigar/RPC.java index 4361cbb4..6a770f4d 100644 --- a/bindings/java/src/net/hyperic/sigar/RPC.java +++ b/bindings/java/src/net/hyperic/sigar/RPC.java @@ -11,26 +11,26 @@ public class RPC { public static final int UDP = NetFlags.CONN_UDP; public static final int TCP = NetFlags.CONN_TCP; - public static native boolean ping(String hostname, - int protocol, - long program, - long version); + public static native int ping(String hostname, + int protocol, + long program, + long version); - public static boolean ping(String hostname, - int protocol, - String program, - long version) { + public static int ping(String hostname, + int protocol, + String program, + long version) { return ping(hostname, protocol, getProgram(program), version); } - public static boolean ping(String hostname, long program) { + public static int ping(String hostname, long program) { return ping(hostname, UDP, program, 2); } - public static boolean ping(String hostname, String program) { + public static int ping(String hostname, String program) { return ping(hostname, UDP, program, 2); } diff --git a/src/sigar_util.c b/src/sigar_util.c index 60431346..72d9ddc2 100644 --- a/src/sigar_util.c +++ b/src/sigar_util.c @@ -493,7 +493,7 @@ int sigar_cpu_mhz_from_model(char *model) #include #endif -static int get_sockaddr(struct sockaddr_in *addr, char *host) +static enum clnt_stat get_sockaddr(struct sockaddr_in *addr, char *host) { register struct hostent *hp; @@ -502,12 +502,12 @@ static int get_sockaddr(struct sockaddr_in *addr, char *host) if ((addr->sin_addr.s_addr = inet_addr(host)) == -1) { if (!(hp = sigar_gethostbyname(host))) { - return -1; + return RPC_UNKNOWNHOST; } memcpy(&addr->sin_addr, hp->h_addr, hp->h_length); } - return SIGAR_OK; + return RPC_SUCCESS; } SIGAR_DECLARE(int) sigar_rpc_ping(char *host, @@ -517,13 +517,14 @@ SIGAR_DECLARE(int) sigar_rpc_ping(char *host, { CLIENT *client; struct sockaddr_in addr; - int sock, retval=SIGAR_OK; + int sock; struct timeval timeout, interval; unsigned short port = 0; enum clnt_stat rpc_stat; - if (get_sockaddr(&addr, host) != SIGAR_OK) { - return -1; + rpc_stat = get_sockaddr(&addr, host); + if (rpc_stat != RPC_SUCCESS) { + return rpc_stat; } interval.tv_sec = 2; @@ -533,7 +534,7 @@ SIGAR_DECLARE(int) sigar_rpc_ping(char *host, client = clntudp_create(&addr, program, version, interval, &sock); if (!client) { - return -1; + return RPC_FAILED; } timeout.tv_sec = 10; @@ -542,12 +543,12 @@ SIGAR_DECLARE(int) sigar_rpc_ping(char *host, (xdrproc_t)xdr_void, NULL, timeout); if (rpc_stat != RPC_SUCCESS) { - retval = -1; + return rpc_stat; } clnt_destroy(client); - return retval; + return RPC_SUCCESS; } #endif