//public string ToInsertSQL(bool replaceComma, string TableName) //{ // string sql = ""; // sql = string.Format("insert into {0} (POS_FECHA, EQP_ESN, COD_EVENTO,", TableName); // sql = string.Format("{0} POSICION, POS_VELOCIDAD, POS_RUMBO, DATA) VALUES (", sql); // sql = string.Format("{0} '{1}', '{2}'", sql, ReportDate.ToString("yyyy-MM-dd HH:mm:ss"), IMEI); // if (replaceComma) // sql = string.Format("{0}, {1}, PointFromText('POINT({2} {3})')", sql, EventCode, ReportPosition.Longitude.getValue().ToString().Replace(',', '.'), ReportPosition.Latitude.getValue().ToString().Replace(',', '.')); // else // sql = string.Format("{0}, {1}, PointFromText('POINT({2} {3})')", sql, EventCode, ReportPosition.Longitude.getValue(), ReportPosition.Latitude.getValue()); // if (replaceComma) // sql = string.Format("{0}, {1}, {2}", sql, Speed.ToString().Replace(',', '.'), ReportPosition.Head.ToString().Replace(',', '.')); // else // sql = string.Format("{0}, {1}, {2}", sql, Speed, ReportPosition.Head); // sql = string.Format("{0},'{1}')", sql, JsonConvert.SerializeObject(Data)); // return sql; //} public static bool TryParse(byte[] messageSBD, string imei, out IridiumExtremeBinaryReport report, string packetType) { int ival; double dval; report = new IridiumExtremeBinaryReport(); JObject json = new JObject(); try { if (packetType == "MO") { ICDMOPacket MOpacket = new ICDMOPacket(); ICDMOPacket.TryParse(messageSBD, out MOpacket); ICDMOMessageType type = ICDMOMessageType.Unknown; if (MOpacket.rheader != null) { report.IMEI = imei; report.protocolType = (int)MOpacket.rheader.protocolType; report.protocolVersion = (int)MOpacket.rheader.ProtocolVersionNumber; report.EventCode = (int)MOpacket.rheader.MessageType; report.type_message = packetType; type = MOpacket.rheader.MessageType; } else { report.IMEI = imei; report.protocolType = (int)MOpacket.header.protocolType; report.protocolVersion = (int)MOpacket.header.ProtocolVersionNumber; report.EventCode = (int)MOpacket.header.MessageType; report.type_message = packetType; type = MOpacket.header.MessageType; } switch (type) { case ICDMOMessageType.SwitchOn: report.inbox = true; break; case ICDMOMessageType.AutomaticPositionReport: report.inbox = true; report.posiciones = true; break; case ICDMOMessageType.Emergency: report.inbox = true; report.posiciones = true; break; } foreach (ICDDataBlock d in MOpacket.body.datablocks) { switch (d.BlockType) { case ICDBlockType.Location://automatic report position var location = (DataBlock_Location)d; report.ReportPosition = location.position; DateTime dt; try { dt = new DateTime((int)location.GPSTimestampUTCYear, (int)location.GPSTimestampUTCMonth, (int)location.GPSTimestampUTCDay, (int)location.GPSTimestampUTCHours, (int)location.GPSTimestampUTCMinutes, (int)location.GPSTimestampUTCSeconds); report.ReportDate = dt; } catch (Exception ex) { report.ReportDate = new DateTime();//DateTime.Now; } report.Speed = 0; //string json5 = new JavaScriptSerializer().Serialize(location); //JObject json = JObject.FromObject(location); json["Location"] = JObject.FromObject(new { Type = location.BlockType.ToString(), DateTime = report.ReportDate, VelocityDirection = location.VelocityDirection, SpeedOverGround = location.SpeedOverGround, CourseOverGround = location.CourseOverGround, AltitudeSign = location.AltitudeSign, Altitude = location.Altitude, LatitudeAccuracyMeasurement = location.LatitudeAccuracyMeasurement, LatitudeAccuracy = location.LatitudeAccuracy, LongitudeAccuracyMeasurement = location.LongitudeAccuracyMeasurement, LongitudeAccuracy = location.LongitudeAccuracy, AltitudeAccuracyMeasurement = location.AltitudeAccuracyMeasurement, AltitudeAccuracy = location.AltitudeAccuracy, IsValid = 1, InsertInPosiciones = report.insertInPosiciones }); json["Location"]["Position"] = JObject.FromObject(new { Altitude = location.position.Altitude, Longitude = location.position.Longitude, Latitude = location.position.Latitude, Cuadrante = location.position.Cuadrante, Rumbo = location.position.Head }); //DataBlock_Location fromJson = new JavaScriptSerializer().Deserialize<DataBlock_Location>(json); //var loc = new JavaScriptSerializer().DeserializeObject(json); //JObject jobject = JObject.Parse(json);//magic //var name = new{ Datablock = new []{ new {type = location.BlockType.ToString()}}}; //JObject namejson = JObject.FromObject(name); //string json2 = string.Format("Datablock: {0} {3} : {4}{1} {5}{2}", "{", location.BlockType.ToString(), "}", "'type'", "'", "'"); //JObject namejson = JObject.Parse(json2); //string a = @"{'type':"+"'"+location.BlockType.ToString()+"'"+"}"; break; case ICDBlockType.FreeText: var freetext = (DataBlock_FreeText)d; json["FreeText"] = JObject.FromObject(new { FreeText = freetext.FreeText.Text.ToString(), }); break; case ICDBlockType.Recipient: var recipient = (DataBlock_Recipient)d; break; case ICDBlockType.Synchronisation: var synchronisation = (DataBlock_Synchronisation)d; break; case ICDBlockType.DeviceIdentifier: var deviceIdentifier = (DataBlock_DeviceIdentifier)d; break; case ICDBlockType.Diagnostics: var diagnostics = (DataBlock_Diagnostics)d; break; case ICDBlockType.Sender: var sender = (DataBlock_Sender)d; break; case ICDBlockType.RegionCircle: var regionCircle = (DataBlock_Circle)d; break; case ICDBlockType.RegionPolygon: var regionPolygon = (DataBlock_Polygon)d; break; case ICDBlockType.PortalStatus: var portalStatus = (DataBlock_PortalStatus)d; break; case ICDBlockType.PhoneSettings: var phoneSettings = (DataBlock_PhoneSettings)d; json["PhoneSettings"] = JObject.FromObject(new { Type = phoneSettings.BlockType.ToString(), DateTime = report.ReportDate, ReportFrecuencyRate = phoneSettings.ReportingFrecuencyRate, ReportingFrecuencyRateUnits = phoneSettings.ReportingFrecuencyRateUnits, EmergencyDestination = phoneSettings.EmergencyDestination, EmergencyCallRecipient = phoneSettings.EmergencyCallRecipient, }); //JObject jsonPhoneSettings = JObject.FromObject(phoneSettings); //report.Data.Add(jsonPhoneSettings); break; case ICDBlockType.GeofenceStatus: var geofenceStatus = (DataBlock_GeofenceStatus)d; break; case ICDBlockType.CannedMessagesHash: var cannedMessageHash = (DataBlock_CannedMessagesHash)d; json["CannedMessageHash"] = JObject.FromObject(new { Type = cannedMessageHash.BlockType.ToString(), Hash = cannedMessageHash.Hash, }); //JObject jsonCannedMessageHash = JObject.FromObject(cannedMessageHash); //report.Data.Add(jsonCannedMessageHash); //JsonConvert.SerializeObject(report.Data); break; case ICDBlockType.PortalProviderInformation: var portalProviderInfo = (DataBlock_PortalProviderInformation)d; break; case ICDBlockType.ReducedSizeLocation: var reducedSizeLocation = (DataBlock_ReducedLocation)d; break; case ICDBlockType.CannedMessageIdentifier: var cannedMessageIdentifier = (DataBlock_CannedMessageIdentifier)d; break; case ICDBlockType.DistributionListHash: var distributionList = (DataBlock_DistributionListHash)d; break; case ICDBlockType.MessageIdentifier: var messageIdentifier = (DataBlock_MessageIdentifier)d; break; case ICDBlockType.FirmwareHardwareVersion: var firmwareHardware = (DataBlock_HandsetFwHwVersion)d; break; } } report.Data = json; } else { ICDMTPacket MTpacket = new ICDMTPacket(); ICDMTPacket.TryParse(messageSBD, out MTpacket); ICDMTMessageType type = ICDMTMessageType.Unknown; if (MTpacket.header != null) { report.IMEI = imei;//chequear si esta registrado report.protocolType = (int)MTpacket.header.protocolType; report.protocolVersion = (int)MTpacket.header.ProtocolVersionNumber; report.EventCode = (int)MTpacket.header.MessageType; type = MTpacket.header.MessageType; } else { report.IMEI = imei; report.protocolType = (int)MTpacket.header.protocolType; report.protocolVersion = (int)MTpacket.header.ProtocolVersionNumber; report.EventCode = (int)MTpacket.header.MessageType; type = MTpacket.header.MessageType; } report.sent = true; } return true; } catch (Exception ex) { } return false; }
public void ReceiveProcessMails() { //inserts.Clear(); mails.Clear(); Message m = null; byte[] bytes; String uid = ""; DateTime dt = DateTime.Now; string sdt = ""; DatabaseMailRecord mail; POPClient popClient = new POPClient(); listReport = new List<IridiumExtremeBinaryReport>(); try { log.writeToLogFile(LogType.LOG_NOTICE, "ReceiveProcessMails", "Log Iniciado"); //string TableName = config.getConfigValue("databasesection", "tablename", "tablename"); int hours = config.getConfigValue("messagesection", "purgetimehours", 30); log.writeToLogFile("purgetimehours {0}", hours); string s = config.getConfigValue("popsection", "PopServer", ""); int ins = config.getConfigValue("popsection", "PopPort", 80); popClient.Connect(s, ins); log.writeToLogFile("Conectado a {0}:{1}", s, ins); s = config.getConfigValue("popsection", "PopUsername", ""); popClient.Authenticate(s, config.getConfigValue("popsection", "PopPassword", "")); log.writeToLogFile("Autenticado {0}", s); int Count = popClient.GetMessageCount(); log.writeToLogFile(LogType.LOG_NOTICE, "ReceiveProcessMails", "Hay {0} mensajes", Count); IridiumExtremeBinaryReport.NumsWithComma = config.getConfigValue("messagesection", "numswithcomma", true); for (int i = Count; i >= 1; i -= 1) { try { uid = popClient.GetMessageUID(i); m = popClient.GetMessage(i, true); try { dt = DateTime.Parse(m.Date); sdt = dt.Ticks.ToString(); } catch (Exception) { sdt = "0"; } if (md.isMail(uid, sdt)) { if (dt.AddHours(hours) < DateTime.Now) { string strLog = string.Format("Mail muy antiguo {0}, fecha: '{1}', id {2}", i, dt.ToString("yyyy/MM/dd HH:mm:ss"), uid); try { //popClient.DeleteMessage(i); log.writeToLogFile(LogType.LOG_NOTICE, "ReceiveProcessMails", "{0}, fue borrado exitosamente", strLog); } catch (Exception ex) { log.writeToLogFile(LogType.LOG_ERR, "ReceiveProcessMails", "{0}, hubo un error al intentar borrarlo: {1}", strLog, ex.Message); } } continue; } else { md.addValue(uid, sdt); if (m != null) { if (m.HasAttachment) { m = popClient.GetMessage(i, false); if (m.Attachments.Count > 0) { foreach (OpenPOP.MIMEParser.Attachment a in m.Attachments) { string attachName = m.GetAttachmentFileName(a); string extension = Path.GetExtension(attachName); if (extension.Equals(config.getValue("AttachmentType"))) { mail = new DatabaseMailRecord(); mail.Uid = uid; string imei = "desconocido"; imei = getIdFromSubject(m.Subject); //try //{ // mail.Data = a.DecodeAsText(); //} // catch (Exception) //{ // bytes = a.DecodedAsBytes(); // mail.Data = HexAscii.ConvertToHexAscii(bytes); // log.writeToLogFile(LogType.LOG_NOTICE, "ReceiveProcessMails", "El archivo no es string, procesando como binario"); //} try { bytes = a.DecodedAsBytes(); saveToDisck(bytes, attachName, @"\MESSAGES_INBOX"); mail.Data = HexAscii.ConvertToHexAscii(bytes); log.writeToLogFile(LogType.LOG_NOTICE, "ReceiveProcessMails", "El archivo no es string, procesando como binario"); } catch (Exception) { } mail.DataTime = dt; mails.Add(mail); string strlog = string.Format("Mail {0}, fecha: '{1}', id {2}", i, dt.ToString("yyyy/MM/dd HH:mm:ss"), uid); strlog = string.Format("{0}, subject: {1}, atachment: {2}", strlog, m.Subject, attachName); strlog = string.Format("{0}, contenido: '{1}', de {2}", strlog, mail.Data.Replace('\r', ' '), m.From); log.writeToLogFile(LogType.LOG_NOTICE, "ReceiveProcessMails", strlog); IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); string type = "MO"; if (IridiumExtremeBinaryReport.TryParse(HexAscii.ConvertToBytes(mail.Data), imei, out report, type)) { if (report.inbox) { string TableName = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToInsertSQL(true, TableName)); } if (report.posiciones) { string TableName = config.getConfigValue("databasesection", "tableposition", "tablename"); inserts.Add(report.ToInsertSQL(true, TableName)); } //listReport.Add(report); } } else { if (extension.Equals(".htm")) { if (m.Subject.Contains("SBD Mobile Terminated Message Queued for Unit:")) { //string data = mail.Data.Replace('\r', ' '); string filename = getBetween(m.RawMessage, "Filename: ", "\r"); string imei = getBetween(m.RawMessage, "IMEI: ", "\r"); DateTime time = DateTime.Parse(m.Date); string gatewayStatus = ""; if (m.RawMessage.Contains("The following mobile-terminated message was queued for delivery")) { gatewayStatus = "The mobile-terminated message was queued for delivery"; } try { OdbcCommand comm; string sql = ""; List<string> updates = new List<string>(); if (ConnectToDatabase(out comm)) { string TableName = config.getValue("tablesent"); sql = string.Format("update {0} set GATEWAY_DATETIME = '{1}' where ATTACHMENT_FILENAME = '{2}' and EQP_ESN = '{3}'", TableName, time.ToString("yyyy/MM/dd HH:mm:ss"), filename, imei); //updates.Add(sql); inserts.Add(sql); sql = string.Format("update {0} set GATEWAY_STATUS = '{1}' where ATTACHMENT_FILENAME = '{2}' and EQP_ESN = '{3}'", TableName, gatewayStatus, filename, imei); //updates.Add(sql); inserts.Add(sql); //foreach (string query in updates) //{ // comm.CommandText = query; // comm.ExecuteNonQuery(); //} } } catch (Exception ex) { } } } } } } } else { log.writeToLogFile(LogType.LOG_ERR, "ReceiveProcessMails", "El mail {0} esta corrupto o es erroneo", i); } } } } catch (Exception ex) { if (m != null) log.writeToLogFile(LogType.LOG_ERR, "ReceiveProcessMails", "Hubo un en un mail {0}, {1}, error: {2}", m.From, m.Date, ex.Message); else log.writeToLogFile(LogType.LOG_ERR, "ReceiveProcessMails", "Hubo un en un mail {0}, error: {1}", uid, ex.Message); } } } catch (Exception ex) { log.writeToLogFile(LogType.LOG_ERR, "ReceiveProcessMails", "Hubo un error: {0} ", ex.Message); } finally { popClient.Disconnect(); log.writeToLogFile(LogType.LOG_NOTICE, "ReceiveProcessMails", "Desconectado"); log.Flush(); } }
//chequea la bandeja de entrada y envia los MT pertinentes public bool ProcessMessagesFromDataBase(out List<byte[]> msgs, out List<string> imeis, out List<string> filenames) { //Por acá tendría que estar un método que traiga registros de la base //JObject json = JObject.Parse(str); int idMessageLastMessage = 0; inserts.Clear(); int idMessage = 0; DateTime inDatetime = new DateTime(); string imei = "000000000000000";//"300215010568090"; string type = ""; ICDMOMessageType MO_MessageType = ICDMOMessageType.Unknown; ICDMTMessageType MT_MessageType = ICDMTMessageType.Unknown; int protocol = 0; int protocolVersion = 0; int messageIdentifier = 0; string jsonData = ""; JObject json = new JObject(); //JArray json = new JArray(); //JObject obj = new JObject(); ICDMTMessageType TypeOfMT = ICDMTMessageType.Unknown;//(ICDMTMessageType)10; SynchronisationDataType typeSynchro = SynchronisationDataType.EmergencyCallRecipient;//(SynchronisationDataType)6; byte[] msgBytes; msgs = new List<byte[]>(); imeis = new List<string>(); filenames = new List<string>(); List<ICDDataBlock> datablocks = new List<ICDDataBlock>(); Encoding unicode = Encoding.Unicode; Encoding utf8 = Encoding.UTF8; OdbcCommand comm; string sql = ""; try { if (ConnectToDatabase(out comm)) #region codigo { string TableName = config.getValue("tableinbox"); //var cmd = conn.CreateCommand(); sql = string.Format("select * from {0}", TableName); comm.CommandText = sql; OdbcDataReader queryResults = comm.ExecuteReader(); while (queryResults.Read()) { try { idMessage = queryResults.GetInt16(0); } catch (InvalidCastException) { } try { inDatetime = queryResults.GetDateTime(1); } catch (InvalidCastException) { } try { imei = queryResults.GetString(2); } catch (InvalidCastException) { } try { type = queryResults.GetString(3); } catch (InvalidCastException) { } if (type == "MO") { try { MO_MessageType = (ICDMOMessageType)queryResults.GetInt16(4); } catch (InvalidCastException) { } } else { try { MT_MessageType = (ICDMTMessageType)queryResults.GetInt16(4); } catch (InvalidCastException) { } } try { protocol = queryResults.GetInt16(5); } catch (InvalidCastException) { } try { protocolVersion = queryResults.GetInt16(6); } catch (InvalidCastException) { } try { messageIdentifier = queryResults.GetInt16(7); } catch (InvalidCastException) { } try { jsonData = queryResults.GetString(8); json = JObject.Parse(jsonData); //string b = RemoveSpecialCharacters(jsonData); //var dict = new JavaScriptSerializer().DeserializeObject(jsonData); //var obj = JsonConvert.SerializeObject(dict); } catch (InvalidCastException) { } bool MTFLAG = false; string result = ""; bool registered = false; string loginState = GET("http://vdms5.tesacom.net/login.php?user_name=userapi&password=T3s@m321"); string url = String.Format("http://vdms5.tesacom.net/abm/abm_equipos.php?oper=exists&ESN={0}&contentType=json", imei); string jsonExists = GET(url); try { JObject jData = new JObject(); jData = JObject.Parse(jsonExists); foreach (JProperty jsonProperty in jData.Children().ToList()) { if (jsonProperty.Name.ToString() == "success") { result = jsonProperty.Value.ToString(); if (result == "true") { registered = true; } log.writeToLogFile(LogType.LOG_NOTICE, "Consultando API", "Se consultó si existía el equipo con IMEI{0} y el resultado es success:{1}", imei, jsonProperty.Value.ToString()); } } } catch (Exception ex) { } if (type == "MO") { TypeOfMT = ICDMTMessageType.Unknown; switch (MO_MessageType) { case ICDMOMessageType.SwitchOn: //chequear si esta registrado if (registered) { imeis.Add(imei); TypeOfMT = ICDMTMessageType.PortalStatusMessage; IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MO_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.Data = json; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); string tname2 = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToDeleteSQL(tname2, idMessage)); } else { TypeOfMT = ICDMTMessageType.Unknown; } break; case ICDMOMessageType.AutomaticPositionReport: //chequear si esta registrado if (registered) { imeis.Add(imei); IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MO_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.Data = json; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); string tname2 = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToDeleteSQL(tname2, idMessage)); } else { TypeOfMT = ICDMTMessageType.Unknown; } break; case ICDMOMessageType.ManualPositionReport: if (registered) { imeis.Add(imei); IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MO_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.Data = json; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); string tname2 = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToDeleteSQL(tname2, idMessage)); } else { TypeOfMT = ICDMTMessageType.Unknown; } break; case ICDMOMessageType.Emergency: if (registered) { imeis.Add(imei); IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MO_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.Data = json; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); string tname2 = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToDeleteSQL(tname2, idMessage)); string insertInPosiciones = ""; foreach (JProperty jsonObject in json.Children().ToList()) { if (jsonObject.Name == "Location") { foreach (JObject location in jsonObject.Children().ToList()) { foreach (JProperty property in location.Children().ToList()) { if (property.Name.ToString() == "InsertInPosiciones") { insertInPosiciones = property.Value.ToString(); } } } } } if (insertInPosiciones == "Si") { string tname3 = config.getConfigValue("databasesection", "tableposition", "tablename"); inserts.Add(report.ToInsertSQL(true, tname3)); } } break; case ICDMOMessageType.CheckIn: if (registered) { imeis.Add(imei); TypeOfMT = ICDMTMessageType.Unknown; IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MO_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.Data = json; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); string tname2 = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToDeleteSQL(tname2, idMessage)); } else { TypeOfMT = ICDMTMessageType.Unknown; } break; case ICDMOMessageType.DiagnosticsResponse: case ICDMOMessageType.BeginMonitoring: case ICDMOMessageType.Deregistration: case ICDMOMessageType.CannedMessageSend: case ICDMOMessageType.EmergencyCancel: case ICDMOMessageType.EndMonitoring: case ICDMOMessageType.GeofenceCrossedByDevice: case ICDMOMessageType.MessageAcknowledgement: case ICDMOMessageType.RequestDeviceIdentifierResponse: case ICDMOMessageType.ResponseToLocationPingRequest: case ICDMOMessageType.SynchronisingDataOverTheAir: case ICDMOMessageType.UserExtensions: case ICDMOMessageType.Unknown: break; } } else { MTFLAG = true; switch (MT_MessageType) { case ICDMTMessageType.FreeText: //chequear si esta registrado if (registered) { imeis.Add(imei); TypeOfMT = ICDMTMessageType.FreeText; IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MT_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.messageIdentifier = messageIdentifier; report.Data = json; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); } else { TypeOfMT = ICDMTMessageType.Unknown; } break; case ICDMTMessageType.PortalStatusMessage: //chequear si esta registrado if (registered) { imeis.Add(imei); TypeOfMT = ICDMTMessageType.PortalStatusMessage; IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MT_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.Data = json; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); string tname2 = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToDeleteSQL(tname2, idMessage)); } else { TypeOfMT = ICDMTMessageType.Unknown; } break; } } ICDMTPacket MTpacket = new ICDMTPacket(); MTpacket.header = new ICDMTMessageStandardHeader(); MTpacket.header.protocolType = 101; MTpacket.header.ProtocolVersionNumber = 2; switch (TypeOfMT) { case ICDMTMessageType.PortalStatusMessage: //List<JProperty> ps = json["portalstatus"].Children().cast<JProperty>().Tolist(); //foreach (JProperty p in ps) //{ // string key = p.Name.ToString(); // string value = p.Name.ToString(); //} IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); MTpacket.header.messageType = 10; MTpacket.header.MessageType = (ICDMTMessageType)MTpacket.header.messageType; MTpacket.header.MessageIdentifier = 221;//0 DataBlock_PortalStatus statusMessage = new DataBlock_PortalStatus(); DataBlock_PortalProviderInformation portalProviderInformation = new DataBlock_PortalProviderInformation(); //string msg; statusMessage.Status = 0; string msgStatus = "OK"; string msgProviderInfo = "LBS Portal"; if (MTFLAG) { foreach (JProperty jsonObject in json.Children().ToList()) { if (jsonObject.Name == "PortalStatus") { foreach (JObject portalstatus in jsonObject.Children().ToList()) { foreach (JProperty property in portalstatus.Children().ToList()) { if (property.Name.ToString() == "FreeText") { msgStatus = property.Value.ToString(); } if (property.Name.ToString() == "Status") { statusMessage.Status = (uint)property.Value; } } } } if (jsonObject.Name == "PortalProviderInformation") { foreach (JObject portalproviderinf in jsonObject.Children().ToList()) { foreach (JProperty property in portalproviderinf.Children().ToList()) { if (property.Name.ToString() == "FreeText") { msgProviderInfo = property.Value.ToString(); } } } } } } else { //We will do it but like the data came from vdms msgStatus = "OK"; statusMessage.Status = 0; msgProviderInfo = "LBS Portal"; statusMessage.BlockType = ICDBlockType.PortalStatus; portalProviderInformation.BlockType = ICDBlockType.PortalProviderInformation; JObject jsonTemp = new JObject(); jsonTemp["PortalStatus"] = JObject.FromObject(new { Type = statusMessage.BlockType.ToString(), FreeText = msgStatus, Status = statusMessage.Status }); jsonTemp["PortalProviderInformation"] = JObject.FromObject(new { Type = portalProviderInformation.BlockType.ToString(), FreeText = msgStatus }); json = jsonTemp; } //Finished to set the Portal status statusMessage.blockType = (int)ICDBlockType.PortalStatus; statusMessage.BlockType = ICDBlockType.PortalStatus; statusMessage.BlockLengthIndicator = 0; msgBytes = GetBytes(msgStatus); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); statusMessage.FreeText = msgBytes; MTpacket.body.datablocks.Add(statusMessage); //Finished to set the Portal provider datablock portalProviderInformation.blockType = (int)ICDBlockType.PortalProviderInformation; portalProviderInformation.BlockType = ICDBlockType.PortalProviderInformation; portalProviderInformation.BlockLengthIndicator = 0; msgBytes = GetBytes(msgProviderInfo); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); portalProviderInformation.FreeText = msgBytes; MTpacket.body.datablocks.Add(portalProviderInformation); msgs.Add(MTpacket.ToBytes()); string type_Message = "MT"; if (IridiumExtremeBinaryReport.TryParse(MTpacket.ToBytes(), imei, out report, type_Message)) { if (report.sent) { report.Data = json; report.idMessage = idMessage; report.messageIdentifier = (int)MTpacket.header.MessageIdentifier; report.ReportDate = DateTime.Now; report.attachmentFilename = string.Format("{0}.SBD", DateTime.Now.ToString("yyyyMMdd_HHmmss_fff")); filenames.Add(report.attachmentFilename); saveToDisck(MTpacket.ToBytes(), report.attachmentFilename, @"\MESSAGES_SENT"); string table = config.getConfigValue("databasesection", "tablesent", "tablename"); inserts.Add(report.ToInsertSQL(true, table)); } } break; case ICDMTMessageType.FreeText: MTpacket.header.messageType = 7; MTpacket.header.MessageType = (ICDMTMessageType)MTpacket.header.messageType; MTpacket.header.MessageIdentifier = 0; DataBlock_FreeText freeText = new DataBlock_FreeText(); freeText.BlockType = ICDBlockType.FreeText; freeText.blockType = (int)ICDBlockType.FreeText; string msg = "Hola desde el portal"; //PROBAR freeText.FreeText.Text = msg;//VER freeText.BlockLengthIndicator = 1; freeText.FreeText.DecodeTextIndicator = 0; freeText.BlockLengthBytes = (uint)(msg.Length); freeText.FreeText.FreeTextLengthIndicator = 0;//VER freeText.FreeText.FreeTextLength = (uint)(freeText.FreeText.BytesText.Length); freeText.FreeText.DecodeTextIndicator = 0; freeText.FreeText.DecodeTextLength = (uint)(msg.Length); MTpacket.body.datablocks.Add(freeText); DataBlock_Sender sender = new DataBlock_Sender(); sender.BlockType = ICDBlockType.Sender; sender.blockType = (uint)ICDBlockType.Sender; sender.BlockLengthIndicator = 0; msg = "Portal"; sender.BlockLengthBytes = (uint)(msg.Length + 2); msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); sender.Sender = msgBytes; MTpacket.body.datablocks.Add(sender); msgs.Add(MTpacket.ToBytes()); break; case ICDMTMessageType.GeofenceActivate: DataBlock_Polygon polygon = new DataBlock_Polygon(); DataBlock_Circle circle = new DataBlock_Circle(); break; case ICDMTMessageType.ConfirmedCheckIn: case ICDMTMessageType.DiagnosticRequest: case ICDMTMessageType.EmergencyAcknowledge: case ICDMTMessageType.EmergencyCancelRequest: case ICDMTMessageType.GeofenceCancel: case ICDMTMessageType.LocationPingRequest: case ICDMTMessageType.RequestDeviceIdentifier: case ICDMTMessageType.SystemTestResponseEndToEnd: case ICDMTMessageType.Reserved: case ICDMTMessageType.Unknown: break; case ICDMTMessageType.UserExtensions: break; case ICDMTMessageType.SynchroniseDataToDevice: MTpacket.header.messageType = (uint)ICDMTMessageType.SynchroniseDataToDevice; MTpacket.header.MessageType = (ICDMTMessageType)MTpacket.header.messageType; MTpacket.header.MessageIdentifier = 0; DataBlock_Synchronisation synchronisation = new DataBlock_Synchronisation(); switch (typeSynchro) { case SynchronisationDataType.DistributionlistClearAll: DataBlock_SynchronisationDistributionList distListClearAll = new DataBlock_SynchronisationDistributionList(); distListClearAll.blockType = (int)ICDBlockType.Synchronisation; distListClearAll.BlockType = ICDBlockType.Synchronisation; distListClearAll.BlockLengthBytes = 1; distListClearAll.dataType = (int)SynchronisationDataType.DistributionListClear; distListClearAll.DataType = SynchronisationDataType.DistributionListClear; synchronisation = distListClearAll; MTpacket.body.datablocks.Add(synchronisation); break; case SynchronisationDataType.DistributionListAdd: DataBlock_SynchronisationDistributionList syncDistListAdd = new DataBlock_SynchronisationDistributionList(); syncDistListAdd.blockType = (int)ICDBlockType.Synchronisation; syncDistListAdd.BlockType = ICDBlockType.Synchronisation; msg = "Work"; syncDistListAdd.BlockLengthBytes = (uint)(msg.Length + 2); syncDistListAdd.dataType = (int)SynchronisationDataType.DistributionListAdd; syncDistListAdd.DataType = SynchronisationDataType.DistributionListAdd; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); DataBlock_DistributionList distList = new DataBlock_DistributionList(); distList.DistributionList = msgBytes; syncDistListAdd.data = distList; synchronisation = syncDistListAdd; MTpacket.body.datablocks.Add(synchronisation); break; case SynchronisationDataType.DistributionListClear: DataBlock_SynchronisationDistributionList syncDistListClear = new DataBlock_SynchronisationDistributionList(); syncDistListClear.blockType = (int)ICDBlockType.Synchronisation; syncDistListClear.BlockType = ICDBlockType.Synchronisation; msg = "Work"; syncDistListClear.BlockLengthBytes = (uint)(msg.Length + 2); syncDistListClear.dataType = (int)SynchronisationDataType.DistributionListClear; syncDistListClear.DataType = SynchronisationDataType.DistributionListClear; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); DataBlock_DistributionList distListClear = new DataBlock_DistributionList(); distListClear.DistributionList = msgBytes; syncDistListClear.data = distListClear; synchronisation = syncDistListClear; MTpacket.body.datablocks.Add(synchronisation); break; case SynchronisationDataType.CannedMessage: DataBlock_SynchronisationCannedMessage syncCannedMsg = new DataBlock_SynchronisationCannedMessage(); syncCannedMsg.blockType = (int)ICDBlockType.Synchronisation; syncCannedMsg.BlockType = ICDBlockType.Synchronisation; msg = "I have achieved my objective"; syncCannedMsg.BlockLengthBytes = (uint)(msg.Length + 2); syncCannedMsg.dataType = (int)SynchronisationDataType.CannedMessage; syncCannedMsg.DataType = SynchronisationDataType.CannedMessage; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); DataBlock_CannedMessageData cmd = new DataBlock_CannedMessageData(); cmd.LanguageIdentifier = "en"; cmd.LanguageIdentifierFirstLetter = (int)LettersIdentifier.e; cmd.LanguageIdentifierSecondLetter = (int)LettersIdentifier.n; cmd.CannedMessageNumber = 1; cmd.IncludeLocation = 0; cmd.CannedMessage = msgBytes; syncCannedMsg.data = cmd; synchronisation = syncCannedMsg; MTpacket.body.datablocks.Add(synchronisation); break; case SynchronisationDataType.AddressBookEntry: DataBlock_SynchronisationAddressBook syncAddressBook = new DataBlock_SynchronisationAddressBook(); syncAddressBook.blockType = (int)ICDBlockType.Synchronisation; syncAddressBook.BlockType = ICDBlockType.Synchronisation; msg = "addressBook"; syncAddressBook.BlockLengthBytes = (uint)(msg.Length + 2); syncAddressBook.dataType = (int)SynchronisationDataType.AddressBookEntry; syncAddressBook.DataType = SynchronisationDataType.AddressBookEntry; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); DataBlock_AddressBook addressBook = new DataBlock_AddressBook(); addressBook.AddressBookNumber = (uint)100; addressBook.BytesAddressBookItem = msgBytes; syncAddressBook.data = addressBook; synchronisation = syncAddressBook; MTpacket.body.datablocks.Add(synchronisation); //to complete break; case SynchronisationDataType.EmergencyCallRecipient: DataBlock_SynchronisationEmergencyCallRecipient syncEmergCallRec = new DataBlock_SynchronisationEmergencyCallRecipient(); syncEmergCallRec.blockType = (int)ICDBlockType.Synchronisation; syncEmergCallRec.BlockType = ICDBlockType.Synchronisation; msg = "emergencycallrecipient"; syncEmergCallRec.BlockLengthBytes = (uint)(msg.Length + 2); syncEmergCallRec.dataType = (int)SynchronisationDataType.EmergencyCallRecipient; syncEmergCallRec.DataType = SynchronisationDataType.EmergencyCallRecipient; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); DataBlock_EmergencyCallRecipient emerCallRec = new DataBlock_EmergencyCallRecipient(); emerCallRec.EmergencyCallRecipient = msgBytes; syncEmergCallRec.data = emerCallRec; synchronisation = syncEmergCallRec; MTpacket.body.datablocks.Add(synchronisation); //to complete break; case SynchronisationDataType.EmergencyDestination: DataBlock_SynchronisationEmergencyDestination syncEmergDest = new DataBlock_SynchronisationEmergencyDestination(); syncEmergDest.blockType = (int)ICDBlockType.Synchronisation; syncEmergDest.BlockType = ICDBlockType.Synchronisation; syncEmergDest.dataType = (int)SynchronisationDataType.EmergencyDestination; syncEmergDest.DataType = SynchronisationDataType.EmergencyDestination; //to complete break; case SynchronisationDataType.GPSFrequencyRate: DataBlock_SynchronisationReportingFrequencyRate repFreqRate = new DataBlock_SynchronisationReportingFrequencyRate(); //to complete break; case SynchronisationDataType.ProtocolType: DataBlock_SynchronisationProtocolType protocolType = new DataBlock_SynchronisationProtocolType(); //to complete break; } msgs.Add(MTpacket.ToBytes()); break; }//termina switch principal }//termina while if (msgs.Count > 0) { return true; } else { return false; } }//termina if else { return false; } #endregion } catch (Exception ex) { log.writeToLogFile(LogType.LOG_NOTICE, "ConnectToDatabase", "Hubo un error: {0}, en la consulta: {1} ", ex.Message, sql); return false; } }
public void ReceiveEmailData() { //54b89f4ec0311af3c7c74bd8d5a5089a IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); //byte[] bytes = HexAscii.ConvertToBytes("6504AE00067DDC23EB920016A290CC9D2BEE801036000A1005200C4025BEEE11F46E01808A809BC566517A2C3A875910334C6FCD682E1B6C4683C140A8399D6C07C16032580AC47CBB5BB01ACE35B3D968B8190835A793ED20184C464B81826C3A68158381DA20D49C4EB68360B0D92D053A42A7A079983E07C16820192C366BC5642D180D14ABE968B32A75081286E974102E560255E76539881D769F416537685A76D341F674189494A7C9E97A1B"); //string path = @"C:\Users\jcorrales\Documents\Visual Studio 2008\Projects\IridiumExtreme\IridiumExtreme\bin\Debug\300215010900550_000007.sbd"; string path = @"C:\Users\jcorrales\Desktop\300215010900550_000005.sbd"; byte[] fileBytes = File.ReadAllBytes(path); string hex = BitConverter.ToString(fileBytes).Replace("-", string.Empty); byte[] bytes = HexAscii.ConvertToBytes(hex); //StringBuilder sb = new StringBuilder(); //foreach (byte b in fileBytes) //{ // sb.Append(Convert.ToString(b, 2).PadLeft(8, '0')); //} //string imei = "309015010008060"; string imei = "300215010568090"; Encoding unicode = Encoding.Unicode; Encoding utf8 = Encoding.UTF8; byte[] imeib = GetBytes(imei); imeib = Encoding.Convert(unicode, utf8, imeib); crc_32c hash = new crc_32c(); uint hashvar = hash.toHash2(imeib, imeib.Length); if (IridiumExtremeBinaryReport.TryParse(bytes, "300215010568090", out report, "MO")) { inserts.Add(report.ToInsertSQL(true, "MESSAGE_INBOX")); } }
//chequea la bandeja de entrada y envia los MT pertinentes public bool ProcessMessagesFromDataBase(out List<byte[]> msgs, out List<string> imeis, out List<string> filenames) { //Por acá tendría que estar un método que traiga registros de la base //JObject json = JObject.Parse(str); int idMessageLastMessage = 0; inserts.Clear(); int idMessage = 0; DateTime inDatetime = new DateTime(); string imei = "300215010568090"; string type = ""; ICDMOMessageType MO_MessageType = ICDMOMessageType.Unknown; ICDMTMessageType MT_MessageType = ICDMTMessageType.Unknown; int protocol = 0; int protocolVersion = 0; int messageIdentifier = 0; string jsonData = ""; ICDMTMessageType TypeOfMT = ICDMTMessageType.Unknown;//(ICDMTMessageType)10; SynchronisationDataType typeSynchro = SynchronisationDataType.EmergencyCallRecipient;//(SynchronisationDataType)6; byte[] msgBytes; msgs = new List<byte[]>(); imeis = new List<string>(); filenames = new List<string>(); List<ICDDataBlock> datablocks = new List<ICDDataBlock>(); Encoding unicode = Encoding.Unicode; Encoding utf8 = Encoding.UTF8; OdbcCommand comm; string sql = ""; try { if (ConnectToDatabase(out comm)) #region codigo { string TableName = config.getValue("tableinbox"); //var cmd = conn.CreateCommand(); sql = string.Format("select * from {0}", TableName); comm.CommandText = sql; OdbcDataReader queryResults = comm.ExecuteReader(); while (queryResults.Read()) { try { idMessage = queryResults.GetInt16(0); } catch (InvalidCastException) { } try { inDatetime = queryResults.GetDateTime(1); } catch (InvalidCastException) { } try { imei = queryResults.GetString(2); } catch (InvalidCastException) { } try { type = queryResults.GetString(3); } catch (InvalidCastException) { } if(type == "MO") { try { MO_MessageType = (ICDMOMessageType)queryResults.GetInt16(4); } catch (InvalidCastException) { } } else { try { MT_MessageType = (ICDMTMessageType)queryResults.GetInt16(4); } catch (InvalidCastException) { } } try { protocol = queryResults.GetInt16(5); } catch (InvalidCastException) { } try { protocolVersion = queryResults.GetInt16(6); } catch (InvalidCastException) { } try { messageIdentifier = queryResults.GetInt16(7); } catch (InvalidCastException) { } try { jsonData = queryResults.GetString(8); } catch (InvalidCastException) { } if (type == "MO") { bool registered = true; TypeOfMT = ICDMTMessageType.Unknown; switch (MO_MessageType) { case ICDMOMessageType.SwitchOn: //chequear si esta registrado if (registered) { imeis.Add(imei); TypeOfMT = ICDMTMessageType.PortalStatusMessage; IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MO_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.jsonData = jsonData; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); string tname2 = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToDeleteSQL(tname2, idMessage)); } else { TypeOfMT = ICDMTMessageType.Unknown; } break; case ICDMOMessageType.AutomaticPositionReport: //chequear si esta registrado if (registered) { imeis.Add(imei); IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MO_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.jsonData = jsonData; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); string tname2 = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToDeleteSQL(tname2, idMessage)); } else { TypeOfMT = ICDMTMessageType.Unknown; } break; case ICDMOMessageType.ManualPositionReport: if (registered) { imeis.Add(imei); IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MO_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.jsonData = jsonData; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); string tname2 = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToDeleteSQL(tname2, idMessage)); } else { TypeOfMT = ICDMTMessageType.Unknown; } break; case ICDMOMessageType.Emergency: if (registered) { imeis.Add(imei); IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MO_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.jsonData = jsonData; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); string tname2 = config.getConfigValue("databasesection", "tableinbox", "tablename"); inserts.Add(report.ToDeleteSQL(tname2, idMessage)); } break; case ICDMOMessageType.CheckIn: break; } } else { switch (MT_MessageType) { case ICDMTMessageType.FreeText: bool registered = true; //chequear si esta registrado if (registered) { imeis.Add(imei); TypeOfMT = ICDMTMessageType.FreeText; IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); report.ReportDate = DateTime.Now; report.IMEI = imei; report.type_message = type; report.EventCode = (int)MT_MessageType; report.protocolType = protocol; report.protocolVersion = protocolVersion; report.idMessage = idMessage; report.messageIdentifier = messageIdentifier; report.jsonData = jsonData; string tname = config.getConfigValue("databasesection", "tableoutbox", "tablename"); inserts.Add(report.ToInsertSQL(true, tname)); } else { TypeOfMT = ICDMTMessageType.Unknown; } break; } } ICDMTPacket MTpacket = new ICDMTPacket(); MTpacket.header = new ICDMTMessageStandardHeader(); MTpacket.header.protocolType = 101; MTpacket.header.ProtocolVersionNumber = 2; switch (TypeOfMT) { case ICDMTMessageType.PortalStatusMessage://complementar IridiumExtremeBinaryReport report = new IridiumExtremeBinaryReport(); MTpacket.header.messageType = 10; MTpacket.header.MessageType = (ICDMTMessageType)MTpacket.header.messageType; MTpacket.header.MessageIdentifier = 221;//0 DataBlock_PortalStatus statusMessage = new DataBlock_PortalStatus(); statusMessage.blockType = (int)ICDBlockType.PortalStatus; statusMessage.BlockType = ICDBlockType.PortalStatus; statusMessage.BlockLengthIndicator = 0; statusMessage.Status = 0; string msg; msg = "OK"; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); statusMessage.FreeText = msgBytes; MTpacket.body.datablocks.Add(statusMessage); JObject json1 = JObject.FromObject(statusMessage); json1.Add("Type", statusMessage.BlockType.ToString()); json1.Add("FreeText", statusMessage.FreeTextLengthAndFreeTextString); json1.Add("Status", statusMessage.Status); DataBlock_PortalProviderInformation portalProviderInformation = new DataBlock_PortalProviderInformation(); portalProviderInformation.blockType = (int)ICDBlockType.PortalProviderInformation; portalProviderInformation.BlockType = ICDBlockType.PortalProviderInformation; portalProviderInformation.BlockLengthIndicator = 0; msg = "LBS Portal"; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); portalProviderInformation.FreeText = msgBytes; MTpacket.body.datablocks.Add(portalProviderInformation); msgs.Add(MTpacket.ToBytes()); JObject json2 = JObject.FromObject(portalProviderInformation); json2.Add("Type", portalProviderInformation.BlockType.ToString()); json2.Add("FreeText", portalProviderInformation.LengthAndFreeTextString); string type_Message = "MT"; if (IridiumExtremeBinaryReport.TryParse(MTpacket.ToBytes(), imei, out report, type_Message )) { if (report.sent) { report.Data.Add(json1); report.Data.Add(json2); //report.idMessage = report.idMessage = idMessage; report.idMessage = idMessage; report.messageIdentifier = (int)MTpacket.header.MessageIdentifier; report.ReportDate = DateTime.Now; report.attachmentFilename = string.Format("{0}.SBD", DateTime.Now.ToString("yyyyMMdd_HHmmss_fff")); filenames.Add(report.attachmentFilename); saveToDisck(MTpacket.ToBytes(), report.attachmentFilename, @"\MESSAGES_SENT"); string table = config.getConfigValue("databasesection", "tablesent", "tablename"); inserts.Add(report.ToInsertSQL(true, table)); } } break; case ICDMTMessageType.FreeText: MTpacket.header.messageType = 7; MTpacket.header.MessageType = (ICDMTMessageType)MTpacket.header.messageType; MTpacket.header.MessageIdentifier = 0; DataBlock_FreeText freeText = new DataBlock_FreeText(); freeText.BlockType = ICDBlockType.FreeText; freeText.blockType = (int)ICDBlockType.FreeText; msg = "Hola desde el portal"; //PROBAR freeText.FreeText.Text = msg;//VER freeText.BlockLengthIndicator = 1; freeText.FreeText.DecodeTextIndicator = 0; freeText.BlockLengthBytes = (uint)(msg.Length); freeText.FreeText.FreeTextLengthIndicator = 0;//VER freeText.FreeText.FreeTextLength = (uint)(freeText.FreeText.BytesText.Length); freeText.FreeText.DecodeTextIndicator = 0; freeText.FreeText.DecodeTextLength = (uint)(msg.Length); MTpacket.body.datablocks.Add(freeText); DataBlock_Sender sender = new DataBlock_Sender(); sender.BlockType = ICDBlockType.Sender; sender.blockType = (uint)ICDBlockType.Sender; sender.BlockLengthIndicator = 0; msg = "Portal"; sender.BlockLengthBytes = (uint)(msg.Length + 2); msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); sender.Sender = msgBytes; MTpacket.body.datablocks.Add(sender); msgs.Add(MTpacket.ToBytes()); break; case ICDMTMessageType.GeofenceActivate: DataBlock_Polygon polygon = new DataBlock_Polygon(); DataBlock_Circle circle = new DataBlock_Circle(); break; case ICDMTMessageType.ConfirmedCheckIn: case ICDMTMessageType.DiagnosticRequest: case ICDMTMessageType.EmergencyAcknowledge: case ICDMTMessageType.EmergencyCancelRequest: case ICDMTMessageType.GeofenceCancel: case ICDMTMessageType.LocationPingRequest: case ICDMTMessageType.RequestDeviceIdentifier: case ICDMTMessageType.SystemTestResponseEndToEnd: case ICDMTMessageType.Reserved: case ICDMTMessageType.Unknown: break; case ICDMTMessageType.UserExtensions: break; case ICDMTMessageType.SynchroniseDataToDevice: MTpacket.header.messageType = (uint)ICDMTMessageType.SynchroniseDataToDevice; MTpacket.header.MessageType = (ICDMTMessageType)MTpacket.header.messageType; MTpacket.header.MessageIdentifier = 0; DataBlock_Synchronisation synchronisation = new DataBlock_Synchronisation(); switch (typeSynchro) { case SynchronisationDataType.DistributionlistClearAll: DataBlock_SynchronisationDistributionList distListClearAll = new DataBlock_SynchronisationDistributionList(); distListClearAll.blockType = (int)ICDBlockType.Synchronisation; distListClearAll.BlockType = ICDBlockType.Synchronisation; distListClearAll.BlockLengthBytes = 1; distListClearAll.dataType = (int)SynchronisationDataType.DistributionListClear; distListClearAll.DataType = SynchronisationDataType.DistributionListClear; synchronisation = distListClearAll; MTpacket.body.datablocks.Add(synchronisation); break; case SynchronisationDataType.DistributionListAdd: DataBlock_SynchronisationDistributionList syncDistListAdd = new DataBlock_SynchronisationDistributionList(); syncDistListAdd.blockType = (int)ICDBlockType.Synchronisation; syncDistListAdd.BlockType = ICDBlockType.Synchronisation; msg = "Work"; syncDistListAdd.BlockLengthBytes = (uint)(msg.Length + 2); syncDistListAdd.dataType = (int)SynchronisationDataType.DistributionListAdd; syncDistListAdd.DataType = SynchronisationDataType.DistributionListAdd; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); DataBlock_DistributionList distList = new DataBlock_DistributionList(); distList.DistributionList = msgBytes; syncDistListAdd.data = distList; synchronisation = syncDistListAdd; MTpacket.body.datablocks.Add(synchronisation); break; case SynchronisationDataType.DistributionListClear: DataBlock_SynchronisationDistributionList syncDistListClear = new DataBlock_SynchronisationDistributionList(); syncDistListClear.blockType = (int)ICDBlockType.Synchronisation; syncDistListClear.BlockType = ICDBlockType.Synchronisation; msg = "Work"; syncDistListClear.BlockLengthBytes = (uint)(msg.Length + 2); syncDistListClear.dataType = (int)SynchronisationDataType.DistributionListClear; syncDistListClear.DataType = SynchronisationDataType.DistributionListClear; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); DataBlock_DistributionList distListClear = new DataBlock_DistributionList(); distListClear.DistributionList = msgBytes; syncDistListClear.data = distListClear; synchronisation = syncDistListClear; MTpacket.body.datablocks.Add(synchronisation); break; case SynchronisationDataType.CannedMessage: DataBlock_SynchronisationCannedMessage syncCannedMsg = new DataBlock_SynchronisationCannedMessage(); syncCannedMsg.blockType = (int)ICDBlockType.Synchronisation; syncCannedMsg.BlockType = ICDBlockType.Synchronisation; msg = "I have achieved my objective"; syncCannedMsg.BlockLengthBytes = (uint)(msg.Length + 2); syncCannedMsg.dataType = (int)SynchronisationDataType.CannedMessage; syncCannedMsg.DataType = SynchronisationDataType.CannedMessage; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); DataBlock_CannedMessageData cmd = new DataBlock_CannedMessageData(); cmd.LanguageIdentifier = "en"; cmd.LanguageIdentifierFirstLetter = (int)LettersIdentifier.e; cmd.LanguageIdentifierSecondLetter = (int)LettersIdentifier.n; cmd.CannedMessageNumber = 1; cmd.IncludeLocation = 0; cmd.CannedMessage = msgBytes; syncCannedMsg.data = cmd; synchronisation = syncCannedMsg; MTpacket.body.datablocks.Add(synchronisation); break; case SynchronisationDataType.AddressBookEntry: DataBlock_SynchronisationAddressBook syncAddressBook = new DataBlock_SynchronisationAddressBook(); syncAddressBook.blockType = (int)ICDBlockType.Synchronisation; syncAddressBook.BlockType = ICDBlockType.Synchronisation; msg = "addressBook"; syncAddressBook.BlockLengthBytes = (uint)(msg.Length + 2); syncAddressBook.dataType = (int)SynchronisationDataType.AddressBookEntry; syncAddressBook.DataType = SynchronisationDataType.AddressBookEntry; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); DataBlock_AddressBook addressBook = new DataBlock_AddressBook(); addressBook.AddressBookNumber = (uint)100; addressBook.BytesAddressBookItem = msgBytes; syncAddressBook.data = addressBook; synchronisation = syncAddressBook; MTpacket.body.datablocks.Add(synchronisation); //to complete break; case SynchronisationDataType.EmergencyCallRecipient: DataBlock_SynchronisationEmergencyCallRecipient syncEmergCallRec = new DataBlock_SynchronisationEmergencyCallRecipient(); syncEmergCallRec.blockType = (int)ICDBlockType.Synchronisation; syncEmergCallRec.BlockType = ICDBlockType.Synchronisation; msg = "emergencycallrecipient"; syncEmergCallRec.BlockLengthBytes = (uint)(msg.Length + 2); syncEmergCallRec.dataType = (int)SynchronisationDataType.EmergencyCallRecipient; syncEmergCallRec.DataType = SynchronisationDataType.EmergencyCallRecipient; msgBytes = GetBytes(msg); msgBytes = Encoding.Convert(unicode, utf8, msgBytes); DataBlock_EmergencyCallRecipient emerCallRec = new DataBlock_EmergencyCallRecipient(); emerCallRec.EmergencyCallRecipient = msgBytes; syncEmergCallRec.data = emerCallRec; synchronisation = syncEmergCallRec; MTpacket.body.datablocks.Add(synchronisation); //to complete break; case SynchronisationDataType.EmergencyDestination: DataBlock_SynchronisationEmergencyDestination syncEmergDest = new DataBlock_SynchronisationEmergencyDestination(); syncEmergDest.blockType = (int)ICDBlockType.Synchronisation; syncEmergDest.BlockType = ICDBlockType.Synchronisation; syncEmergDest.dataType = (int)SynchronisationDataType.EmergencyDestination; syncEmergDest.DataType = SynchronisationDataType.EmergencyDestination; //to complete break; case SynchronisationDataType.GPSFrequencyRate: DataBlock_SynchronisationReportingFrequencyRate repFreqRate = new DataBlock_SynchronisationReportingFrequencyRate(); //to complete break; case SynchronisationDataType.ProtocolType: DataBlock_SynchronisationProtocolType protocolType = new DataBlock_SynchronisationProtocolType(); //to complete break; } msgs.Add(MTpacket.ToBytes()); break; }//termina switch principal }//termina while if (msgs.Count > 0) { return true; } else { return false; } }//termina if else { return false; } #endregion } catch (Exception ex) { log.writeToLogFile(LogType.LOG_NOTICE, "ConnectToDatabase", "Hubo un error: {0}, en la consulta: {1} ", ex.Message, sql); return false; } }