using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Microsoft.Practices.Mobile.ConnectionManager
{
public class ConnectionManager
{
#region "Native Connection Manager APIs"
[DllImport("CellCore.dll", EntryPoint = "ConnMgrMapURL", SetLastError = true)]
public static extern int ConnMgrMapURL(string url, ref Guid networkGuid, int passZero);
[DllImport("CellCore.dll", EntryPoint = "ConnMgrEstablishConnection", SetLastError = true)]
public static extern int ConnMgrEstablishConnection(ConnMgrConnectionInfo connectionInfo, ref IntPtr connectionHandle);
[DllImport("CellCore.dll", EntryPoint = "ConnMgrEstablishConnectionSync", SetLastError = true)]
public static extern int ConnMgrEstablishConnectionSync(ConnMgrConnectionInfo connectionInfo, ref IntPtr connectionHandle, uint dwTimeout, ref ConnMgrStatus dwStatus);
[DllImport("CellCore.dll", EntryPoint = "ConnMgrReleaseConnection", SetLastError = true)]
public static extern int ConnMgrReleaseConnection(IntPtr connectionHandle, int cache);
[DllImport("CellCore.dll", EntryPoint = "ConnMgrConnectionStatus", SetLastError = true)]
public static extern int ConnMgrConnectionStatus(IntPtr connectionHandle, ref ConnMgrStatus status);
[DllImport("CellCore.dll", EntryPoint = "ConnMgrMapConRef", SetLastError = true)]
public static extern int ConnMgrMapConRef(ConnMgrConRefTypeEnum e, string szConRef, ref Guid pGUID);
#endregion
#region "Constants & Structures"
[Flags]
public enum ConnMgrParam : int
{
GuidDestNet = 0x1,
MaxCost = 0x2,
MinRcvBw = 0x4,
MaxConnLatency = 0x8
}
[Flags]
public enum ConnMgrProxy : int
{
NoProxy = 0x0,
Http = 0x1,
Wap = 0x2,
Socks4 = 0x4,
Socks5 = 0x8
}
public enum ConnMgrPriority
{
UserInteractive = 0x8000,
HighPriorityBackground = 0x0200,
LowPriorityBackground = 0x0008
}
public enum ConnMgrStatus
{
Unknown = 0x00,
Connected = 0x10,
Suspended = 0x11,
Disconnected = 0x20,
ConnectionFailed = 0x21,
ConnectionCanceled = 0x22,
ConnectionDisabled = 0x23,
NoPathToDestination = 0x24,
WaitingForPath = 0x25,
WaitingForPhone = 0x26,
PhoneOff = 0x27,
ExclusiveConflict = 0x28,
NoResources = 0x29,
ConnectionLinkFailed = 0x2a,
AuthenticationFailed = 0x2b,
NoPathWithProperty = 0x2c,
WaitingConnection = 0x40,
WaitingForResource = 0x41,
WaitingForNetwork = 0x42,
WaitingDisconnection = 0x80,
WaitingConnectionAbort = 0x81
}
public enum ConnMgrConRefTypeEnum
{
ConRefType_NAP = 0,
ConRefType_PROXY
}
[StructLayout(LayoutKind.Sequential)]
public class ConnMgrConnectionInfo
{
Int32 cbSize; // DWORD
public ConnMgrParam dwParams = 0; // DWORD
public ConnMgrProxy dwFlags = 0; // DWORD
public ConnMgrPriority dwPriority = 0; // DWORD
public Int32 bExclusive = 0; // BOOL
public Int32 bDisabled = 0; // BOOL
public Guid guidDestNet = Guid.Empty; // GUID
public IntPtr hWnd = IntPtr.Zero; // HWND
public UInt32 uMsg = 0; // UINT
public Int32 lParam = 0; // LPARAM
public UInt32 ulMaxCost = 0; // ULONG
public UInt32 ulMinRcvBw = 0; // ULONG
public UInt32 ulMaxConnLatency = 0; // ULONG
public ConnMgrConnectionInfo()
{
cbSize = Marshal.SizeOf(typeof(ConnMgrConnectionInfo));
}
public ConnMgrConnectionInfo(Guid destination, ConnMgrPriority priority, ConnMgrProxy proxy)
: this()
{
guidDestNet = destination;
dwParams = ConnMgrParam.GuidDestNet;
dwPriority = priority;
dwFlags = proxy;
}
public ConnMgrConnectionInfo(Guid destination, ConnMgrPriority priority)
: this(destination, priority, ConnMgrProxy.NoProxy) { }
public ConnMgrConnectionInfo(Guid destination)
: this(destination, ConnMgrPriority.UserInteractive) { }
} ;
#endregion
}
}