NetworkPackets.Dns.Response.Response C# (CSharp) Method

Response() public method

Creates a response given the entire packet.
The entire packet must be given, because some name servers take advantage of pointers to reduce their size.
public Response ( MemBlock Data, int Start ) : Brunet
Data MemBlock The entire Dns packet.
Start int The starting position of the Response.
return Brunet
    public Response(MemBlock Data, int Start) {
      int idx = 0;
      NameBlob = DnsPacket.RetrieveBlob(Data, Start, out idx);

      int type = (Data[idx++] << 8) + Data[idx++];
      Type = (DnsPacket.Types) type;

      CacheFlush = ((Data[idx] & 0x80) == 0x80) ? true : false;
      int rclass = ((Data[idx++] << 8) & 0x7F) + Data[idx++];
      Class = (DnsPacket.Classes) rclass;

      Ttl = (Data[idx++] << 24);
      Ttl |= (Data[idx++] << 16);
      Ttl |= (Data[idx++] << 8);
      Ttl |= (Data[idx++]);

      RdLength = (short) ((Data[idx++] << 8) + Data[idx++]);
      RDataBlob = Data.Slice(idx, RdLength);

      if(Type == DnsPacket.Types.Ptr) {
        try {
          Name = DnsPacket.PtrMemBlockToString(NameBlob);
        }
        catch {
          Name = DnsPacket.HostnameMemBlockToString(NameBlob);
        }
        int End = 0;
        RDataBlob = DnsPacket.RetrieveBlob(Data, idx, out End);
        RData = DnsPacket.HostnameMemBlockToString(RDataBlob);
      }
      else if(Type == DnsPacket.Types.A) {
        Name = DnsPacket.HostnameMemBlockToString(NameBlob);
        RData = DnsPacket.IPMemBlockToString(RDataBlob);
      }
      _icpacket = _packet = Data.Slice(Start, idx + RdLength - Start);
    }
  }

Same methods

Response::Response ( String Name, DnsPacket Type, DnsPacket Class, int Ttl, String RData ) : Brunet
Response::Response ( string name, DnsPacket type, DnsPacket class_type, bool cache_flush, int ttl, String rdata ) : Brunet
Response