From 58f875583582d56264d0abc86ad0f530b82a5738 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Sun, 16 Sep 2007 18:35:25 +0000 Subject: [PATCH] NetServices move to native code --- bindings/java/src/jni/javasigar.c | 14 ++ .../src/org/hyperic/sigar/NetServices.java | 120 +++--------------- .../java/src/org/hyperic/sigar/Sigar.java | 2 + 3 files changed, 34 insertions(+), 102 deletions(-) diff --git a/bindings/java/src/jni/javasigar.c b/bindings/java/src/jni/javasigar.c index 9efa06c0..7d99ad1a 100644 --- a/bindings/java/src/jni/javasigar.c +++ b/bindings/java/src/jni/javasigar.c @@ -960,6 +960,20 @@ JNIEXPORT jstring SIGAR_JNIx(getNetListenAddress) return jnet_address_to_string(env, sigar, &address); } +JNIEXPORT jstring SIGAR_JNIx(getNetServicesName) +(JNIEnv *env, jobject sigar_obj, jint protocol, jlong port) +{ + char *name; + dSIGAR(NULL); + + if ((name = sigar_net_services_name_get(sigar, protocol, port))) { + return JENV->NewStringUTF(env, name); + } + else { + return NULL; + } +} + JNIEXPORT jstring SIGAR_JNI(NetConnection_getTypeString) (JNIEnv *env, jobject obj) { diff --git a/bindings/java/src/org/hyperic/sigar/NetServices.java b/bindings/java/src/org/hyperic/sigar/NetServices.java index cfc8bb8b..8cd27edb 100644 --- a/bindings/java/src/org/hyperic/sigar/NetServices.java +++ b/bindings/java/src/org/hyperic/sigar/NetServices.java @@ -18,108 +18,32 @@ package org.hyperic.sigar; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.HashMap; -import java.util.Map; -import java.util.StringTokenizer; - +/** + * @deprecated + * @see org.hyperic.sigar.Sigar#getNetServicesName + */ public class NetServices { - private static final String SERVICE_FILE; - private static Map udpServices = null; - private static Map tcpServices = null; - - static { - String defaultFile; + private static NetServices instance; + private Sigar sigar; - if (SigarLoader.IS_WIN32) { - defaultFile = "C:\\windows\\system32\\drivers\\etc\\services"; - } - else { - defaultFile = "/etc/services"; - } - - SERVICE_FILE = - System.getProperty("sigar.net.services.file", defaultFile); + private NetServices() { + this.sigar = new Sigar(); } - interface EntryReader { - public void process(String name, String port, List aliases); + protected void finalize() { + this.sigar.close(); } - static void parse(String fileName, EntryReader entry) { - File file = new File(fileName); - if (!file.exists()) { - return; - } - BufferedReader reader = null; - ArrayList aliases = new ArrayList(); - - try { - reader = new BufferedReader(new FileReader(file)); - String line; - while ((line = reader.readLine()) != null) { - line = line.trim(); - if ((line.length() == 0) || (line.charAt(0) == '#')) { - continue; - } - aliases.clear(); - int ix = line.indexOf("#"); - if (ix != -1) { - line = line.substring(0, ix); - } - StringTokenizer st = new StringTokenizer(line, " \t"); - if (st.countTokens() < 2) { - continue; - } - String name = st.nextToken().trim(); - String port = st.nextToken().trim(); - while (st.hasMoreTokens()) { - aliases.add(st.nextToken().trim()); - } - entry.process(name, port, aliases); - } - } catch (IOException e) { - return; - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException e) { } - } + private static NetServices getInstance() { + if (instance == null) { + instance = new NetServices(); } + return instance; } - private static class ServicesReader implements EntryReader { - private String protocol; - private Map services; - - private ServicesReader(String protocol, Map services) { - this.protocol = protocol; - this.services = services; - } - - public void process(String name, String port, List aliases) { - String pnum, protocol; - int ix = port.indexOf('/'); - if (ix == -1) { - return; - } - pnum = port.substring(0, ix); - protocol = port.substring(ix+1); - if (this.protocol.equals(protocol)) { - this.services.put(Long.valueOf(pnum), name); - } - } - } - - private static void parseServices(String type, Map services) { - parse(SERVICE_FILE, new ServicesReader(type, services)); + private static String getServiceName(int protocol, long port) { + return getInstance().sigar.getNetServicesName(protocol, port); } public static String getName(String protocol, long port) { @@ -135,18 +59,10 @@ public class NetServices { } public static String getTcpName(long port) { - if (tcpServices == null) { - tcpServices = new HashMap(); - parseServices("tcp", tcpServices); - } - return (String)tcpServices.get(new Long(port)); + return getServiceName(NetFlags.CONN_TCP, port); } public static String getUdpName(long port) { - if (udpServices == null) { - udpServices = new HashMap(); - parseServices("udp", udpServices); - } - return (String)udpServices.get(new Long(port)); + return getServiceName(NetFlags.CONN_UDP, port); } } diff --git a/bindings/java/src/org/hyperic/sigar/Sigar.java b/bindings/java/src/org/hyperic/sigar/Sigar.java index 45e9f2cf..936a41f2 100644 --- a/bindings/java/src/org/hyperic/sigar/Sigar.java +++ b/bindings/java/src/org/hyperic/sigar/Sigar.java @@ -760,6 +760,8 @@ public class Sigar implements SigarProxy { return getNetListenAddress(Long.parseLong(port)); } + public native String getNetServicesName(int protocol, long port); + public NetStat getNetStat() throws SigarException { NetStat netstat = new NetStat();