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) { //IntPtr[] mapele = new IntPtr[nvc.Count * 2]; String[,] mapele = new String[nvc.Count,2 ]; String str=" "; int j=0; for (int i=0; i< nvc.Count; i++) { mapele[i,0] = nvc.GetKey(i); mapele[i,1] = nvc.Get(nvc.GetKey(i)); } /* for (int i=0; i< nvc.Count; i++) { str = String.Concat(str,nvc.GetKey(i)); str = String.Concat(str, "\0"); str = String.Concat(str,nvc.Get(nvc.GetKey(i))); str = String.Concat(str, "\0"); } */ char[] strarr = str.ToCharArray(); /*for (int i=0; i< nvc.Count; i++) { string strKey = nvc.GetKey(i); Console.WriteLine("Key is " + strKey); //IntPtr ptr1 = Marshal.AllocHGlobal(strKey.Length); //Marshal.StructureToPtr(strKey,ptr1,false); IntPtr ptr1 = Marshal.StringToHGlobalAnsi(strKey); string strValue = nvc.Get(strKey); //IntPtr ptr2 = Marshal.AllocHGlobal(strValue.Length); //Marshal.StructureToPtr(strValue,ptr2,false); IntPtr ptr2 = Marshal.StringToHGlobalAnsi(strValue); Console.WriteLine("Value is " + strValue); //IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(kv)); // Marshal.StructureToPtr(kv,ptr,false); mapele[j++] = ptr1; Console.WriteLine("Pointer is " +ptr1); mapele[j++] = ptr2; Console.WriteLine("Pointer is " +ptr2); } */ //IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(mapele)); //Marshal.StructureToPtr(mapele,ptr,false); /*string[] str = {"a","bb","ccc"}; IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(str)); Marshal.StructureToPtr(str,ptr,false); */ /*Console.WriteLine("Setting Map Entry Keys name is " + keyName); */ 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(); } */ } }