/// </summary>
//TEEC_Result TEEC_OpenSession(TEEC_Context *context, TEEC_Session *session, const TEEC_UUID *destination, uint connectionMethod, const void *connectionData, TEEC_Operation *operation, uint *returnOrigin);
[DllImport(Libraries.Libteec, EntryPoint = "TEEC_OpenSession", CallingConvention = CallingConvention.Cdecl)]
- static public extern int OpenSession(ref TEEC_Context context, ref TEEC_Session session, TEEC_UUID destination, uint connectionMethod, byte[] connectionData, ref TEEC_Operation operation, out uint returnOrigin);
+ static public extern int OpenSession(ref TEEC_Context context, ref TEEC_Session session, ref TEEC_UUID destination, uint connectionMethod, byte[] connectionData, ref TEEC_Operation operation, out uint returnOrigin);
/// <summary>
/// This function closes a session which has been opened with a trusted application.
using System;
+using System.IO;
+using System.Text;
using System.Runtime.InteropServices;
internal static partial class Interop
public UInt16 timeHiAndVersion;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] clockSeqAndNode;
+
+ internal static TEEC_UUID ToTeecUuid(Guid guid)
+ {
+ TEEC_UUID uuid = new TEEC_UUID();
+ byte[] bin = guid.ToByteArray();
+ uuid.timeLow = BitConverter.ToUInt32(bin, 0);
+ uuid.timeMid = BitConverter.ToUInt16(bin, 4);
+ uuid.timeHiAndVersion = BitConverter.ToUInt16(bin, 6);
+ uuid.clockSeqAndNode = new byte[8];
+ Array.Copy(bin, 8, uuid.clockSeqAndNode, 0, 8);
+ return uuid;
+ }
}
[StructLayout(LayoutKind.Sequential)]
internal void Open(Guid destination, uint loginMethod, byte[] connectionData, Parameter[] paramlist)
{
- Interop.TEEC_UUID uuid = new Interop.TEEC_UUID();
+ Interop.TEEC_UUID uuid = Interop.TEEC_UUID.ToTeecUuid(destination);
Interop.TEEC_Operation op = new Interop.TEEC_Operation();
uint ro;
- int ret = Interop.Libteec.OpenSession(ref context, ref session, uuid, loginMethod, connectionData, ref op, out ro);
+ int ret = Interop.Libteec.OpenSession(ref context, ref session, ref uuid, loginMethod, connectionData, ref op, out ro);
//MAYBE map origin of return code to specyfic Exception
Interop.CheckNThrowException(ret, string.Format("OpenSession('{0}')", destination));
}