/***********************************************************************
 * 
 *  Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; version 2.1
 *  of the License.
 *
 *  This library 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
 *  Library Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, Novell, Inc.
 * 
 *  To contact Novell about this file by physical or electronic mail, 
 *  you may find current contact information at www.novell.com.
 * 
 ***********************************************************************/

using System;
using System.Text;
using System.Collections.Specialized;
using System.Runtime.InteropServices;

namespace Novell.CASA.DataEngines.KWallet
{

public class kwallet
{

	//private static int MAX_NAME_LENGTH = 512;
	private const string CPP_LIB = "kwallets_rw";



/*

        [DllImport(CPP_LIB)]
        public static extern void MyTest(
                EnumSecretList enumSecretList
        );

*/
        [DllImport(CPP_LIB)]
        public static extern void Aggregate(
                EnumSecretList enumSecretList
        );

        [DllImport(CPP_LIB)]
        public static extern void FreeList();

        [DllImport(CPP_LIB)]
        public static extern int SetEntry(string walletName, string folderName, int entryType, string keyName, string value, int valueLen); 	     

    [DllImport(CPP_LIB)]
    public static extern int SetMapEntry(string walletName, string folderName, string keyName, String[,] value, int eleCount); 	     
    [DllImport(CPP_LIB)]
    public static extern int RemoveEntry(string walletName, string folderName, string keyName);

/*
      public static int Try(EnumSecretList enumSecretList)
      {
             MyTest(enumSecretList);
             return 0;
      }

*/
      public static int AggregateKW(EnumSecretList enumSecretList)
      {
             Aggregate(enumSecretList);
             return 0;
      }



      public static int FreeResources()
      {
             FreeList();
             return 0;
      }
      
      
        public  static int SetSecret(string walletName, string folderName, int entryType, string keyName, string value, int valueLen )
        {
		return(SetEntry(walletName, folderName, entryType, keyName,  value, valueLen ));
        } 	     


        public  static int SetSecret(string walletName, string folderName, string keyName, NameValueCollection nvc)
        {
                
		String[,] mapele = new String[nvc.Count,2 ];
                
                for (int i=0; i< nvc.Count; i++)
		{
                   mapele[i,0] = nvc.GetKey(i);
                   mapele[i,1] = nvc.Get(nvc.GetKey(i));
                     

                } 
                               
		return(SetMapEntry(walletName, folderName, keyName,  mapele, nvc.Count));
        } 	     

        public  static int DeleteSecret(string walletName, string folderName, string keyName)
        {
		return(RemoveEntry(walletName, folderName, keyName));
        } 	     


      
      
      
      
      
      
      
      

//TBD: All this for future.
/*
	[DllImport(CPP_LIB)]
	public static extern int ReadSecret
	(
		[MarshalAs(UnmanagedType.LPStr)]
		String walletName,
		[MarshalAs(UnmanagedType.LPStr)]
		String folderName,
		[MarshalAs(UnmanagedType.LPStr)]
		String key,
		[MarshalAs(UnmanagedType.LPStr)]
		Byte[] secretVal
	);

	[DllImport(CPP_LIB)]
    public static extern int WriteSecret
    (
        [MarshalAs(UnmanagedType.LPStr)]
        String walletName,
        [MarshalAs(UnmanagedType.LPStr)]
        String folderName,
		int entryType,
        [MarshalAs(UnmanagedType.LPStr)]
        String key,
        [MarshalAs(UnmanagedType.LPStr)]
        Byte[] secret
    );




	[DllImport(CPP_LIB)]
	public static extern void CloseAllWallets();







    public static int ReadWallet(String walletName, String folderName, String key, Byte[] secretVal) 
    {

		// Read a secret from wallet
	 	 return (ReadSecret(walletName, folderName, key, secretVal)); 
    }

	public static int WriteWallet(String walletName, String folderName,int entryType, String key, Byte[] secretVal)
	{

		// Write secret to wallet
		return (WriteSecret( walletName, folderName, entryType, key, secretVal));

	}





	public static void DisconnectApplication()
	{

		CloseAllWallets();

	}
*/
		
}

}