Exemple #1
0
        //バイトイメージの取得
        public byte[] GetBytes()
        {
            var buffer = _dnsHeader.GetBytes();

            for (var i = 0; i < 4; i++)
            {
                var a = _ar[i];
                foreach (var o in a)
                {
                    var dataName = (new Compress(buffer, DnsUtil.Str2DnsName(o.Name))).GetData();
                    var data     = o.Data;
                    var dnsType  = o.DnsType;

                    if (i != 0)
                    {
                        //QDでは、data部分は存在しない
                        if (dnsType == DnsType.Ns || dnsType == DnsType.Cname || dnsType == DnsType.Ptr)
                        {
                            data = (new Compress(buffer, o.Data)).GetData(); //圧縮
                        }
                        else if (dnsType == DnsType.Mx)
                        {
                            var preference = Conv.GetUShort(o.Data, 0);
                            var mlServer   = new byte[o.Data.Length - 2];
                            //System.arraycopy(o.Data, 2, mlServer, 0, o.Data.Length - 2);
                            Buffer.BlockCopy(o.Data, 2, mlServer, 0, o.Data.Length - 2);

                            mlServer = (new Compress(buffer, mlServer)).GetData(); //圧縮
                            data     = Bytes.Create(Conv.GetBytes(preference), mlServer);
                        }
                    }
                    //PacketRrは、QD(i==0)の時、data.Length=0となり、内部でisQueryがセットされる
                    var packetRr = new PacketRr(data.Length);
                    try{
                        packetRr.Cls     = 1;
                        packetRr.DnsType = dnsType;
                        packetRr.Ttl     = o.Ttl; //PacketRr.isQueryがセットされているとき、処理なし
                        packetRr.Data    = data;  //PacketRr.isQueryがセットされているとき、処理なし
                    } catch (IOException e) {
                        //設計上の問題
                        Util.RuntimeException(e.Message);
                    }
                    //PacketRr.isQueryがセットされているとき、getBytes()は4バイト(TTL,DLEN,DATAなし)になっている
                    buffer = Bytes.Create(buffer, dataName, packetRr.GetBytes());
                }
            }
            return(buffer);
        }
Exemple #2
0
        //バイトイメージの取得
        public byte[] GetBytes()
        {
            var buffer = _dnsHeader.GetBytes();
            for (var i = 0; i < 4; i++){
                var a = _ar[i];
                foreach (var o in a){

                    var dataName = (new Compress(buffer, DnsUtil.Str2DnsName(o.Name))).GetData();
                    var data = o.Data;
                    var dnsType = o.DnsType;

                    if (i != 0){
                        //QDでは、data部分は存在しない
                        if (dnsType == DnsType.Ns || dnsType == DnsType.Cname || dnsType == DnsType.Ptr){
                            data = (new Compress(buffer, o.Data)).GetData(); //圧縮
                        } else if (dnsType == DnsType.Mx){
                            var preference = Conv.GetUShort(o.Data, 0);
                            var mlServer = new byte[o.Data.Length - 2];
                            //System.arraycopy(o.Data, 2, mlServer, 0, o.Data.Length - 2);
                            Buffer.BlockCopy(o.Data, 2, mlServer, 0, o.Data.Length - 2);

                            mlServer = (new Compress(buffer, mlServer)).GetData(); //圧縮
                            data = Bytes.Create(Conv.GetBytes(preference), mlServer);
                        }
                    }
                    //PacketRrは、QD(i==0)の時、data.Length=0となり、内部でisQueryがセットされる
                    var packetRr = new PacketRr(data.Length);
                    try{
                        packetRr.Cls = 1;
                        packetRr.DnsType = dnsType;
                        packetRr.Ttl = o.Ttl; //PacketRr.isQueryがセットされているとき、処理なし
                        packetRr.Data = data; //PacketRr.isQueryがセットされているとき、処理なし

                    } catch (IOException e){
                        //設計上の問題
                        Util.RuntimeException(e.Message);
                    }
                    //PacketRr.isQueryがセットされているとき、getBytes()は4バイト(TTL,DLEN,DATAなし)になっている
                    buffer = Bytes.Create(buffer, dataName, packetRr.GetBytes());
                }
            }
            return buffer;
        }