Esempio n. 1
0
File: Fw.cs Progetto: phoenixyj/F2B
        public F2B.FirewallConditions Conditions()
        {
            F2B.FirewallConditions conds = new F2B.FirewallConditions();

            byte[] data = stream.ToArray();

            int pos = DataSize[F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_EXPIRATION];

            while (pos < data.Length)
            {
                int size = 0;
                DataSize.TryGetValue((F2B_FWDATA_TYPE0_ENUM)data[pos], out size);

                // this is not necessary because we validate input data
                //if (size == 0)
                //{
                //    // undefined size or unknown type
                //    throw new InvalidDataException("Unknown FwData type or size: " + data[pos]);
                //}
                //
                //if (!(data.Length >= pos + size))
                //{
                //    // Truncated data?!
                //    throw new InvalidDataException("Truncated FwData data with type: " + data[pos]);
                //}

                // Create new firewall rule
                switch ((F2B_FWDATA_TYPE0_ENUM)data[pos])
                {
                case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_EXPIRATION:
                    throw new InvalidDataException("More expiration records in FwData");

                //expiration = IPAddress.NetworkToHostOrder(BitConverter.ToInt64(data, pos + 1));
                //break;
                case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv4:
                case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv4_AND_PREFIX:
                    byte[] baddr4 = new byte[4];
                    Array.Copy(data, pos + 1, baddr4, 0, 4);
                    if ((F2B_FWDATA_TYPE0_ENUM)data[pos] == F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv4)
                    {
                        conds.Add(new IPAddress(baddr4));
                    }
                    else
                    {
                        conds.Add(new IPAddress(baddr4), data[pos + 1 + 4]);
                    }
                    break;

                case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv4_RANGE:
                    byte[] baddrLow4  = new byte[4];
                    byte[] baddrHigh4 = new byte[4];
                    Array.Copy(data, pos + 1, baddrLow4, 0, 4);
                    Array.Copy(data, pos + 1 + 4, baddrHigh4, 0, 4);
                    conds.Add(new IPAddress(baddrLow4), new IPAddress(baddrHigh4));
                    break;

                case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv6:
                case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv6_AND_PREFIX:
                    byte[] baddr6 = new byte[16];
                    Array.Copy(data, pos + 1, baddr6, 0, 16);
                    if ((F2B_FWDATA_TYPE0_ENUM)data[pos] == F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv6)
                    {
                        conds.Add(new IPAddress(baddr6));
                    }
                    else
                    {
                        conds.Add(new IPAddress(baddr6), data[pos + 1 + 16]);
                    }
                    break;

                case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv6_RANGE:
                    byte[] baddrLow6  = new byte[16];
                    byte[] baddrHigh6 = new byte[16];
                    Array.Copy(data, pos + 1, baddrLow6, 0, 16);
                    Array.Copy(data, pos + 1 + 4, baddrHigh6, 0, 16);
                    conds.Add(new IPAddress(baddrLow6), new IPAddress(baddrHigh6));
                    break;

                case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_PORT:
                    conds.Add(IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, pos + 1)));
                    break;

                case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_PORT_RANGE:
                    conds.Add(IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, pos + 1)),
                              IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, pos + 1 + 2)));
                    break;

                case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_PROTOCOL:
                    conds.Add((ProtocolType)data[pos + 1]);
                    break;

                default:
                    throw new InvalidDataException("Unknown FwData type: " + data[pos]);
                    //break;
                }

                pos += size;
            }

            return(conds);
        }
Esempio n. 2
0
File: Fw.cs Progetto: vokac/F2B
        public F2B.FirewallConditions Conditions()
        {
            F2B.FirewallConditions conds = new F2B.FirewallConditions();

            byte[] data = stream.ToArray();

            int pos = DataSize[F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_EXPIRATION];
            while (pos < data.Length)
            {
                int size = 0;
                DataSize.TryGetValue((F2B_FWDATA_TYPE0_ENUM)data[pos], out size);

                // this is not necessary because we validate input data
                //if (size == 0)
                //{
                //    // undefined size or unknown type
                //    throw new InvalidDataException("Unknown FwData type or size: " + data[pos]);
                //}
                //
                //if (!(data.Length >= pos + size))
                //{
                //    // Truncated data?!
                //    throw new InvalidDataException("Truncated FwData data with type: " + data[pos]);
                //}

                // Create new firewall rule
                switch ((F2B_FWDATA_TYPE0_ENUM)data[pos])
                {
                    case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_EXPIRATION:
                        throw new InvalidDataException("More expiration records in FwData");
                    //expiration = IPAddress.NetworkToHostOrder(BitConverter.ToInt64(data, pos + 1));
                    //break;
                    case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv4:
                    case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv4_AND_PREFIX:
                        byte[] baddr4 = new byte[4];
                        Array.Copy(data, pos + 1, baddr4, 0, 4);
                        if ((F2B_FWDATA_TYPE0_ENUM)data[pos] == F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv4)
                            conds.Add(new IPAddress(baddr4));
                        else
                            conds.Add(new IPAddress(baddr4), data[pos + 1 + 4]);
                        break;
                    case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv4_RANGE:
                        byte[] baddrLow4 = new byte[4];
                        byte[] baddrHigh4 = new byte[4];
                        Array.Copy(data, pos + 1, baddrLow4, 0, 4);
                        Array.Copy(data, pos + 1 + 4, baddrHigh4, 0, 4);
                        conds.Add(new IPAddress(baddrLow4), new IPAddress(baddrHigh4));
                        break;
                    case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv6:
                    case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv6_AND_PREFIX:
                        byte[] baddr6 = new byte[16];
                        Array.Copy(data, pos + 1, baddr6, 0, 16);
                        if ((F2B_FWDATA_TYPE0_ENUM)data[pos] == F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv6)
                            conds.Add(new IPAddress(baddr6));
                        else
                            conds.Add(new IPAddress(baddr6), data[pos + 1 + 4]);
                        break;
                    case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_IPv6_RANGE:
                        byte[] baddrLow6 = new byte[16];
                        byte[] baddrHigh6 = new byte[16];
                        Array.Copy(data, pos + 1, baddrLow6, 0, 16);
                        Array.Copy(data, pos + 1 + 4, baddrHigh6, 0, 16);
                        conds.Add(new IPAddress(baddrLow6), new IPAddress(baddrHigh6));
                        break;
                    case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_PORT:
                        conds.Add(IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, pos + 1)));
                        break;
                    case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_PORT_RANGE:
                        conds.Add(IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, pos + 1)),
                            IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, pos + 1 + 2)));
                        break;
                    case F2B_FWDATA_TYPE0_ENUM.F2B_FWDATA_PROTOCOL:
                        conds.Add((ProtocolType)data[pos + 1]);
                        break;
                    default:
                        throw new InvalidDataException("Unknown FwData type: " + data[pos]);
                        //break;
                }

                pos += size;
            }

            return conds;
        }