diff --git a/bindings/java/src/jni/javasigar.c b/bindings/java/src/jni/javasigar.c index c10a2af8..97da4b36 100644 --- a/bindings/java/src/jni/javasigar.c +++ b/bindings/java/src/jni/javasigar.c @@ -862,13 +862,13 @@ JNIEXPORT void SIGAR_JNI(FileInfo_gatherLink) } JNIEXPORT jlong SIGAR_JNI(Sigar_getProcPort) -(JNIEnv *env, jobject sigar_obj, jlong port) +(JNIEnv *env, jobject sigar_obj, jint protocol, jlong port) { int status; sigar_pid_t pid; dSIGAR(0); - status = sigar_proc_port_get(sigar, SIGAR_NETCONN_TCP, /*XXX UDP*/ + status = sigar_proc_port_get(sigar, protocol, (unsigned long)port, &pid); if (status != SIGAR_OK) { sigar_throw_error(env, jsigar, status); diff --git a/bindings/java/src/net/hyperic/sigar/Sigar.java b/bindings/java/src/net/hyperic/sigar/Sigar.java index 9e3c89b3..29827734 100644 --- a/bindings/java/src/net/hyperic/sigar/Sigar.java +++ b/bindings/java/src/net/hyperic/sigar/Sigar.java @@ -465,10 +465,14 @@ public class Sigar implements SigarProxy { * @return pid of the process. * @exception SigarException on failure. */ - public native long getProcPort(long port) throws SigarException; + public native long getProcPort(int protocol, long port) + throws SigarException; - public long getProcPort(String port) throws SigarException { - return getProcPort(Integer.parseInt(port)); + public long getProcPort(String protocol, String port) + throws SigarException { + + return getProcPort(NetFlags.getConnectionProtocol(protocol), + Integer.parseInt(port)); } /** diff --git a/bindings/java/src/net/hyperic/sigar/SigarProxy.java b/bindings/java/src/net/hyperic/sigar/SigarProxy.java index 4fcbfd35..39857f09 100644 --- a/bindings/java/src/net/hyperic/sigar/SigarProxy.java +++ b/bindings/java/src/net/hyperic/sigar/SigarProxy.java @@ -83,9 +83,9 @@ public interface SigarProxy { public List getProcModules(String pid) throws SigarException; - public long getProcPort(long port) throws SigarException; + public long getProcPort(int protocol, long port) throws SigarException; - public long getProcPort(String port) throws SigarException; + public long getProcPort(String protocol, String port) throws SigarException; public FileSystem[] getFileSystemList() throws SigarException; diff --git a/bindings/java/src/net/hyperic/sigar/SynchronizedSigar.java b/bindings/java/src/net/hyperic/sigar/SynchronizedSigar.java index 4f4914f5..df057fbb 100644 --- a/bindings/java/src/net/hyperic/sigar/SynchronizedSigar.java +++ b/bindings/java/src/net/hyperic/sigar/SynchronizedSigar.java @@ -233,16 +233,16 @@ public class SynchronizedSigar implements SigarProxy { return this.sigar.getProcModules(pid); } - public synchronized long getProcPort(long port) + public synchronized long getProcPort(int protocol, long port) throws SigarException { - return this.sigar.getProcPort(port); + return this.sigar.getProcPort(protocol, port); } - public synchronized long getProcPort(String port) + public synchronized long getProcPort(String protocol, String port) throws SigarException { - return this.sigar.getProcPort(port); + return this.sigar.getProcPort(protocol, port); } public synchronized FileSystem[] getFileSystemList() diff --git a/bindings/java/src/net/hyperic/sigar/ptql/ProcessQueryBuilder.java b/bindings/java/src/net/hyperic/sigar/ptql/ProcessQueryBuilder.java index aab78868..b4c7e02b 100644 --- a/bindings/java/src/net/hyperic/sigar/ptql/ProcessQueryBuilder.java +++ b/bindings/java/src/net/hyperic/sigar/ptql/ProcessQueryBuilder.java @@ -9,6 +9,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; +import net.hyperic.sigar.NetFlags; +import net.hyperic.sigar.SigarException; import net.hyperic.sigar.SigarProxy; import org.apache.bcel.Constants; @@ -411,7 +413,8 @@ public class ProcessQueryBuilder { } //special case - public void appendProcPortOp(String flags, String op, long val) + public void appendProcPortOp(String flags, String op, + int protocol, long val) throws MalformedQueryException { //XXX flags current unused; could be used to narrow search scope. @@ -419,12 +422,17 @@ public class ProcessQueryBuilder { loadSigarArg(); + this.qi.append(new PUSH(this.pool, protocol)); + this.qi.append(new PUSH(this.pool, val)); //port this.qi.append(this.factory.createInvoke(PROXY_CLASS, "getProcPort", Type.LONG, - new Type[] { Type.LONG }, + new Type[] { + Type.INT, + Type.LONG + }, Constants.INVOKEINTERFACE)); loadPidArg(); @@ -693,6 +701,7 @@ public class ProcessQueryBuilder { } } else if (attrClass.equals("Port")) { + int protocol; long port; try { port = Long.parseLong(val); @@ -700,7 +709,13 @@ public class ProcessQueryBuilder { String msg = "Port value '" + val + "' is not a number"; throw new MalformedQueryException(msg); } - appendProcPortOp(attr, op, port); + try { + protocol = NetFlags.getConnectionProtocol(attr); + } catch (SigarException e) { + throw new MalformedQueryException(e.getMessage()); + } + + appendProcPortOp(attr, op, protocol, port); } else if (attrClass.equals("Pid")) { appendPidOp(op, val); diff --git a/bindings/java/src/net/hyperic/sigar/test/Proxy.java b/bindings/java/src/net/hyperic/sigar/test/Proxy.java index 0512a726..2ee86556 100644 --- a/bindings/java/src/net/hyperic/sigar/test/Proxy.java +++ b/bindings/java/src/net/hyperic/sigar/test/Proxy.java @@ -247,8 +247,12 @@ public class Proxy { objArgs = new Object[] { arg }; break; case 2: - //XXX assume ProcEnv for now. - objArgs = new Object[] { arg, "SHELL" }; + if (type.equals("ProcEnv")) { + objArgs = new Object[] { arg, "SHELL" }; + } + else if (type.equals("ProcPort")) { + objArgs = new Object[] { "tcp", "80" }; + } break; } } diff --git a/bindings/java/src/net/hyperic/sigar/test/TestPTQL.java b/bindings/java/src/net/hyperic/sigar/test/TestPTQL.java index f0fbbbd8..73bfb7de 100644 --- a/bindings/java/src/net/hyperic/sigar/test/TestPTQL.java +++ b/bindings/java/src/net/hyperic/sigar/test/TestPTQL.java @@ -66,6 +66,7 @@ public class TestPTQL extends SigarTestCase { "Pid.Pid.eq=foo", "Pid.Service.ne=Eventlog", "Cpu.Percent.ge=x", + "Port.foo.eq=8080", "", null };