Re: Connection to GPRS with P/Invoke

Tech-Archive recommends: Fix windows errors by optimizing your registry



Step through the code in the debugger. First check if ConnMgrMapURL is succeeding and returning a valid Guid for the connection. If this is good and the connection attempt is still failing look at the status returned and call Marshal.GetLastWin32Error() after CommMgrEstablishConnectionSync has returned false for a more detailed error response.

Peter

--
Peter Foot
Microsoft Device Application Development MVP
www.peterfoot.net | www.inthehand.com
In The Hand Ltd - .NET Solutions for Mobility

"hassanmushtaq" <hassangugu@xxxxxxxxx> wrote in message news:c0dd722c-9366-4e6c-8e30-17130c5b07bb@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
On Mar 10, 10:38 am, hassanmushtaq <hassang...@xxxxxxxxx> wrote:
On Mar 9, 3:36 pm, "Peter Foot" <feedb...@xxxxxxxxxxxxxxxxxxxx> wrote:





> Can you elaborate on "it is not working", are you getting errors at > compile
> time, or during execution? exactly where in the code and what return > values,
> exceptions etc

> Peter

> --
> Peter Foot
> Microsoft Device Application Development > MVPwww.peterfoot.net|www.inthehand.com
> In The Hand Ltd - .NET Solutions for Mobility

> "hassanmushtaq" <hassang...@xxxxxxxxx> wrote in message

>news:ea1baf6c-9ac3-42d3-8393-33d2aa162ffb@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

> > hello
> > i m using VS 2003 with C# in CF 1.0.
> > i have made application of chatting client. my requirement is when
> > user bind to any socket it first made connection of GPRS. so can some
> > one give me code of how to connect to GPRS in CF 1.0/
> > i have following code. but it is not working.

> > 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);
> > }
> > so please help me
> > regards
> > Hassan Mushtaq- Hide quoted text -

> - Show quoted text -

sorry for not sending u full code. this is the code to call the
GPRSConnectin class which i write it in earlier post.

string url = "www.msn.com";
bool res = GPRSConnection.Setup("http://"; + url + "/");
if (res)
{
TcpClient tc = new TcpClient(url, 80);
NetworkStream ns = tc.GetStream();
byte[] buf = new byte[100];
ns.Write(buf, 0, 100); ns.Close();
tc.Close();
MessageBox.Show("Wrote 100 bytes");
}
else
{
MessageBox.Show("Connection establishment failed");
}

if (ConnMgrEstablishConnectionSync(ref ci, ref phConnection,
INFINITE, ref status) != S_OK &&
status != CONNMGR_STATUS_CONNECTED)
return false;- Hide quoted text -

- Show quoted text -

sorry for not sending u full code. this is the code to call the
GPRSConnectin class which i write it in earlier post.

string url = "www.msn.com";
bool res =
GPRSConnection.Setup("http://"; + url + "/");
if (res)
{
TcpClient tc = new
TcpClient(url, 80);
NetworkStream ns =
tc.GetStream();
byte[] buf = new byte[100];
ns.Write(buf, 0,
100); ns.Close();
tc.Close();
MessageBox.Show("Wrote 100
bytes");
}
else
{
MessageBox.Show("Connection
establishment failed");
}
this function return false in the main class. bcoz of that a
messagebox appear "Connection Established Failed". can u tell me y it
always retuen false.
///////////////////////////////////////////////
if (ConnMgrEstablishConnectionSync(ref ci, ref phConnection,
INFINITE, ref status) != S_OK &&
status != CONNMGR_STATUS_CONNECTED)
return false;
/////////////////////////////////////////////

regards
hassan mushtaq

.



Relevant Pages

  • Re: Connection to GPRS with P/Invoke
    ... Do you know how to close the GPRS connection ... public uint dwParams; ... private static extern int ConnMgrMapURL(string pwszURL, ...
    (microsoft.public.dotnet.framework.compactframework)
  • Re: Connection to GPRS with P/Invoke
    ... public static bool Setup ... public uint dwParams; ... private static extern int ConnMgrMapURL(string pwszURL, ...
    (microsoft.public.dotnet.framework.compactframework)
  • Connection to GPRS with P/Invoke
    ... public static bool Setup ... public uint dwParams; ... private static extern int ConnMgrMapURL(string pwszURL, ...
    (microsoft.public.dotnet.framework.compactframework)
  • Re: Connection to GPRS with P/Invoke
    ... succeeding and returning a valid Guid for the connection. ... IntPtr phConnection = IntPtr.Zero; ... public uint dwParams; ... private static extern int ConnMgrMapURL(string pwszURL, ...
    (microsoft.public.dotnet.framework.compactframework)
  • Re: Connection to GPRS with P/Invoke
    ... IntPtr phConnection = IntPtr.Zero; ... public uint dwParams; ... private static extern int ConnMgrMapURL(string pwszURL, ...
    (microsoft.public.dotnet.framework.compactframework)