Example #1
0
        private ConfigRequest ParseConfigRequest(String[] partes)
        {
            var crq = new ConfigRequest(Id, 0)
            {
                GeoPoint = null
            };

            var res = String.Format("H9;{0:D5}", Id);

            res += res.TakeWhile(b => b != '@').Aggregate <char, byte>(0, (current, b) => (byte)(current + b)).ToString("X2");

            crq.AddStringToSend(res);

            crq.StringParameters.Add(Indication.indicatedIMEI, partes[1]);
            crq.StringParameters.Add(Indication.indicatedSecret, partes[2]);
            crq.StringParameters.Add(Indication.indicatedFirmwareSignature, partes[3]);
            if (partes.Length > 4)
            {
                crq.IntegerParameters.Add(Indication.indicatedConfigurationRevision, SafeConvert.ToInt32(partes[4], -1));
            }
            if (partes.Length > 5)
            {
                crq.IntegerParameters.Add(Indication.indicatedCannedMessagesTableRevision, SafeConvert.ToInt32(partes[5], -1));
            }
            return(crq);
        }
Example #2
0
        private static ConfigRequest ParseRLogin(String[] partes, INode node, ulong mid, DateTime dt)
        {
            var crq = new ConfigRequest(node.Id, mid)
            {
                GeoPoint = null,
                Tiempo   = dt,
            };

            crq.AddStringToSend(String.Format(@"RE3;{0:D3}CH;{1:D3};{2};{3:yy/MM/dd,HH:mm:ss}", mid, node.NextSequence, node.Imei, DateTime.UtcNow));
            crq.StringParameters.Add(Indication.indicatedIMEI, partes[2]);
            return(crq);
        }
Example #3
0
        private static ConfigRequest ParseLogin(String[] partes, INode node)
        {
            var mid = Convert.ToUInt64(partes[1]);
            var crq = new ConfigRequest(node.Id, mid)
            {
                GeoPoint = null,
            };

            crq.AddStringToSend(String.Format(@"RV0;{0:D3};{1:D5};{2:yy/MM/dd,HH:mm:ss}", mid, node.Id, DateTime.UtcNow));

            crq.StringParameters.Add(Indication.indicatedIMEI, partes[4]);
            crq.StringParameters.Add(Indication.indicatedSecret, partes[5]);
            crq.StringParameters.Add(Indication.indicatedFirmwareSignature, partes[6]);
            crq.IntegerParameters.Add(Indication.indicatedConfigurationRevision, SafeConvert.ToInt32(partes[7], -1));
            return(crq);
        }
Example #4
0
        private static IMessage FactoryHandShake(Parser dev, String[] data, ulong msgId, GPSPoint pos, IDataProvider dataProvider)
        {
            if (ParserUtils.IsInvalidDeviceId(dev.Id))
            {
                return(null);
            }

            var msg = new ConfigRequest(dev.Id, msgId);

            if (pos != null)
            {
                msg.GeoPoint = pos;
            }

            msg.AddStringToSend(Factory <String>(msgId, dev, "AH,0,{0:D4},{1}", dev.Id, DateTime.UtcNow.ToUnixTimeStamp()));

            //check Telephone
            if (data.Length > 4)
            {
                var   phone = data[4].TrimStart("+".ToCharArray());
                Int64 number;
                if (!String.IsNullOrEmpty(phone) && Int64.TryParse(phone, out number) && number > 0)
                {
                    var oldnumber = dataProvider.GetDetalleDispositivo(dev.Id, "Telephone").As("null");
                    if (oldnumber != phone)
                    {
                        STrace.Debug(typeof(Parser).FullName, dev.Id, String.Format("Setting Telephone: {0}", phone));
                        dataProvider.SetDetalleDispositivo(dev.Id, "Telephone", phone, "string");
                    }
                }
            }

            //check config_revision
            if (data.Length > 3)
            {
                var revision    = data[3];
                var oldrevision = dataProvider.GetDetalleDispositivo(dev.Id, "config_revision").As("");
                if (oldrevision != revision && !String.IsNullOrEmpty(revision))
                {
                    STrace.Debug(typeof(Parser).FullName, dev.Id, String.Format("Setting config_revision: {0}", revision));
                    //todo: update config
                    //DataProvider.SetDetalleDispositivo(Id, "config_revision", revision, "int");
                }
            }

            return(msg);
        }
Example #5
0
        public static IMessage FactorySetId(ulong sequence, int newDeviceId, int formerDeviceId)
        {
            if (ParserUtils.IsInvalidDeviceId(newDeviceId))
            {
                return(null);
            }

            var msg = new ConfigRequest(newDeviceId, sequence);

            if (ParserUtils.IsInvalidDeviceId(formerDeviceId))
            {
                var cmds = Factory(String.Format(SetId, newDeviceId));
                msg.AddStringToSend(cmds);
            }

            //var imei = Parser.GetImei(datos[0]);
            return(msg);
        }
Example #6
0
        private ConfigRequest ParseConfigRequest(String asString)
        {
            var crq = new ConfigRequest(Id, 0)
            {
                GeoPoint = null
            };

            const int keepalive = 3;
            const int retry     = 3;

            crq.AddStringToSend(String.Format("H9{0:D5}{1:D5}{2:D2}{3:D2}", 10000, Id, keepalive, retry));
            crq.StringParameters.Add(Indication.indicatedIMEI, asString.Substring(24, 16));
            crq.StringParameters.Add(Indication.indicatedSecret, asString.Substring(59, 8));
            crq.StringParameters.Add(Indication.indicatedFirmwareSignature, asString.Substring(54, 4));
            crq.IntegerParameters.Add(Indication.indicatedConfigurationRevision, 0);
            crq.IntegerParameters.Add(Indication.indicatedCannedMessagesTableRevision, SafeConvert.ToInt32(asString.Substring(58, 1), -1));

            return(crq);
        }
Example #7
0
        private static ConfigRequest ParseALogin(String[] partes, INode node)
        {
            var mid = Convert.ToUInt64(partes[1]);
            var crq = new ConfigRequest(node.Id, mid)
            {
                GeoPoint = null,
            };

            //A0;Msgid;Serie;IMEI;Pass;Version ;Versión de Parámetros ;Tiempo entre tomas ;IP primaria ;IP secundaria@checksum
            //A0;000;00000;0000000000;0355826019078657;E57290F2;7.01;00000;30;190.2.37.141:4040;unex.hopto.org:3030@3D

            crq.AddStringToSend(String.Format(@"RA0;{0:D3};{1:D5};{2:yy/MM/dd,HH:mm:ss}", mid, node.Id, DateTime.UtcNow));

            crq.StringParameters.Add(Indication.indicatedIMEI, partes[3]);
            crq.StringParameters.Add(Indication.indicatedSecret, partes[4]);
            crq.StringParameters.Add(Indication.indicatedFirmwareSignature, partes[5]);
            crq.IntegerParameters.Add(Indication.indicatedConfigurationRevision, SafeConvert.ToInt32(partes[6], -1));
            return(crq);
        }