Ejemplo n.º 1
0
        /// <summary>
        ///  Deserialize the incomming cells data
        /// </summary>
        /// <param name="cellsDataStr">cells data</param>
        /// <returns></returns>
        public static CellsData DeserializeCellsData(string cellsDataStr)
        {
            var splittedCellsData = cellsDataStr.Split(';');

            if (splittedCellsData.Length < 3)
            {
                return(null);
            }
            try
            {
                var cellsData = new CellsData
                {
                    HomeMobileCountryCode = int.Parse(splittedCellsData[0]),
                    HomeMobileNetworkCode = int.Parse(splittedCellsData[1]),
                    RadioType             = "gsm"
                };
                for (int i = 2; i < splittedCellsData.Length; i++)
                {
                    var splittedCellTower = splittedCellsData[i].Split(',');
                    var cellTower         = new CellTower()
                    {
                        CellId            = long.Parse(splittedCellTower[0], System.Globalization.NumberStyles.HexNumber),
                        LocationAreaCode  = int.Parse(splittedCellTower[1], System.Globalization.NumberStyles.HexNumber),
                        MobileCountryCode = int.Parse(splittedCellTower[2]),
                        MobileNetworkCode = int.Parse(splittedCellTower[3])
                    };
                    cellsData.CellTowers.Add(cellTower);
                }
                return(cellsData);
            }
            catch (Exception) { }
            return(null);
        }
Ejemplo n.º 2
0
        public string getCoords(CellTower ct)
        {
            try
            {
                String url = "http://www.google.com/glm/mmap";
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri(url));
                req.Method = "POST";

                byte[] pd = PostData(ct.getMobileCountryCode(), ct.getMobileNetworkCode(), ct.getLocationAreaCode(), ct.getTowerId(), false);

                req.ContentLength = pd.Length;
                req.ContentType = "application/binary";
                Stream outputStream = req.GetRequestStream();
                outputStream.Write(pd, 0, pd.Length);
                outputStream.Close();

                HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                byte[] ps = new byte[res.ContentLength];
                int totalBytesRead = 0;
                while (totalBytesRead < ps.Length)
                {
                    totalBytesRead += res.GetResponseStream().Read(ps, totalBytesRead, ps.Length - totalBytesRead);
                }

                if (res.StatusCode == HttpStatusCode.OK)
                {
                    short opcode1 = (short)(ps[0] << 8 | ps[1]);
                    byte opcode2 = ps[2];
                    System.Diagnostics.Debug.Assert(opcode1 == 0x0e);
                    System.Diagnostics.Debug.Assert(opcode2 == 0x1b);
                    int ret_code = (int)((ps[3] << 24) | (ps[4] << 16) | (ps[5] << 8) | (ps[6]));

                    if (ret_code == 0)
                    {
                        double tlat = ((double)((ps[7] << 24) | (ps[8] << 16) | (ps[9] << 8) | (ps[10]))) / 1000000;
                        double tlon = ((double)((ps[11] << 24) | (ps[12] << 16) | (ps[13] << 8) | (ps[14]))) / 1000000;
                        lat = tlat;
                        lng = tlon;
                        return (tlat + "," + tlon);

                    }
                    else
                    {
                        return null;
                    }

                }
                else
                {
                    return null;
                }

            }
            catch (Exception)
            {
                return null;
            }
        }
Ejemplo n.º 3
0
        public CellTower getTowerInfo()
        {
            IntPtr radioInterfaceLayerHandle = IntPtr.Zero;
            IntPtr radioResponseHandle = IntPtr.Zero;

            // Initialize the radio layer with a result callback parameter.
            radioResponseHandle = RIL_Initialize(1, new RILRESULTCALLBACK(CellDataCallback),
                null, 0, 0, out radioInterfaceLayerHandle);

            // The initialize API call will always return 0 if initialization is successful.
            if (radioResponseHandle != IntPtr.Zero)
            {
                return null;
            }

            // Query for the current tower data.
            radioResponseHandle = RIL_GetCellTowerInfo(radioInterfaceLayerHandle);

            // Wait for cell tower info to be returned since RIL_GetCellTowerInfo invokes the
            // callback method asynchronously.
            waithandle.WaitOne();

            // Release the RIL handle
            RIL_Deinitialize(radioInterfaceLayerHandle);

            // Convert the raw tower data structure data into a CellTower object
            CellTower ct = new CellTower();
            ct.setTowerId(Convert.ToInt32(_towerDetails.dwCellID));
            ct.setLocationAreaCode(Convert.ToInt32(_towerDetails.dwLocationAreaCode));
            ct.setMobileCountryCode(Convert.ToInt32(_towerDetails.dwMobileCountryCode));
            ct.setMobileNetworkCode(Convert.ToInt32(_towerDetails.dwMobileNetworkCode));

            return ct;
        }