Пример #1
0
            public PanasonicDiscovery(PhysicalAddress macAddress, IPAddress _ip)
            {
                byte[] ipBytes;
                UInt32 ipUInt32;

                _uint32_04 = NetworkUtils.bigEndian32(0x000d0000);
                _uint32_08 = NetworkUtils.bigEndian32(0x00000000);

                headerMagic = NetworkUtils.bigEndian32(0x00010000);

                mac = macAddress.GetAddressBytes().GetStruct <MacAddress>();

                ipBytes  = _ip.GetAddressBytes();
                ipUInt32 = (UInt32)((ipBytes[0] << 24) |
                                    (ipBytes[1] << 16) |
                                    (ipBytes[2] << 8) |
                                    (ipBytes[3]));
                ip = NetworkUtils.bigEndian32(ipUInt32);

                _uint32_16 = NetworkUtils.bigEndian32(0x00012011);
                _uint32_1A = NetworkUtils.bigEndian32(0x1e11231f);
                _uint32_1E = NetworkUtils.bigEndian32(0x1e191300);
                _uint32_22 = NetworkUtils.bigEndian32(0x00020000);
                _uint32_26 = NetworkUtils.bigEndian32(0x00000000);
                _uint32_2A = NetworkUtils.bigEndian32(0x00000000);
                _uint32_2E = NetworkUtils.bigEndian32(0x0000ffff);
                checksum   = NetworkUtils.bigEndian16(0x0000);
            }
Пример #2
0
 public NiceVisionRequest(UInt16 transactionId, UInt16 answerToPort)
 {
     magic       = NetworkUtils.bigEndian32(NiceVision.magic);
     transaction = NetworkUtils.bigEndian16(transactionId);
     payload     = NetworkUtils.bigEndian32(NiceVision.payload);
     answerPort  = NetworkUtils.bigEndian16((UInt16)answerToPort);
 }
Пример #3
0
        public override void reciever(IPEndPoint from, byte[] data)
        {
            VivotekHeader header;
            int           headerSize;
            int           position;

            string    model, mac;
            IPAddress IPv4;

            header = data.GetStruct <VivotekHeader>();

            headerSize = typeof(VivotekHeader).StructLayoutAttribute.Size;

            if (NetworkUtils.bigEndian32(header.magic) != magic)
            {
                Logger.LogWarning("Warning: Vivotek.reciever(): Wrong packet magic value");
                return;
            }

            mac   = "";
            model = "";
            IPv4  = null;

            position = headerSize;
            while (position < data.Length)
            {
                byte   variable;
                byte[] value;

                variable = readNextValue(data, ref position, out value);
                switch (variable)
                {
                case (byte)VivotekValue.typeNull:
                    Logger.LogWarning("Warning: Vivotek.reciever(): Invalid packet, variable type null");
                    return;

                case (byte)VivotekValue.IPAddress:
                    IPv4 = new IPAddress(value);
                    break;

                case (byte)VivotekValue.longName:
                    Logger.LogDebug("longName");
                    Logger.WriteData(LogLevel.Debug, value);
                    break;

                case (byte)VivotekValue.macAddress:
                    mac = String.Format("{0:X2}:{1:X2}:{2:X2}:{3:X2}:{4:X2}:{5:X2}", value[0], value[1], value[2], value[3], value[4], value[5]);
                    break;

                case (byte)VivotekValue.shortName:
                    model = Encoding.UTF8.GetString(value);
                    break;
                }
            }

            if (IPv4 != null)
            {
                viewer.deviceFound(name, 1, IPv4, model, mac);
            }
        }
Пример #4
0
        public override byte[] sender(IPEndPoint dest)
        {
            BoschRequest request;

            byte[]   result;
            DateTime date;

            date = DateTime.UtcNow;

            request               = new BoschRequest();
            request.magic         = NetworkUtils.bigEndian32(answerMagic);
            request.transactionID = NetworkUtils.bigEndian32((UInt32)
                                                             ((date.Hour << 24) | (date.Minute << 16) |
                                                              (date.Second << 8) | (date.Millisecond / 10)
                                                             ));
            request.requestMagic = NetworkUtils.bigEndian32(requestMagic);

            result = request.GetBytes();

            return(result);
        }
Пример #5
0
        public override byte[] sender(IPEndPoint dest)
        {
            Dahua2Header header;

            byte[] headerArray;
            string bodyStr;

            byte[] bodyArray;
            byte[] result;
            int    headerSize;

            header = new Dahua2Header {
                headerSize   = NetworkUtils.littleEndian32((UInt32)typeof(Dahua2Header).StructLayoutAttribute.Size),
                headerMagic  = NetworkUtils.bigEndian32(magic),
                _reserved_08 = 0,
                _reserved_0C = 0,
                packetSize1  = 0,
                _reserved_14 = 0,
                packetSize2  = 0,
                _reserved_1C = 0
            };

            bodyStr   = "{ \"method\" : \"DHDiscover.search\", \"params\" : { \"mac\" : \"\", \"uni\" : 1 } }\n";
            bodyArray = Encoding.UTF8.GetBytes(bodyStr);

            headerSize = typeof(Dahua2Header).StructLayoutAttribute.Size;

            result             = new byte[headerSize + bodyArray.Length];
            header.packetSize1 = (UInt32)bodyArray.Length;
            header.packetSize2 = (UInt32)bodyArray.Length;

            headerArray = header.GetBytes();

            headerArray.CopyTo(result, 0);
            bodyArray.CopyTo(result, headerSize);

            return(result);
        }
Пример #6
0
        public override void reciever(IPEndPoint from, byte[] data)
        {
            string deviceModel, deviceSerial;

            // xml is much bigger
            if (data.Length == typeof(BoschBinaryAnswer).StructLayoutAttribute.Size)
            {
                BoschBinaryAnswer binary;
                UInt32            ip;

                binary = data.GetStruct <BoschBinaryAnswer>();

                if (NetworkUtils.bigEndian32(binary.magic) != answerMagic)
                {
                    Logger.getInstance().WriteLine(Logger.DebugLevel.Warn, "Warning: Bosch.reciever(): Packet with wrong header.");
                    return;
                }

                ip = NetworkUtils.littleEndian32(binary.ipv4);

                deviceSerial = binary.mac.ToString();

                deviceModel = name;

                viewer.deviceFound(name, 1, new IPAddress(ip), deviceModel, deviceSerial);
            }
            else
            {
                string    xml;
                string    deviceIPv4Str, deviceIPv6Str;
                Regex     type, ipv4, ipv6, mac, serial;
                Match     m;
                IPAddress ip;

                xml    = Encoding.UTF8.GetString(data);
                type   = new Regex("<friendlyName>([^<]*)</friendlyName>");
                ipv4   = new Regex("<unitIPAddress>([^<]*)</unitIPAddress>");
                ipv6   = new Regex("<unitIPv6Address>([^<]*)</unitIPv6Address>");
                mac    = new Regex("<physAddress>([^<]*)</physAddress>");
                serial = new Regex("<serialNumber>([^<]*)</serialNumber>");

                deviceIPv4Str = "";
                m             = ipv4.Match(xml);
                if (m.Success)
                {
                    deviceIPv4Str = m.Groups[1].Value;
                }

                deviceIPv6Str = "";
                m             = ipv6.Match(xml);
                if (m.Success)
                {
                    deviceIPv6Str = m.Groups[1].Value;
                }

                deviceModel = "";
                m           = type.Match(xml);
                if (m.Success)
                {
                    deviceModel = m.Groups[1].Value;
                }

                deviceSerial = "";
                m            = serial.Match(xml);
                if (m.Success)
                {
                    deviceSerial = m.Groups[1].Value;
                }
                else
                {
                    m = mac.Match(xml);
                    if (m.Success)
                    {
                        deviceSerial = m.Groups[1].Value;
                    }
                }

                if (!IPAddress.TryParse(deviceIPv4Str, out ip))
                {
                    Logger.getInstance().WriteLine(Logger.DebugLevel.Warn, String.Format("Warning: Bosch.reciever(): Invalid ipv4 format: {0}", deviceIPv4Str));
                    ip = from.Address;
                }
                viewer.deviceFound(name, 2, ip, deviceModel, deviceSerial);

                if (IPAddress.TryParse(deviceIPv6Str, out ip))
                {
                    viewer.deviceFound(name, 2, ip, deviceModel, deviceSerial);
                }
                else
                {
                    Logger.getInstance().WriteLine(Logger.DebugLevel.Warn, String.Format("Warning: Bosch.reciever(): Invalid ipv6 format: {0}", deviceIPv6Str));
                }
            }
        }
Пример #7
0
 public VivotekHeader(byte sessionId)
 {
     session = sessionId;
     magic   = NetworkUtils.bigEndian32(Vivotek.magic);
 }