Exemplo n.º 1
0
 //共通メソッド
 //リソースレコードのtostring()
 private string print(OneRr o)
 {
     switch (o.DnsType){
         case DnsType.A:
             return o.ToString();
         case DnsType.Aaaa:
             return o.ToString();
         case DnsType.Ns:
             return o.ToString();
         case DnsType.Mx:
             return o.ToString();
         case DnsType.Ptr:
             return o.ToString();
         case DnsType.Soa:
             return o.ToString();
         case DnsType.Cname:
             return o.ToString();
         default:
             Util.RuntimeException("not implement.");
             break;
     }
     return "";
 }
Exemplo n.º 2
0
 //レスポンス情報追加をまとめて記述
 private void AppendRr(PacketDns packetDns, RrKind rrKind, OneRr oneRr)
 {
     Logger.Set(LogKind.Detail, null, 23, string.Format("[{0}] {1}", rrKind, oneRr)); //"Append RR"
     packetDns.AddRr(rrKind, oneRr);
 }
Exemplo n.º 3
0
 //回答フィールドへの追加
 //これを下記のように変更し、OneRRのコンストラクタを使用するようにする
 public void AddRr(RrKind rrKind, OneRr oneRr)
 {
     //名前の圧縮は、最後のgetBytes()で処理する
     var i = (int) rrKind;
     _ar[i].Add(oneRr);
     try{
         var count = _dnsHeader.GetCount(i);
         _dnsHeader.SetCount(i, ++count);
     } catch (IOException){
         Util.RuntimeException("PacketDns.addRR()");
     }
 }
Exemplo n.º 4
0
 //リソースの追加
 //同一のリソース(TTL以外)は上書きされる
 //ただしTTL=0のデータは上書きされない
 public bool Add(OneRr oneRr)
 {
     // 排他制御
     lock (this){
         OneRr target = null; //書き換え対象のリソース
         //TTL以外が全て同じのソースを検索する
         foreach (var o in _ar){
             if (o.DnsType == oneRr.DnsType && o.Name == oneRr.Name){
                 //データ内容の確認
                 var isSame = !o.Data.Where((t, n) => t != oneRr.Data[n]).Any();
                 if (isSame){
                     if (o.Ttl == 0){
                         //TTL=0のデータは普遍であるため、書き換えはしない
                         return false;
                     }
                     target = o;
                     break;
                 }
             }
         }
         //書き換えの対象が見つかっている場合は、削除する
         if (target != null){
             _ar.Remove(target);
         }
         _ar.Add(oneRr);
     }
     return true;
 }