public void ManejaIncidente(string NombreVia, string sentidoMarcha, double X, double Y, double Z) { //OBTIENE HORA ACTUAL DateTime myDateTime = DateTime.Now; //ACCESO A LA BD BD AccesoBD = new BD(Formulario); string evento, evento2; //Formulario.Invoke(Formulario.myDelegate, new Object[] { "ATASCO!!" }); //Formulario.Invoke(Formulario.myDelegate, new Object[] { "Traffic Jam in: " + NombreVia }); //Se comprueba si ya existe el incidente en las coordenadas X,Y aprox. evento = AccesoBD.ExisteEvento("T1", NombreVia, sentidoMarcha, X, Y); //Formulario.Invoke(Formulario.myDelegate, new Object[] { "¿¿Existe Evento??" }); if (!evento.Equals("error")) { string[] words = evento.Split('|'); //Si no existe el evento se introduce en BD if (evento.Equals("")) { // Formulario.Invoke(Formulario.myDelegate, new Object[] { "NO" }); evento2 = AccesoBD.ExistePosibleEvento("T1", NombreVia, sentidoMarcha, X, Y); if (evento2.Equals("")) { if (AccesoBD.insertarPosibleEvento("T1", NombreVia, sentidoMarcha, X, Y, Z, myDateTime, "")) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "Inserta en PosibleEvneto" }); //Se ha insertado correctamente // Formulario.Invoke(Formulario.myDelegate, new Object[] { "The event has been inserted properly in DB" }); //Si se trata de un nuevo evento se envía un mensaje buscando agregación. AggregarFirmas.setFirmas(); AggregarFirmas.setNumerofirmas(); AggregarFirmas.setEsperoFirmas(); AggregarFirmas.getEsperoFirmas(); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Me quedo a la espera de firmas" }); } else { Formulario.Invoke(Formulario.myDelegate, new Object[] { "IncidenteV1=>Error insertando posibleevento en BD " }); } } agregacion Agpaq = new agregacion(Formulario, NombreVia, sentidoMarcha, X, Y, Z, myDateTime); Agpaq.EnviaNuevoPaqueteAgregacion(); } else { // Formulario.Invoke(Formulario.myDelegate, new Object[] { "SI" }); //Si existe el incidente no hacemos nada Formulario.Invoke(Formulario.myDelegate, new Object[] { "Incident already dealt " }); } }//error }
/*Fucnión que genera un paquete de agregación para que los demás vehículos firmen si están * de acuerto con la información*/ public void EnviaNuevoPaqueteAgregacion() { string IP = IPAddress.Broadcast.ToString(); Cripto criputiles = new Cripto(Formulario); //Se obtiene el pseudónim BD AccesoBD = new BD(Formulario); string pseudonym = AccesoBD.recuperamyPseu(); Cliente Client = new Cliente(Formulario, "9050"); string prueba = "I_Traffic Jam_" + NombreVia + "_" + SentidoMarcha + "_" + CoodX.ToString() + "_" + CoordY.ToString() + "_" + CoordZ.ToString() + "_" + HoraGeneracionPaquete.ToString("MM/dd/yyyy HH:mm:ss"); // Client.respuesta("T1", pseudonym,prueba, IP); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Se envía el paquete" }); Client.respuesta("T1", pseudonym, criputiles.Encrypt(prueba, AccesoBD.recuperamySK()), IP); }
public void beacon() { // txtPuertoCliente.Text; //COJO LA IP DEL OTRO (PUESTA A MANO) string hostName = Dns.GetHostName(); IPHostEntry thisHost = Dns.GetHostEntry(hostName); string thisIpAddr = thisHost.AddressList[0].ToString();//RECUPERO MI IP Random randomNumber = new Random(DateTime.Now.Second); BD DButiles = new BD(Formulario); /*POR AQUI DEBO GENERAR EL BEACON A ENVIAR*/ Thread hiloCliente;// = new Thread(new ThreadStart(IniciarCliente)); // hiloCliente.Start(); int cambioPseu = 50 + randomNumber.Next(10);//calculamos aleatoriamente cuantos beacons enviaremos antes de hacer el cambio de pseudonimo int vecesPseu = 0; string newPseu; while (!Formulario.cerrar) {// EL BEACON SE ENVIA PERIODICAMENTE(en un rango de tiempo) IP = IPAddress.Broadcast.ToString();//"192.168.1.255";//txtIpCliente.Text; //BROADCAST puerto = "9050"; //msj = "01," + thisIpAddr + "," + "PSEU1,"+DateTime.Now.ToString()+", Ek1(ID1:KUid1:TimeStamp)";//";// +generaHash();//txtSmsCliente.Text; msj = "01," + Server.myPseudonimo + "," + DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") +", Ek1(ID1:KUid1:TimeStamp)";//";// +generaHash();//txtSmsCliente.Text; hiloCliente = new Thread(new ThreadStart(IniciarCliente)); hiloCliente.Start(); Thread.Sleep(1000 * (8 + randomNumber.Next(10)));//beacon enviado en tiempo aleatorio entre 5 y 15 vecesPseu++; if (vecesPseu == cambioPseu)//cuando se alcance esta cantidad se cambia el pseudonimo { newPseu = "pseu" + randomNumber.Next(99999); Server.viejoPseu = Server.myPseudonimo; msj = "01," + Server.myPseudonimo + "," + DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") +",00," + newPseu + ", Ek1(00:TimeStamp:newPseu)"; hiloCliente = new Thread(new ThreadStart(IniciarCliente)); hiloCliente.Start(); DButiles.cambiamyPseu(Server.myPseudonimo, newPseu); Server.myPseudonimo = DButiles.recuperamyPseu(); Formulario.Invoke(Formulario.myDelegate5, new Object[] { newPseu }); vecesPseu = 0; cambioPseu = 50 + randomNumber.Next(100); Thread.Sleep(1000 * (5 + randomNumber.Next(10))); } } }
public string RSAverifica(string pseuUser, string datosYfirma, bool publicidad) { BD dbUtiles = new BD(Formulario); string clave = dbUtiles.recuperaSK(pseuUser); string datosDescifrados = Decrypt(datosYfirma, clave); string[] cortado = datosDescifrados.Split(';'); string datos = cortado[0] + ";" + cortado[1] + ";" + cortado[2] + ";" + cortado[3] + ";" + cortado[4] + ";" + cortado[5]; //+ ";" + cortado[6];+ ";" + cortado[7] fecha 7 no por que es cuando expira, esto no se firma byte[] decryptedData = utiles.StrToByteArray(datos); byte[] signedData = Convert.FromBase64String(cortado[cortado.Length-1]);//la firma esta en la posición 8 string usuario = "Autoridad"; if (!publicidad) usuario = pseuUser; string clavePublica = dbUtiles.recuperaPublicaModulo(usuario); string[] Cpublicamodulo = clavePublica.Split(','); RSAParameters Cpublica = new RSAParameters()//RECOGER CPUBLICA DE DB { Exponent = Convert.FromBase64String(Cpublicamodulo[1]), //"AQAB"), Modulus = Convert.FromBase64String(Cpublicamodulo[0]) //"98Ej5BZ/VMG4nxCzdMZoZ8V50//GvnEQc3CX4vyHzDjOfUGB21ZjVF12s+h3ZQmQX/Woq1zZM6sNsTLVG2SiQhzwWIEE7ioyr2vn1OjE17QOlmrVtl8lI4txnZQQh8jaq1mEi1lqI7JMvwBr+AmTWz+Vf5RraWv/a7qonMDovyM=") }; //encryptedData = Criptutiles.RSAEncrypt(dataToEncrypt, Cpublica, false); RSACryptoServiceProvider RSA3 = new RSACryptoServiceProvider(); RSA3.ImportParameters(Cpublica); if (RSA3.VerifyData(decryptedData, "SHA1", signedData))// (dataToEncrypt, "SHA1", signedData); return datosDescifrados; //Formulario.Invoke(Formulario.myDelegate, new Object[] { "Advertisement Data not Correct" }); else return ""; }
public string RSAfirma(string datos) { BD dbUtiles = new BD(Formulario); string[] clavePrivada = dbUtiles.recuperaMisDatosPrivados().Split(','); Utiles utiles = new Utiles(); byte[] dataToSign = utiles.StrToByteArray(datos); RSAParameters Cprivada = new RSAParameters() {//modulo, exponente, claveprivadaD, DP, DQ, InverseQ, P, Q Modulus = Convert.FromBase64String(clavePrivada[0]), Exponent = Convert.FromBase64String(clavePrivada[1]), D = Convert.FromBase64String(clavePrivada[2]), DP = Convert.FromBase64String(clavePrivada[3]), DQ = Convert.FromBase64String(clavePrivada[4]), InverseQ = Convert.FromBase64String(clavePrivada[5]), P = Convert.FromBase64String(clavePrivada[6]), Q = Convert.FromBase64String(clavePrivada[7]) }; RSACryptoServiceProvider RSA2 = new RSACryptoServiceProvider(); RSA2.ImportParameters(Cprivada); byte[] signedData = RSA2.SignData(dataToSign, "SHA1"); return Convert.ToBase64String(signedData).ToString(); }
/*Función que devuelve el resultado de firmar un mensaje si estamos de acuerdo con la información*/ public void InformacionAggreacion(string msje, string IP) { //OBTIENE HORA ACTUAL //DateTime myDateTime = DateTime.Now; //ACCESO A LA BD string hash, viaSentido; BD AccesoBD = new BD(Formulario); string evento, posibleevento; Cripto criputiles = new Cripto(Formulario); DetectaIncidente incidente = new DetectaIncidente(Formulario); //Se comprueba si ya existe el incidente en las coordenadas X,Y aprox. evento = AccesoBD.ExisteEvento("T1", NombreVia, SentidoMarcha, CoodX, CoordY); Formulario.Invoke(Formulario.myDelegate, new Object[] { "¿Tengo el evento en BD? " }); if (evento.Equals("")) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "El evento no lo tengo en BD" }); //SE VA A COMPROBAR SI SE PUEDE SER TESTIGO DE ESTE EVENTO //1º Obtenemos el la vía y el sentido de circulación de nuestr vehículo viaSentido = incidente.ViaSentidoMarcha(); string via = ""; string sentido = ""; if (!viaSentido.Equals("")) { string[] viaSentidoAux = viaSentido.Split('|'); via = viaSentidoAux[0]; sentido = viaSentidoAux[1]; } //2º Si la información está dentro de mi Rango, y circulo por esa vía yo puedo detectar el problema if (EnRango(CoodX, CoordY, via, sentido)) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "La información está dentro de mi rango" }); //3º Si estoy dentro del rango compruebo si detecto el problema if (incidente.CompruebaIncidente()) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "Yo también detecto el incidente" }); Formulario.Invoke(Formulario.myDelegate, new Object[] { "¿Tengo el posible evento en PosibleEvento? " }); posibleevento = AccesoBD.ExistePosibleEvento("T1", NombreVia, SentidoMarcha, CoodX, CoordY); if (posibleevento.Equals("")) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "NO" }); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Inserto PosibleEvento en BD " }); //Se inserta el incidente en posible Evento BD AccesoBD.insertarPosibleEvento("T1", NombreVia, SentidoMarcha, CoodX, CoordY, CoordZ, HoraGeneracionPaquete, ""); } //Firmo el paquete Formulario.Invoke(Formulario.myDelegate, new Object[] { "The packet is to be signed because I can detect the incident" }); //Firmo la información hash = FirmarMsje(msje, Server.myPseudonimo); //Busco my pseudónimo string myPseudonimo = AccesoBD.recuperamyPseu(); //Mando el mensaje con la Firma //Nota hay que agregar el hash Cliente Client = new Cliente(Formulario, "9050"); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Send a signed packet" }); //Client.respuesta("T1", myPseudonimo, "F_Traffic Jam_" + NombreVia + "_" + SentidoMarcha + "_" + Server.myPseudonimo + "_" + hash + "_" + CoodX + "_" + CoordY + "_" + CoordZ, IP); Client.respuesta("T1", myPseudonimo, criputiles.Encrypt("F_Traffic Jam_" + NombreVia + "_" + SentidoMarcha + "_" + Server.myPseudonimo + "_" + hash + "_" + CoodX + "_" + CoordY + "_" + CoordZ, AccesoBD.recuperamySK()), IP); }//EnIF CompruebaIncidente //se trata de un ataque else { Formulario.Invoke(Formulario.myDelegate, new Object[] { "Intento de Ataque" }); } }//EndIF EnRango //No estoy en rango por lo que no puedo comprobar la información else { Formulario.Invoke(Formulario.myDelegate, new Object[] { "La información no está en mi rango" }); } }//EndIF ExisteEvento //Si tengo el evento en la BD o bien yo lo detecté y envié un msje para ser firmado o ya lo firmé y recibí el agregado else { Formulario.Invoke(Formulario.myDelegate, new Object[] { "El evento no es nuevo, ya existe en BD" }); /*Si estoy esperando firmas que que ya mandé el paquete agregado, */ if (AggregarFirmas.getEsperoFirmas()) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "Tambien tengo este evento en mi BD y espero firmas" }); // si mi evento es más antiguo que el que me llega noo string[] info = evento.Split('|'); //Si el mio es más antiguo me quedo con el mio if (DateTime.Parse(info[2]).CompareTo(HoraGeneracionPaquete) < 0) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "La fecha en que yo creé el evento" + info[2] }); Formulario.Invoke(Formulario.myDelegate, new Object[] { "La fecha del evento en el paquete" + HoraGeneracionPaquete }); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Mi evento se creó antes" }); } //Sino, tengo que modificar el mio y quedarme con este else { Formulario.Invoke(Formulario.myDelegate, new Object[] { "Mi evento es más viejo, lo borro de BD" }); //Ya no se queda a la espera de ninguna firma AggregarFirmas.resetEsperoFirmas(); //eliminamos el evento existente AccesoBD.EliminaEvento("T1", HoraGeneracionPaquete); //Agregamos el nuevo evento y lo mandamos firmado InformacionAggreacion(msje, IP); } }//EndIF esperoFirmas //Si no espero firmas es que ya firmé else { Formulario.Invoke(Formulario.myDelegate, new Object[] { "Incident already dealt" }); } } }
/*Función que comprueba las firmas y si son correctas agrega el mensaje en BD*/ public void MensajeAgregado(string msje) { BD AccesoBD = new BD(Formulario); Utiles utiles = new Utiles(); string evento, posibleevento; /* Cripto criputiles = new Cripto(); DetectaIncidente incidente = new DetectaIncidente(Formulario);*/ //Se comprueba si ya existe el incidente en las coordenadas X,Y aprox.la Base de datos evento = AccesoBD.ExisteEvento("T1", NombreVia, SentidoMarcha, CoodX, CoordY); Formulario.Invoke(Formulario.myDelegate, new Object[] { "¿Tengo el evento en BD? " }); if (evento.Equals("")) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "¿Tengo el posible evento en BD? " }); posibleevento = AccesoBD.ExistePosibleEvento("T1", NombreVia, SentidoMarcha, CoodX, CoordY); //Si lo tengo es porque ya lo firmé, ahora lo borro de posible evento y lo inserto en Evento if (!posibleevento.Equals("")) { string[] info = msje.Split('.'); string[] inf_firma = info[1].Split('|'); AccesoBD.insertarEvento("T1", NombreVia, SentidoMarcha, CoodX, CoordY, CoordZ, HoraGeneracionPaquete, inf_firma[0]); //utiles.anadePoi("Atasco", "Atasco", (int)(CoodX * 100000), (int)(CoordY * 100000), 100); utiles.anadePoi("Atasco", "Atasco", (int)(CoodX), (int)(CoordY), 100); AccesoBD.EliminaPosibleEvento("T1", HoraGeneracionPaquete); } else { //Compruebo las firmas contenidas en el mensaje Formulario.Invoke(Formulario.myDelegate, new Object[] { "This packet contains incident information" }); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Check Signatures" }); if (CompruebaFirmas(msje)) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "Las Firmas son buenas" }); string[] info = msje.Split('.'); string mensaje = info[0]; AccesoBD.insertarEvento("T1", NombreVia, SentidoMarcha, CoodX, CoordY, CoordZ, HoraGeneracionPaquete, info[1]); //utiles.anadePoi("Atasco", "Atasco", (int)(CoodX * 100000), (int)(CoordY * 100000), 100); utiles.anadePoi("Atasco", "Atasco", (int)(CoodX), (int)(CoordY), 100); Formulario.Invoke(Formulario.myDelegate4, new Object[] { mensaje + "in " + CoodX + "," + CoordY + ". Recalculating route" }); } //Informo de que podría tratarse de un ataque else { Formulario.Invoke(Formulario.myDelegate, new Object[] { "Attempted Attack on the network" }); } }//end else existePosibleEvento }//EndIF Existeevento else { Formulario.Invoke(Formulario.myDelegate, new Object[] { "Ya tengo el Evento en mi BD no hago nada" }); } }
public void posibleparking() { SError err; SGpsPosition gps; string hostName = Dns.GetHostName(); IPHostEntry thisHost = Dns.GetHostEntry(hostName); string thisIpAddr = thisHost.AddressList[0].ToString(); Cliente mycliente = new Cliente(Formulario, "9050"); DateTime inicio = DateTime.Now.AddSeconds(10.00);//si en menos de X segundos detecta la señal gps avisa de posible aparcamiento string auxiliar, via, sentido; Cripto criputiles = new Cripto(Formulario); BD DButiles = new BD(Formulario); while (DateTime.Compare(DateTime.Now, inicio) < 0) { try { if (CApplicationAPI.GetActualGpsPosition(out err, out gps, false, 1000) == 1) { LONGPOSITION position = new LONGPOSITION(gps.Longitude, gps.Latitude); sentido = ObtenerSentidoMarcha(gps.Course); CApplicationAPI.GetLocationInfo(out err, position, out via, 0); int CoorX = gps.Longitude; int CoorY = gps.Latitude; int CoorZ = gps.Altitude; //string viaOnombre = "calle"; //string sentido = "sentido"; DateTime fechaDato = DateTime.Now; string datoAparcamiento = via + ";" + sentido + ";" + CoorX + ";" + CoorY + ";" + CoorZ + ";" + fechaDato;//Estos datos los coge de un fichero string firma = criputiles.RSAfirma(datoAparcamiento); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Possible parking in: " + CoorX + "," + CoorY }); auxiliar = criputiles.Encrypt(datoAparcamiento+";"+firma, DButiles.recuperamySK()); mycliente.respuesta("P2", Server.myPseudonimo,auxiliar , thisIpAddr); DButiles.insertarEvento("P2", via, sentido, CoorX, CoorY, CoorZ, fechaDato, firma); break; } } catch { } Thread.Sleep(1000); } }
private void gestionaPaqueteAutenticado(string myString, string clientIPAddress, string[] datosConexion) { Cliente myCliente = new Cliente(Formulario, "9050"); string[] coordenadas; //string dirimconges; //int IDbitmap; //SError err; BD AccesoBD= new BD(Formulario); /******************************* Para agregacion *******************************/ string msje, tipo,nombreVia,sentidoMarcha; double X = 0.0, Y = 0.0,Z=0.0; string[] info; switch (datosConexion[0]) { case "D1"://el nodo ha perdido el cambio de beacon string msj = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") + ",00," + Server.myPseudonimo + ", Ek1(00:TimeStamp:newPseu)"; myCliente.respuesta("01", viejoPseu, msj, clientIPAddress); break; case "T1"://paquete de tráfico, comprobamos validez datosConexion[2] = Criptutiles.Decrypt(datosConexion[2], DButiles.recuperaSK(datosConexion[1])); coordenadas = datosConexion[2].Split(';'); lock (this) { info = datosConexion[2].Split('_'); tipo = info[0]; //Si es un mensaje de aggregación if (tipo.Equals("I")) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "An information packet arrives" }); msje = info[1]; nombreVia = info[2]; sentidoMarcha = info[3]; X = double.Parse(info[4]); Y = double.Parse(info[5]); Z = double.Parse(info[6]); Formulario.Invoke(Formulario.myDelegate, new Object[] { msje + " in " + nombreVia + "direction " + sentidoMarcha + X + ", " + Y }); System.Globalization.CultureInfo myCIintl = new System.Globalization.CultureInfo("es-ES", false); agregacion PaqAg = new agregacion(Formulario, nombreVia, sentidoMarcha, X, Y, Z, DateTime.ParseExact(info[7], "MM/dd/yyyy HH:mm:ss", myCIintl)); PaqAg.InformacionAggreacion(msje, clientIPAddress); } //Si es una respuesta de aggregación //Formato del paquete|F-Atasco en la M40-ID-hash.ToString| if (tipo.Equals("F")) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "LLega un paquete F" }); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Compruebo si estoy a la espera de firmas" }); if (AggregarFirmas.getEsperoFirmas()) { //Formamos el paquete con la información que nos va llegando de los diferentes vehículos //string IDPaquete=info[1]; msje = info[1]; nombreVia = info[2]; sentidoMarcha = info[3]; string IDVehículo = info[4]; string firma = info[5]; string data = "A signed packet arrives from " + IDVehículo.ToString(); Formulario.Invoke(Formulario.myDelegate, new Object[] { data }); X = double.Parse(info[6]); Y = double.Parse(info[7]); Z = double.Parse(info[8]); DateTime myDateTime = DateTime.Now; string posiblevento; posiblevento = AccesoBD.ExistePosibleEvento("T1", nombreVia, sentidoMarcha, X, Y); Formulario.Invoke(Formulario.myDelegate, new Object[] { "¿Existe el posible Evento?" }); if (!(posiblevento.Equals("") && posiblevento.Equals("error"))) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "SI" }); Formulario.Invoke(Formulario.myDelegate, new Object[] { "LO esperaba" }); if (AggregarFirmas.getnumerofirmas() <= 0) { string IP = IPAddress.Broadcast.ToString(); string firmas = AggregarFirmas.getfirmas(); AggregarFirmas.agregafirmas(firmas + firma + "|" + IDVehículo); AggregarFirmas.incrementarfirmas(); Formulario.Invoke(Formulario.myDelegate, new Object[] { "AgregoFirma con id VEhículo, Lo inserto en BD" }); AccesoBD.insertarEvento("T1", nombreVia, sentidoMarcha, X, Y, Z, myDateTime, firma); //utiles.anadePoi("Atasco", "Atasco", (int)(X*100000), (int)(Y*100000), 100); utiles.anadePoi("Atasco", "Atasco", (int)(X), (int)(Y), 100); Cliente Client = new Cliente(Formulario, "9050"); string prueba = "A_Traffic Jam." + AggregarFirmas.getfirmas() + "_" + nombreVia + "_" + sentidoMarcha + "_" + X.ToString() + "_" + Y.ToString() + "_" + Z.ToString() + "_" + myDateTime.ToString("MM/dd/yyyy HH:mm:ss"); Client.respuesta("T1", myPseudonimo, Criptutiles.Encrypt(prueba, AccesoBD.recuperamySK()), IP); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Send an aggregation Packet" }); AggregarFirmas.resetEsperoFirmas(); } } } else { Formulario.Invoke(Formulario.myDelegate, new Object[] { "No espero paquete F, no hago nada" }); } }//end IF F if (tipo.Equals("A")) { Formulario.Invoke(Formulario.myDelegate, new Object[] { "An agregation packet arrives" }); msje = info[1]; nombreVia = info[2]; sentidoMarcha = info[3]; X = double.Parse(info[4]); Y = double.Parse(info[5]); Z = double.Parse(info[6]); System.Globalization.CultureInfo myCIintl = new System.Globalization.CultureInfo("es-ES", false); agregacion PaqAg = new agregacion(Formulario, nombreVia, sentidoMarcha, X, Y, Z, DateTime.ParseExact(info[7], "MM/dd/yyyy HH:mm:ss", myCIintl)); PaqAg.MensajeAgregado(msje); }//end IF A }//end lock break; case "P1"://paquete de publicidad, oomprobamos validez e insertamos en el mapa en caso de ser válido //COMPROBANDO FIRMA CIFRADA (CLAVE PUBLICA) string datosDescifrados=Criptutiles.RSAverifica(datosConexion[1], datosConexion[2], true); if (datosDescifrados.Equals("")) // if (!RSA3.VerifyData(decryptedData, "SHA1", signedData))// (dataToEncrypt, "SHA1", signedData); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Advertisement Data not Correct" }); else { //Formulario.Invoke(Formulario.myDelegate, new Object[] { "Advertisement Data Correct" }); //datosConexion[2] = Criptutiles.Decrypt(datosConexion[2], DButiles.recuperaSK(datosConexion[1])); coordenadas = datosDescifrados.Split(';'); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Advertisement: " + coordenadas[0]+" in "+ coordenadas[2] + "," + coordenadas[3] }); DButiles.insertarEvento("P1", coordenadas[0], coordenadas[1], double.Parse(coordenadas[2]), double.Parse(coordenadas[3]), double.Parse(coordenadas[4]), DateTime.Parse(coordenadas[5]), coordenadas[coordenadas.Length-1]); utiles.anadePoi("El Corte Ingles","Comercio", int.Parse(coordenadas[2]), int.Parse(coordenadas[3]), 100); /* try { int res = CApplicationAPI.DeletePoiCategory(out err, coordenadas[0], "ESP", 1000); string dirImagen = @coordenadas[0]+".bmp"; res = CApplicationAPI.AddPoiCategory(out err, coordenadas[3],dirImagen, "ESP", 1000); LONGPOSITION position = new LONGPOSITION(int.Parse(coordenadas[2]), int.Parse(coordenadas[3]));//X, Y); SPoi poi = new SPoi(position, "Comercio", coordenadas[0], 1000); res = CApplicationAPI.AddPoi(out err, ref poi, 1000); } catch {}*/ } break; case "P2"://paquete de aparcamiento //COMPROBANDO FIRMA CIFRADA (CLAVE PUBLICA) string datosDescifrados2=Criptutiles.RSAverifica(datosConexion[1], datosConexion[2],false); if (datosDescifrados2.Equals("")) // if (!RSA3.VerifyData(decryptedData, "SHA1", signedData))// (dataToEncrypt, "SHA1", signedData); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Possible Parking Data not Correct" }); else { // datosConexion[2] = Criptutiles.Decrypt(datosConexion[2], DButiles.recuperaSK(datosConexion[1])); coordenadas = datosDescifrados2.Split(';'); Formulario.Invoke(Formulario.myDelegate, new Object[] { "Parking in: " + coordenadas[0] + " sense " + coordenadas[1] + "coordinates " + coordenadas[2] + "," + coordenadas[3] }); DButiles.insertarEvento("P2", coordenadas[0], coordenadas[1], double.Parse(coordenadas[2]), double.Parse(coordenadas[3]), double.Parse(coordenadas[4]), DateTime.Parse(coordenadas[5]), coordenadas[coordenadas.Length - 1]); utiles.anadePoi("Posible Plaza", "Posible Plaza", int.Parse(coordenadas[2]), int.Parse(coordenadas[3]),100); /* try { int res = CApplicationAPI.DeletePoiCategory(out err, "Posible Plaza", "ESP", 1000); string dirImagen = @"parkingsinfondo.bmp"; res = CApplicationAPI.AddPoiCategory(out err, "Posible Plaza", dirImagen, "ESP", 1000); LONGPOSITION position = new LONGPOSITION(int.Parse(coordenadas[2]), int.Parse(coordenadas[3]));//X, Y); SPoi poi = new SPoi(position, "Posible Plaza", "Posible plaza", 1000); res = CApplicationAPI.AddPoi(out err, ref poi, 1000); //if (CApplicationAPI.AddBitmapToMap(out err, dirimconges, int.Parse(coordenadas[2]), int.Parse(coordenadas[3]), out IDbitmap, 1000) == 1) } catch {}*/ } break; default: break; } }
//La publicidad debe recoger de un fichero la firma y mandarla a cada usuario con el que se autentique. private void publicidad_Click(object sender, EventArgs e) { BD DButiles = new BD(this); int CoorX = -1632721;// 0899; //-1538956;// int CoorY = 2848901;// 704;// 924;// 2309;//2786158;// int CoorZ = 0; SError err; SGpsPosition gps; try { if (CApplicationAPI.GetActualGpsPosition(out err, out gps, false, 1000) == 1) { CoorX = gps.Longitude; CoorY = gps.Latitude; } } catch { } string viaOnombre = "El Corte Ingles";//El Corte Ingles string sentido = "sentido"; DateTime fechaDato = DateTime.Now; string datoPublicidad = viaOnombre + ";" + sentido + ";" + CoorX + ";" + CoorY + ";" + CoorZ + ";" + fechaDato;//Estos datos los coge de un fichero //GENERAMOS FIRMA (ESTO ES PARA PRUEBAS)En la versión final esta firma la recogerá de un fichero que le pasará la autoridad Utiles utiles = new Utiles(); byte[] dataToSign = utiles.StrToByteArray(datoPublicidad); RSAParameters Cprivada = new RSAParameters() { D = Convert.FromBase64String("7QePOux7La+Y3jWwOwyHXqCDiduvXQv23TrfVX6cvTmr9BH0FtBzf4dbxYumjreztNrmX+wYsWH5W4pycB67S/tWODZrlrR8zuCCjWauC3ZjPWnlyU+Npg0qzLm7XkCLiuveQWpR4E/TWcs6Wr9pVL2zXT/BsWYC9t39qvkhTKE="), DP = Convert.FromBase64String("fJnDOGGMlWgVoQ+7MZtUfivpChykRC39W5UyTnnZ8+xxkt67nzlxXs2wl3w8EV1wRGYPXr0KfjFldUXYGd8h2Q=="), DQ = Convert.FromBase64String("3Ls7pKVPqzABAUxQ6jTKypsH7Zd+DJDhQfQset2sK15DmDU+cAY2BFufKvsojfYI2UKKtqvoIGKrWzZ+zrwKOQ=="), Exponent = Convert.FromBase64String("AQAB"), InverseQ = Convert.FromBase64String("rWWEy1hBu44BBcjuZwFNiixwEQobmHCG+ZqFRldjJKT/2RThzKNc9Q6vYwR52WSwGNxLmlwTvRb2p/gM13WaVQ=="), Modulus = Convert.FromBase64String("98Ej5BZ/VMG4nxCzdMZoZ8V50//GvnEQc3CX4vyHzDjOfUGB21ZjVF12s+h3ZQmQX/Woq1zZM6sNsTLVG2SiQhzwWIEE7ioyr2vn1OjE17QOlmrVtl8lI4txnZQQh8jaq1mEi1lqI7JMvwBr+AmTWz+Vf5RraWv/a7qonMDovyM="), P = Convert.FromBase64String("/SEbB4+LoAyHzUFTxyuA2mOJdZYIMiugNv9hUZQUjRzVbavfGVaxP/Pu5nxkyzmPtgcTn3m9nwbqwQSlLwEDdw=="), Q = Convert.FromBase64String("+pBuG5WisL4wg+B5auoXSQ5Q0/v4405ypMdQ5p6mG2notIamTZ4sp3m2+PpQOitlXrOQemlL3oaed2SH2XQUtQ==") }; RSACryptoServiceProvider RSA2 = new RSACryptoServiceProvider(); RSA2.ImportParameters(Cprivada); byte[] signedData = RSA2.SignData(dataToSign, "SHA1"); string firma=Convert.ToBase64String(signedData).ToString();// Cliente clientePubli = new Cliente(this, "9050"); Cripto criputiles = new Cripto(this); Invoke(myDelegate, new Object[] { "Sending Advertisements." }); //SError err; /* int res = CApplicationAPI.DeletePoiCategory(out err, "El Corte Inglés", "ESP", 0);//(Borramos Para las pruebas) res = CApplicationAPI.DeletePoiCategory(out err, "28482309", "ESP", 0);//(Borramos Para las pruebas) res = CApplicationAPI.DeletePoiCategory(out err, "atasco", "ESP", 0);//(Borramos Para las pruebas) res = CApplicationAPI.DeletePoiCategory(out err, "comercio", "ESP", 0);//(Borramos Para las pruebas) res = CApplicationAPI.DeletePoiCategory(out err, "el corte ingles", "ESP", 0);//(Borramos Para las pruebas) res = CApplicationAPI.DeletePoiCategory(out err, "elcorteingles", "ESP", 0);//(Borramos Para las pruebas) res = CApplicationAPI.DeletePoiCategory(out err, "posible plaza", "ESP", 0);//(Borramos Para las pruebas) res = CApplicationAPI.DeletePoiCategory(out err, "restaurante", "ESP", 0);//(Borramos Para las pruebas)*/ DButiles.insertarEvento("P1", viaOnombre, sentido, CoorX, CoorY, CoorZ, fechaDato, firma); //-1538936, 2786108, DateTime.Now);//Arinaga clientePubli.respuesta("P1", Server.myPseudonimo, criputiles.Encrypt(datoPublicidad+ ";" + firma, DButiles.recuperamySK()) , IPAddress.Broadcast.ToString());//, //utiles.anadePoi("El Corte Ingles", "Comercio", CoorX, CoorY, 100); utiles.anadePoi("banesto", "Comercio", CoorX, CoorY, 100); /* //---------------------------------------------------------------------------------------------- //ENVIAMOS APARCAMIENTO TB (PARA PRUEBA) CoorX = CoorX + 200;//-1631287; //CoorY = 2850168; viaOnombre = "calle1"; sentido = "sentido1"; fechaDato = DateTime.Now; string datoAparcamiento = viaOnombre + ";" + sentido + ";" + CoorX + ";" + CoorY + ";" + CoorZ + ";" + fechaDato;//Estos datos los coge de un fichero firma= criputiles.RSAfirma(datoAparcamiento); Invoke(myDelegate, new Object[] { "Sending Possible Parking" }); DButiles.insertarEvento("P2", viaOnombre, sentido, CoorX, CoorY, CoorZ, fechaDato, firma); clientePubli.respuesta("P2", Server.myPseudonimo, criputiles.Encrypt(datoAparcamiento + ";"+firma, DButiles.recuperamySK()), IPAddress.Broadcast.ToString());//, utiles.anadePoi("Posible Plaza", "Posible Plaza", CoorX, CoorY, 100); //---------------------------------------------------------------------------------------------- //ENVIAMOS ATASCO TB (PARA PRUEBA) CoorX = CoorX + 200;// -1538956; // CoorY = 2786158; viaOnombre = "calle1"; sentido = "sentido1"; fechaDato = DateTime.Now; string datoAtasco = viaOnombre + ";" + sentido + ";" + CoorX + ";" + CoorY + ";" + CoorZ + ";" + fechaDato;//Estos datos los coge de un fichero firma = criputiles.RSAfirma(datoAtasco); Invoke(myDelegate, new Object[] { "Sending Possible Traffic Jam" }); DButiles.insertarEvento("T1", viaOnombre, sentido, CoorX, CoorY, CoorZ, fechaDato, firma); clientePubli.respuesta("T1", Server.myPseudonimo, criputiles.Encrypt(datoAtasco + ";" + firma, DButiles.recuperamySK()), IPAddress.Broadcast.ToString());//, utiles.anadePoi("Atasco", "Atasco", CoorX, CoorY, 100);*/ }
//Iniciamos aplicacion private void Play_Click(object sender, EventArgs e) { progressBar1.Maximum = 7; progressBar1.Value = 1; cerrar = false; Invoke(myDelegate, new Object[] { "Loading... Please Wait." }); Play.Enabled = false;//DESABILITO PLAY Play.Visible = false; //Habilitamos hardware Hardware detect = new Hardware(); if (detect.BluetoothOn())//habilita bluetooth Invoke(myDelegate, new Object[] { "Enabled Bluetooth successfully." }); if (detect.WifiOn())// habilita wifi Invoke(myDelegate, new Object[] { "Enabled Wifi successfully." }); if (detect.conectawifi("vaipho"))//conecta a la red vaipho Invoke(myDelegate, new Object[] { "VAiPho conected successfully." }); progressBar1.Value = 2; //Si el manos libres del coche se apaga, VAiPho se apagará también (para evitar atascos inexistentes) int key = (int)Registry.GetValue(registryKey, "Bluetooth", -1); rg = new RegistryState(registryKey, registryValueName); rg.Changed += new ChangeEventHandler(bluetooth_Changed); progressBar1.Value = 3; //LA CREACION DE LA BD NO SE DEBE EJECUTAR EN LA VERSIÓN FINAL Invoke(myDelegate, new Object[] { "Generating DB." }); BD basededatos = new BD(this); //if (basededatos.crearBD()) if (basededatos.crearTablas()) { progressBar1.Value = 4; Server Servidor = new Server(this);//, 9050); Cliente Cliente1 = new Cliente(this, "9050"); progressBar1.Value = 5; string hostName = Dns.GetHostName(); IPHostEntry thisHost = Dns.GetHostEntry(hostName); labelIP.Text = thisHost.AddressList[0].ToString(); labelPseu.Text = basededatos.recuperamyPseu(); Thread hiloCliente = new Thread(new ThreadStart(Cliente1.beacon)); hiloCliente.Start(); progressBar1.Value = 6; DetectaIncidente VigilaCarretera = new DetectaIncidente(this);//Aquí dentro se lleva a cabo todo lo de detectarIncidentes VigilaCarretera.DetectaIncidenteStart(); //VigilaCarretera.posibleparking();//señala un posible aparcamiento(al encenderse el servicio, no en el play) progressBar1.Value = 7; /*Prueba VigilaCarretera = new Prueba(this); VigilaCarretera.DetectaIncidenteStart();*/ } progressBar1.Value = 0; }
private void Form1_Load(object sender, EventArgs e) { cerrar = false; Play.Visible = false; progressBar1.Maximum = 8; progressBar1.Value = 1; Invoke(myDelegate, new Object[] { "Loading... Please Wait." }); Play.Enabled = false;//DESABILITO PLAY //byte[] m_soundBytes = new byte[Properties.Resources.iniciando1.Length]; //Properties.Resources.iniciando1.Read(m_soundBytes, 0, (int)Properties.Resources.iniciando1.Length); // new System.Media.SoundPlayer( //System.IO.Stream stream = (System.IO.Stream)Properties.Resources.ResourceManager.BaseName. "iniciando1",false,false); // System.Media.SoundPlayer player = new System.Media.SoundPlayer(stream); // Properties.Resources.iniciando1.Play(); //WSounds ws1 = ; // string patch = System.AppDomain.CurrentDomain.BaseDirectory.ToString() BaseDirectory;// BaseDirectory; string _appFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); string dirSonido = _appFolder + @"\Sounds\iniciando.wav";//\Sounds\\Sonidos"\\Tarjeta de almacenamiento\\FLEET_MOBILE_14d\\MisSonidos\\iniciando.wav";//Properties.Resources.ResourceManager.BaseName+"\\// "..\\Resources\\iniciando.wav";//\\Tarjeta de almacenamiento\\FLEET_MOBILE_14d\\MisSonidos\\iniciando.wav"; dirSonido = "\\Tarjeta de almacenamiento\\FLEET_MOBILE_14d\\MisSonidos\\iniciando.wav"; try { WSounds ws = new WSounds(); ws.Play(dirSonido, ws.SND_FILENAME | ws.SND_ASYNC); } catch (Exception ex) { Invoke(myDelegate, new Object[] { "Error: " + ex.Message }); } Hardware detect = new Hardware(); if (detect.BluetoothOn())//habilita bluetooth Invoke(myDelegate, new Object[] { "Enabled Bluetooth successfully." }); if (detect.WifiOn())// habilita wifi Invoke(myDelegate, new Object[] { "Enabled Wifi successfully." }); if (detect.conectawifi("vaipho"))//conecta a la red vaipho Invoke(myDelegate, new Object[] { "VAiPho connected successfully." }); progressBar1.Value = 2; //Si el manos libres del coche se apaga, VAiPho se apagará también (para evitar atascos inexistentes) int key = (int)Registry.GetValue(registryKey, "Bluetooth", -1); rg = new RegistryState(registryKey, registryValueName); rg.Changed += new ChangeEventHandler(bluetooth_Changed); progressBar1.Value = 3; //LA CREACION DE LA BD NO SE DEBE EJECUTAR EN LA VERSIÓN FINAL Invoke(myDelegate, new Object[] { "Generating DB." }); BD basededatos = new BD(this); progressBar1.Value = 4; /* if (basededatos.crearTablas())//comentar inserts en crear tablas. { basededatos.creaActualizaBD(); }*/ //if (basededatos.crearBD()) if (basededatos.crearTablas()) { progressBar1.Value = 5; Server Servidor = new Server(this);//, 9050); Cliente Cliente1 = new Cliente(this, "9050"); string hostName = Dns.GetHostName(); progressBar1.Value = 6; IPHostEntry thisHost = Dns.GetHostEntry(hostName); labelPseu.Text = basededatos.recuperamyPseu(); labelIP.Text = thisHost.AddressList[0].ToString(); labelPseu.Text = basededatos.recuperamyPseu(); Thread hiloCliente = new Thread(new ThreadStart(Cliente1.beacon)); hiloCliente.Start(); progressBar1.Value = 7; DetectaIncidente VigilaCarretera = new DetectaIncidente(this); VigilaCarretera.DetectaIncidenteStart(); VigilaCarretera.posibleparking(); progressBar1.Value = 8; /*Prueba VigilaCarretera = new Prueba(this); VigilaCarretera.DetectaIncidenteStart();*/ } progressBar1.Value = 0; }
private void autenticados_Click(object sender, EventArgs e) { BD DButiles = new BD(this); DButiles.mostrarDatosVigentes(); }
private void Atasco_Click(object sender, EventArgs e) { BD DButiles = new BD(this); int CoorX = -1632700;// 0899; //-1538956;// int CoorY = 2848779;//2309;//2786158;// int CoorZ = 0; SError err; SGpsPosition gps; try { if (CApplicationAPI.GetActualGpsPosition(out err, out gps, false, 1000) == 1) { CoorX = gps.Longitude; CoorY = gps.Latitude; } } catch { } string viaOnombre = "Atasco"; string sentido = "sentido"; DateTime fechaDato = DateTime.Now; string datoPublicidad = viaOnombre + ";" + sentido + ";" + CoorX + ";" + CoorY + ";" + CoorZ + ";" + fechaDato;//Estos datos los coge de un fichero // string firma = Convert.ToBase64String(signedData).ToString();// Utiles utiles = new Utiles(); Cliente clientePubli = new Cliente(this, "9050"); Cripto criputiles = new Cripto(this); //---------------------------------------------------------------------------------------------- //ENVIAMOS ATASCO TB (PARA PRUEBA) //CoorX = CoorX + 200;// -1538956; // CoorY = 2786158; viaOnombre = "calle1"; sentido = "sentido1"; fechaDato = DateTime.Now;//.GetDateTimeFormats("MM/dd/yyyy HH:mm:ss"); agregacion datoagregado= new agregacion(this, viaOnombre, sentido, CoorX, CoorY, CoorZ, fechaDato); string firma = datoagregado.FirmarMsje("Traffic Jam", Server.myPseudonimo); string datoAtasco = viaOnombre + "_" + sentido + "_" + CoorX + "_" + CoorY + "_" + CoorZ + "_" + fechaDato.ToString("MM/dd/yyyy HH:mm:ss");//Estos datos los coge de un fichero // firma = criputiles.RSAfirma(datoAtasco); string mensaje = "A_Traffic Jam." + firma + '|'+Server.myPseudonimo + "_" + datoAtasco; Invoke(myDelegate, new Object[] { "Sending Possible Traffic Jam" }); DButiles.insertarEvento("T1", viaOnombre, sentido, CoorX, CoorY, CoorZ, fechaDato, firma); clientePubli.respuesta("T1", Server.myPseudonimo, criputiles.Encrypt(mensaje, DButiles.recuperamySK()), IPAddress.Broadcast.ToString());//,+ ";" + firma utiles.anadePoi("Atasco", "Atasco", CoorX, CoorY, 100); }