Exemple #1
0
        public Error Unpack(byte[] entrada, out byte[] salida)
        {
            Enmascarador enmask = new Enmascarador(ProtoConfig.CONFIG);
            Crc16Ccitt   crc    = new Crc16Ccitt(0);
            Empaquetador emp    = new Empaquetador();

            int lonMenR = 0;

            byte[] menRArr = new byte[0];

            if (entrada[entrada.Length - 1] != 0x03)
            {
                foreach (byte byt in entrada)
                {
                    lonMenR++;
                    if (byt == 0x03)
                    {
                        Array.Resize(ref entrada, lonMenR);
                        break;
                    }
                }
                menRArr = new byte[lonMenR];
            }
            else
            {
                menRArr = new byte[entrada.Length];
            }

            enmask.Desenmascara(entrada, entrada.Length, ref menRArr, ref lonMenR);

            //if (ProtoConfig.CONFIG.LevelLog == EnumMessageType.DEBUG)
            //    PeTR.LogBuffer(byteToChar(aRecibir), "Paquete enmascarado ( " + aRecibir.Length.ToString() + "b )", 16, aRecibir.Length);
            //PeTR.LogBuffer(byteToChar(menRArr), "Recibe " + tipoMen.Substring(0, 1) + " ( " + menRArr.Length.ToString() + "b )", 16, menRArr.Length);

            if (crc.compruebaCrc(menRArr, lonMenR))
            {
                Error Err = emp.Desempaqueta(menRArr, out salida, ref lonMenR, 2, ref ordenAckE);
                if (Err.CodError != 0)
                {
                    return(Err);
                }
            }
            else
            {
                TransacManager.ProtoConfig.NACK_ENV = NackEnv.CRC;
                salida = null;
                return(new Error("Error protocolo: CRC recibido inválido.", (int)ErrProtocolo.CRC, 0));
            }
            //if (CONFIG.LevelLog == EnumMessageType.DEBUG) pe.LogBuffer(byteToChar(aRecibir), "Paquete sin desenmascarar: ", 16, aRecibir.Length);
            //pe.LogBuffer(byteToChar(menRArr), "Paquete desenmascarado: ", 16, menRArr.Length);
            //Comunicacion.setErrorNACK(NackEnv.SINERROR);
            return(new Error());
        }
Exemple #2
0
        public Error Pack(byte[] entrada, out byte[] salida, EnumPaquete tipo, ushort orden)
        {
            if (tipo == EnumPaquete.ACK || tipo == EnumPaquete.EOT)
            {
                salida = new byte[256];
            }
            else
            {
                salida = new byte[(entrada.Length * 2) + 9];
            }

            if (entrada == null)
            {
                return(new Error("Buffer a enviar nulo.", (int)ErrProtocolo.PARAM_NULO_INVALIDO, 0));
            }

            Enmascarador enmask = new Enmascarador(TransacManager.ProtoConfig.CONFIG);
            Crc16Ccitt   crc    = new Crc16Ccitt(0);
            Empaquetador emp    = new Empaquetador();

            string tipoMen = "";

            if (tipo == EnumPaquete.DATOS)
            {
                tipoMen = Encoding.UTF8.GetString(entrada, 0, 1);
            }
            else
            {
                tipoMen = tipo.ToString();
            }

            int longi = 0;

            byte[] aEnviar3;

            if (TransacManager.ProtoConfig.NACK_ENV == NackEnv.SINERROR)
            {
                byte[] aEnviar2;
                Error  Err = emp.Empaqueta(entrada, out aEnviar2, entrada.Length, tipo, orden);
                if (Err.CodError != 0)
                {
                    return(Err);
                }

                //aEnviar3 = crc.AddCrcToBuffer(aEnviar2, aEnviar2.Length);
                longi = 0;

                // entrada no se usa, para que estaba esto??
                //entrada = new byte[aEnviar3.Length + 1];
                //entrada = aEnviar3;
                //Array.Resize(ref entrada, aEnviar3.Length + 1);
                //entrada[aEnviar3.Length] = 0x03;

                enmask.Enmascara(aEnviar2, aEnviar2.Length, ref salida, ref longi);
                //salida[longi] = Empaquetador.;
                //longi++;
                Array.Resize(ref salida, longi);
            }
            else // envio NACK con el tipo de error (TransacManager.ProtoConfig.NACK_ENV)
            {
                byte[] nac = new byte[1];
                nac = ConstructorMenEnv.crearNack((byte)TransacManager.ProtoConfig.NACK_ENV);

                byte[] aEnviar2;
                Error  Err = emp.Empaqueta(nac, out aEnviar2, nac.Length, EnumPaquete.NACK, orden);
                if (Err.CodError != 0)
                {
                    return(Err);
                }

                aEnviar3 = crc.AddCrcToBuffer(aEnviar2, aEnviar2.Length);
                longi    = 0;

                entrada = new byte[aEnviar3.Length + 1];
                entrada = aEnviar3;
                Array.Resize(ref entrada, aEnviar3.Length + 1);
                entrada[aEnviar3.Length] = 0x03;

                enmask.Enmascara(aEnviar3, aEnviar3.Length, ref salida, ref longi);
                salida[longi] = 0x03;
                longi++;
                Array.Resize(ref salida, longi);
            }

            return(new Error());
        }
        public Error Unpack(byte[] entrada, out byte[] salida)
        {
            Enmascarador enmask = new Enmascarador(ProtoConfig.CONFIG);
            Crc16Ccitt crc = new Crc16Ccitt(0);
            Empaquetador emp = new Empaquetador();

            int lonMenR = 0;
            byte[] menRArr = new byte[0];

            if (entrada[entrada.Length - 1] != 0x03)
            {
                foreach (byte byt in entrada)
                {
                    lonMenR++;
                    if (byt == 0x03)
                    {
                        Array.Resize(ref entrada, lonMenR);
                        break;
                    }
                }
                menRArr = new byte[lonMenR];
            }
            else
                menRArr = new byte[entrada.Length];

            enmask.Desenmascara(entrada, entrada.Length, ref menRArr, ref lonMenR);

            //if (ProtoConfig.CONFIG.LevelLog == EnumMessageType.DEBUG)
            //    PeTR.LogBuffer(byteToChar(aRecibir), "Paquete enmascarado ( " + aRecibir.Length.ToString() + "b )", 16, aRecibir.Length);
            //PeTR.LogBuffer(byteToChar(menRArr), "Recibe " + tipoMen.Substring(0, 1) + " ( " + menRArr.Length.ToString() + "b )", 16, menRArr.Length);

            if (crc.compruebaCrc(menRArr, lonMenR))
            {
                Error Err = emp.Desempaqueta(menRArr, out salida, ref lonMenR, 2, ref ordenAckE);
                if (Err.CodError != 0)
                    return Err;
            }
            else
            {
                TransacManager.ProtoConfig.NACK_ENV = NackEnv.CRC;
                salida = null;
                return new Error("Error protocolo: CRC recibido inválido.", (int)ErrProtocolo.CRC, 0);
            }
            //if (CONFIG.LevelLog == EnumMessageType.DEBUG) pe.LogBuffer(byteToChar(aRecibir), "Paquete sin desenmascarar: ", 16, aRecibir.Length);
            //pe.LogBuffer(byteToChar(menRArr), "Paquete desenmascarado: ", 16, menRArr.Length);
            //Comunicacion.setErrorNACK(NackEnv.SINERROR);
            return new Error();
        }
        public Error Pack(byte[] entrada, out byte[] salida, EnumPaquete tipo, ushort orden)
        {
            if (tipo == EnumPaquete.ACK || tipo == EnumPaquete.EOT)
                salida = new byte[256];
            else
                salida = new byte[(entrada.Length * 2) + 9];

            if (entrada == null)
                return new Error("Buffer a enviar nulo.", (int)ErrProtocolo.PARAM_NULO_INVALIDO , 0);

            Enmascarador enmask = new Enmascarador(TransacManager.ProtoConfig.CONFIG);
            Crc16Ccitt crc = new Crc16Ccitt(0);
            Empaquetador emp = new Empaquetador();

            string tipoMen = "";
            if (tipo == EnumPaquete.DATOS) tipoMen = Encoding.UTF8.GetString(entrada, 0, 1);
            else tipoMen = tipo.ToString();

            int longi = 0;

            byte[] aEnviar3;

            if (TransacManager.ProtoConfig.NACK_ENV == NackEnv.SINERROR)
            {
                byte[] aEnviar2;
                Error Err = emp.Empaqueta(entrada, out aEnviar2, entrada.Length, tipo, orden);
                if (Err.CodError != 0)
                    return Err;

                aEnviar3 = crc.AddCrcToBuffer(aEnviar2, aEnviar2.Length);
                longi = 0;

                entrada = new byte[aEnviar3.Length + 1];
                entrada = aEnviar3;
                Array.Resize(ref entrada, aEnviar3.Length + 1);
                entrada[aEnviar3.Length] = 0x03;

                enmask.Enmascara(aEnviar3, aEnviar3.Length, ref salida, ref longi);
                salida[longi] = 0x03;
                longi++;
                Array.Resize(ref salida, longi);
            }
            else // envio NACK con el tipo de error (TransacManager.ProtoConfig.NACK_ENV)
            {
                byte[] nac = new byte[1];
                nac = ConstructorMenEnv.crearNack((byte)TransacManager.ProtoConfig.NACK_ENV);

                byte[] aEnviar2;
                Error Err = emp.Empaqueta(nac, out aEnviar2, nac.Length, EnumPaquete.NACK, orden);
                if (Err.CodError != 0)
                    return Err;

                aEnviar3 = crc.AddCrcToBuffer(aEnviar2, aEnviar2.Length);
                longi = 0;

                entrada = new byte[aEnviar3.Length + 1];
                entrada = aEnviar3;
                Array.Resize(ref entrada, aEnviar3.Length + 1);
                entrada[aEnviar3.Length] = 0x03;

                enmask.Enmascara(aEnviar3, aEnviar3.Length, ref salida, ref longi);
                salida[longi] = 0x03;
                longi++;
                Array.Resize(ref salida, longi);
            }

            return new Error();
        }