//バイトイメージの取得 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); }
//バイトイメージの取得 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; }