コード例 #1
0
ファイル: ResourceRecord.cs プロジェクト: misenhower/WPRemote
        public byte[] GetBytes()
        {
            List <byte> result = new List <byte>(512);

            // Add the hostname
            string hostname = BonjourUtility.FormatLocalHostname(Name);

            result.AddRange(BonjourUtility.HostnameToBytes(hostname));

            // Record Type
            result.AddNetworkOrderBytes((ushort)Type);

            // Class and Cache Flush bit
            ushort rrclass = (ushort)Class;

            BitUtility.SetBit(ref rrclass, 15, CacheFlush);
            result.AddNetworkOrderBytes(rrclass);

            // TTL
            result.AddNetworkOrderBytes((int)TimeToLive.TotalSeconds);

            // Data
            byte[] dataBytes = GetDataBytes();

            result.AddNetworkOrderBytes((ushort)dataBytes.Length);
            result.AddRange(dataBytes);

            return(result.ToArray());
        }
コード例 #2
0
ファイル: SRVRecord.cs プロジェクト: misenhower/WPRemote
 protected override void SetDataFromReader(BinaryReader reader, int length)
 {
     Priority = reader.ReadNetworkOrderUInt16();
     Weight   = reader.ReadNetworkOrderUInt16();
     Port     = reader.ReadNetworkOrderUInt16();
     Target   = BonjourUtility.ReadHostnameFromBytes(reader);
 }
コード例 #3
0
ファイル: Question.cs プロジェクト: misenhower/WPRemote
        public static Question FromBinaryReader(BinaryReader reader)
        {
            Question question = new Question();

            question.Name  = BonjourUtility.ReadHostnameFromBytes(reader);
            question.Type  = (ResourceRecordType)reader.ReadNetworkOrderUInt16();
            question.Class = reader.ReadNetworkOrderUInt16();

            return(question);
        }
コード例 #4
0
ファイル: ResourceRecord.cs プロジェクト: misenhower/WPRemote
        public static ResourceRecord FromBinaryReader(BinaryReader reader)
        {
            // Hostname
            string hostname = BonjourUtility.ReadHostnameFromBytes(reader);

            // Record Type
            ResourceRecordType type = (ResourceRecordType)reader.ReadNetworkOrderUInt16();

            ResourceRecord record;

            switch (type)
            {
            case ResourceRecordType.A:
                record = new ARecord();
                break;

            case ResourceRecordType.PTR:
                record = new PTRRecord();
                break;

            case ResourceRecordType.SRV:
                record = new SRVRecord();
                break;

            case ResourceRecordType.TXT:
                record = new TXTRecord();
                break;

            default:
                record      = new ResourceRecord();
                record.Type = type;
                break;
            }

            record.Name = hostname;

            // Class and Cache Flush bit
            ushort rrclass = reader.ReadNetworkOrderUInt16();

            record.Class      = (rrclass & 0x7fff);
            record.CacheFlush = rrclass.GetBit(15);

            // TTL
            record.TimeToLive = TimeSpan.FromSeconds(reader.ReadNetworkOrderInt32());

            // Data
            ushort dataLength = reader.ReadNetworkOrderUInt16();

            record.SetDataFromReader(reader, dataLength);

            return(record);
        }
コード例 #5
0
ファイル: Question.cs プロジェクト: misenhower/WPRemote
        public byte[] GetBytes()
        {
            List <byte> result = new List <byte>(512);

            // Add the hostname
            string hostname = BonjourUtility.FormatLocalHostname(Name);

            result.AddRange(BonjourUtility.HostnameToBytes(hostname));

            // Record Type
            result.AddNetworkOrderBytes((ushort)Type);

            // Class
            result.AddNetworkOrderBytes((ushort)Class);

            return(result.ToArray());
        }
コード例 #6
0
ファイル: SRVRecord.cs プロジェクト: misenhower/WPRemote
        protected override byte[] GetDataBytes()
        {
            List <byte> result = new List <byte>();

            // Priority
            result.AddNetworkOrderBytes((ushort)Priority);

            // Weight
            result.AddNetworkOrderBytes((ushort)Weight);

            // Port
            result.AddNetworkOrderBytes((ushort)Port);

            // Target
            result.AddRange(BonjourUtility.HostnameToBytes(Target));

            return(result.ToArray());
        }
コード例 #7
0
ファイル: TXTRecord.cs プロジェクト: misenhower/WPRemote
 protected override byte[] GetDataBytes()
 {
     return(BonjourUtility.GetTXTRecordBytesFromDictionary(Data));
 }
コード例 #8
0
ファイル: TXTRecord.cs プロジェクト: misenhower/WPRemote
 protected override void SetDataFromReader(BinaryReader reader, int length)
 {
     Data = BonjourUtility.GetDictionaryFromTXTRecordBytes(reader, length);
 }
コード例 #9
0
 protected override byte[] GetDataBytes()
 {
     return(BonjourUtility.BytesFromIPAddress(Address));
 }
コード例 #10
0
 protected override void SetDataFromReader(BinaryReader reader, int length)
 {
     Address = BonjourUtility.IPAddressFromBytes(reader.ReadBytes(length));
 }
コード例 #11
0
ファイル: PTRRecord.cs プロジェクト: misenhower/WPRemote
 protected override byte[] GetDataBytes()
 {
     return(BonjourUtility.HostnameToBytes(BonjourUtility.FormatLocalHostname(DomainName)));
 }
コード例 #12
0
ファイル: PTRRecord.cs プロジェクト: misenhower/WPRemote
 protected override void SetDataFromReader(BinaryReader reader, int length)
 {
     DomainName = BonjourUtility.ReadHostnameFromBytes(reader);
 }