Thread
Print

Connect to Internet via GPRS on pocket pc(C#)

Connect to Internet via GPRS on pocket pc(C#)

Introduction
  Sometimes we need create a connection between Pocket pc and Internet.
In this sample,describes how to connect to Internet Via GPRS or 3G on pocket pc.

Using the code

using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using System.Text;
using System.Net;
using System.Runtime.InteropServices;
using System.Threading;

namespace SmartDeviceApplication1
{
        /// <summary>
        /// </summary>
        ///
       
        public class GPRSConnection
        {
                const int S_OK = 0;
                const uint CONNMGR_PARAM_GUIDDESTNET = 0x1;
                const uint CONNMGR_FLAG_PROXY_HTTP = 0x1;
                const uint CONNMGR_PRIORITY_USERINTERACTIVE = 0x08000;
                const uint INFINITE = 0xffffffff;
                const uint CONNMGR_STATUS_CONNECTED = 0x10;
                static Hashtable ht = new Hashtable();
                static GPRSConnection()
                {
                        ManualResetEvent mre = new ManualResetEvent(false);
                        mre.Handle = ConnMgrApiReadyEvent();
                        mre.WaitOne();
                        CloseHandle(mre.Handle);
                }
                ~GPRSConnection()
                {
                        ReleaseAll();
                }
                public static bool Setup(Uri url)
                {
                        return Setup(url.ToString());
                }
                public static bool Setup(string urlStr)
                {
                        ConnectionInfo ci = new ConnectionInfo();
                        IntPtr phConnection = IntPtr.Zero;
                        uint status = 0;
                        if (ht[urlStr] != null)
                        {
                                return true;
                        }
                        if (ConnMgrMapURL(urlStr, ref ci.guidDestNet, IntPtr.Zero) != S_OK)
                        {
                                return false;
                        }
                        ci.cbSize = (uint)Marshal.SizeOf(ci);
                        ci.dwParams = CONNMGR_PARAM_GUIDDESTNET;
                        ci.dwFlags = CONNMGR_FLAG_PROXY_HTTP;
                        ci.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
                        ci.bExclusive = 0;
                        ci.bDisabled = 0;
                        ci.hWnd = IntPtr.Zero;
                        ci.uMsg = 0;
                        ci.lParam = 0;
                        if (ConnMgrEstablishConnectionSync(ref ci, ref phConnection, INFINITE, ref status) != S_OK && status != CONNMGR_STATUS_CONNECTED)
                        {
                                return false;
                        }
                        ht[urlStr] = phConnection;
                        return true;
                }
                public static bool Release(Uri url)
                {
                        return Release(url.ToString());
                }
                public static bool Release(string urlStr)
                {
                        return Release(urlStr, true);
                }
                private static bool Release(string urlStr, bool removeNode)
                {
                        bool res = true;
                        IntPtr ph = IntPtr.Zero;
                        if (ht[urlStr] == null)
                        {
                                return true;
                        }
                        ph = (IntPtr)ht[urlStr];
                        if (ConnMgrReleaseConnection(ph, 1) != S_OK)
                        {
                                res = false;
                        }
                        CloseHandle(ph);
                        if (removeNode)
                        {
                                ht.Remove(urlStr);
                        }
                        return res;
                }
                public static void ReleaseAll()
                {
                        foreach (DictionaryEntry de in ht)
                        {
                                Release((string)de.Key, false);
                        }
                        ht.Clear();
                }
                [StructLayout(LayoutKind.Sequential)]  
                        public struct ConnectionInfo
                {
                        public uint cbSize;
                        public uint dwParams;
                        public uint dwFlags;
                        public uint dwPriority;
                        public int bExclusive;
                        public int bDisabled;
                        public Guid guidDestNet;
                        public IntPtr hWnd;
                        public uint uMsg;
                        public uint lParam;
                        public uint ulMaxCost;
                        public uint ulMinRcvBw;
                        public uint ulMaxConnLatency;        
                }
                [DllImport("cellcore.dll")]      
                private static extern int ConnMgrMapURL(string pwszURL, ref Guid pguid, IntPtr pdwIndex);
                [DllImport("cellcore.dll")]
                private static extern int ConnMgrEstablishConnectionSync(ref ConnectionInfo ci, ref IntPtr phConnection, uint dwTimeout, ref uint pdwStatus);
                [DllImport("cellcore.dll")] private static extern IntPtr ConnMgrApiReadyEvent();        
                [DllImport("cellcore.dll")] private static extern int ConnMgrReleaseConnection(IntPtr hConnection, int bCache);        
                [DllImport("coredll.dll")] private static extern int CloseHandle(IntPtr hObject);   
        }

        public class Form1 : System.Windows.Forms.Form
        {
                private System.Windows.Forms.MainMenu mainMenu1;

                public Form1()
                {
                        //

                        //
                        InitializeComponent();

                        //
       
                        //
                }
                /// <summary>
                /// </summary>
                protected override void Dispose( bool disposing )
                {
                        base.Dispose( disposing );
                }
                #region Windows
                /// <summary>

                /// </summary>
                private void InitializeComponent()
                {
                        this.mainMenu1 = new System.Windows.Forms.MainMenu();
                        //
                        // Form1
                        //
                        this.Menu = this.mainMenu1;
                        this.Text = "Form1";
                        this.Load += new System.EventHandler(this.Form1_Load);

                }
                #endregion

                /// <summary>
                /// </summary>

                static void Main()
                {
                        Application.Run(new Form1());
                }

                private void Form1_Load(object sender, System.EventArgs e)
                {
               
                }
        }
}

Attachment

SmartDeviceApplication1.zip (18.65 KB)

3-9-2008 14:16, Downloaded count: 93

TOP

Thread