/*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);
        }
        /*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" });
                }

            }
        }
Exemple #3
0
        //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);*/
        }
        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);
            }
        }
Exemple #5
0
        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);
        }