/*
 * Copyright (C) [2004, 2005, 2006], Hyperic, Inc.
 * This file is part of SIGAR.
 * 
 * SIGAR is free software; you can redistribute it and/or modify
 * it under the terms version 2 of the GNU General Public License as
 * published by the Free Software Foundation. This program is distributed
 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 * USA.
 */

package org.hyperic.sigar.vmware;

import java.io.File;

import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarLoader;

abstract class VMwareObject {
    public static final boolean LOADED;

    protected int ptr = 0;

    private static native boolean init(String lib);

    static {
        LOADED = loadLibraries();
    };

    private static boolean loadLibraries() {
        if (SigarLoader.IS_LINUX) {
            if (!new File("/etc/vmware/config").exists()) {
                return false;
            }
        }
        else if (SigarLoader.IS_WIN32) {
            try {
                System.loadLibrary("ssleay32");
            } catch (UnsatisfiedLinkError e) {
                return false;
            }
        }
        else {
            return false;
        }

        try {
            Sigar.load();
            String lib =
                VMControlLibrary.getSharedLibrary();
            return init(lib);
        } catch (Exception e) {
            //e.printStackTrace();
            return false;
        }
    }

    abstract void destroy();

    public void dispose() {
        if (this.ptr != 0) {
            destroy();
            this.ptr = 0;
        }
    }

    protected void finalize() {
        dispose();
    }
}

@@ -1114,24 +1114,26 @@
 %0A        if 
+(!
 (SigarLoader
@@ -1145,68 +1145,220 @@
 INUX
-) %7B%0A            if (!new File(%22/etc/vmware/config%22).exists()
+ %7C%7C SigarLoader.IS_WIN32)) %7B%0A            return false;%0A        %7D%0A%0A        try %7B%0A            Sigar.load();%0A            String lib =%0A                VMControlLibrary.getSharedLibrary();%0A%0A            if (lib == null
 ) %7B%0A
@@ -1401,34 +1401,29 @@
       %7D%0A
-   
+%0A
     
- %7D%0A
         
 else if 
@@ -1414,21 +1414,16 @@
         
-else 
 if (Siga
@@ -1446,38 +1446,51 @@
 ) %7B%0A            
+    
-try %7B%0A
+File libssl =%0A 
                 
@@ -1493,27 +1493,76 @@
     
-System.loadLibrary(
+   new File(new File(lib).getParent(),%0A                             
 %22ssl
@@ -1566,16 +1566,20 @@
 ssleay32
+.dll
 %22);%0A    
@@ -1590,43 +1590,40 @@
     
-%7D catch (UnsatisfiedLinkError e) %7B%0A
+    if (!libssl.exists()) %7B%0A    
     
@@ -1652,33 +1652,38 @@
 se;%0A            
-%7D
+    %7D%0A
 %0A        %7D%0A     
@@ -1679,18 +1679,16 @@
     
-%7D%0A
         
 else
@@ -1687,15 +1687,17 @@
     
-else %7B%0A
+try %7B%0A   
     
@@ -1700,36 +1700,58 @@
             
-return false
+     System.load(libssl.getPath())
 ;%0A        %7D%0A
@@ -1752,128 +1752,158 @@
     
-%7D%0A%0A
+ 
        
- try %7B%0A            Sigar.load();%0A            String lib =%0A                VMControlLibrary.getSharedLibrary();
+%7D catch (UnsatisfiedLinkError e) %7B%0A                    e.printStackTrace();%0A                    return false;%0A                %7D%0A            %7D%0A
 %0A   

load ssleay32.dll relative to vmcontrollib.dll