NetServices move to native code
This commit is contained in:
		
							parent
							
								
									db8b0124d2
								
							
						
					
					
						commit
						58f8755835
					
				@ -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)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user