Exemplo n.º 1
0
        /// <summary>
        /// Tries to parse a <see cref="NbNsNodeStatusResponseResourceRecord"/> from a buffer of bytes
        /// </summary>
        /// <param name="buffer">Byte array containing the NbNsNodeStatusResponseResourceRecord</param>
        /// <param name="offset">Zero based offset in the buffer where the NbNsNodeStatusResponseResourceRecord starts</param>
        /// <param name="resourceRecord">Parsed NbNsNodeStatusResponseResourceRecord if successful, else null</param>
        /// <returns><c>true</c> if parsing was successful, else <c>false</c></returns>
        public static bool TryParse(byte[] buffer, int offset, out NbNsNodeStatusResponseResourceRecord resourceRecord)
        {
            resourceRecord = null;

            var result = new NbNsNodeStatusResponseResourceRecord();

            if (!result.TryParse(buffer, offset))
            {
                return(false);
            }

            if (result.RrType != RrTypeValue.NbStat || result.RrClass != RrClassValue.In)
            {
                return(false);
            }

            offset += result.RrName.Length + 2 + 2 + 4 + 2;
            var numNames = buffer[offset];

            offset++;

            if (buffer.Length <= offset + numNames * NbNsNodeName.NODE_NAME_LENGTH + NbNsStatistics.STATISTICS_LENGTH)
            {
                return(false);
            }

            var nodeNames = new List <NbNsNodeName>();

            for (byte i = 0; i < numNames; i++)
            {
                NbNsNodeName nodeName;
                if (!NbNsNodeName.TryParse(buffer, offset, out nodeName))
                {
                    return(false);
                }
                nodeNames.Add(nodeName);
                offset += NbNsNodeName.NODE_NAME_LENGTH;
            }
            result.NodeNames = nodeNames;

            NbNsStatistics statistics;

            if (!NbNsStatistics.TryParse(buffer, offset, out statistics))
            {
                return(false);
            }
            result.Statistics = statistics;

            resourceRecord = result;
            return(true);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Tries to parse a <see cref="NbNsNodeStatusResponse"/> from a buffer of bytes starting after <see cref="NbNsHeader.NETBIOS_HEADER_LENGTH"/> bytes
        /// </summary>
        /// <param name="header"><see cref="NbNsHeader"/> already parsed from the beginning of <see cref="buffer"/></param>
        /// <param name="buffer">Byte array containing the NbNsNodeStatusResponse</param>
        /// <param name="result">Parsed NbNsNodeStatusResponse if successful, else null</param>
        /// <returns><c>true</c> if parsing was successful, else <c>false</c></returns>
        /// <remarks>
        /// This method is only called from <see cref="NbNsPacketBase.TryParse"/>.
        /// </remarks>
        internal static bool TryParse(NbNsHeader header, byte[] buffer, out NbNsNodeStatusResponse result)
        {
            result = null;

            NbNsNodeStatusResponseResourceRecord rr;

            if (!NbNsNodeStatusResponseResourceRecord.TryParse(buffer, NbNsHeader.NETBIOS_HEADER_LENGTH, out rr))
            {
                return(false);
            }

            result = new NbNsNodeStatusResponse(header, rr);
            return(true);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Creates a new instance of <see cref="NbNsNodeStatusResponse"/> basedon the given <see cref="NbNsHeader"/> and <see cref="NbNsNodeStatusResponseResourceRecord"/>
 /// </summary>
 /// <param name="header"><see cref="NbNsHeader"/> to use for this <see cref="NbNsNodeStatusResponse"/></param>
 /// <param name="resourceRecord"><see cref="NbNsNodeStatusResponseResourceRecord"/> to use for this <see cref="NbNsNodeStatusResponse"/></param>
 public NbNsNodeStatusResponse(NbNsHeader header, NbNsNodeStatusResponseResourceRecord resourceRecord)
     : base(header, PacketTypes.NodeStatusResponse)
 {
     PacketSegments.Add(resourceRecord);
 }
 /// <summary>
 /// Creates a new instance of <see cref="NbNsNodeStatusResponse"/> basedon the given <see cref="NbNsHeader"/> and <see cref="NbNsNodeStatusResponseResourceRecord"/>
 /// </summary>
 /// <param name="header"><see cref="NbNsHeader"/> to use for this <see cref="NbNsNodeStatusResponse"/></param>
 /// <param name="resourceRecord"><see cref="NbNsNodeStatusResponseResourceRecord"/> to use for this <see cref="NbNsNodeStatusResponse"/></param>
 public NbNsNodeStatusResponse(NbNsHeader header, NbNsNodeStatusResponseResourceRecord resourceRecord)
   : base(header, PacketTypes.NodeStatusResponse)
 {
   PacketSegments.Add(resourceRecord);
 }
    /// <summary>
    /// Tries to parse a <see cref="NbNsNodeStatusResponseResourceRecord"/> from a buffer of bytes
    /// </summary>
    /// <param name="buffer">Byte array containing the NbNsNodeStatusResponseResourceRecord</param>
    /// <param name="offset">Zero based offset in the buffer where the NbNsNodeStatusResponseResourceRecord starts</param>
    /// <param name="resourceRecord">Parsed NbNsNodeStatusResponseResourceRecord if successful, else null</param>
    /// <returns><c>true</c> if parsing was successful, else <c>false</c></returns>
    public static bool TryParse(byte[] buffer, int offset, out NbNsNodeStatusResponseResourceRecord resourceRecord)
    {
      resourceRecord = null;

      var result = new NbNsNodeStatusResponseResourceRecord();
      if (!result.TryParse(buffer, offset))
        return false;

      if (result.RrType != RrTypeValue.NbStat || result.RrClass != RrClassValue.In)
        return false;

     offset += result.RrName.Length + 2 + 2 + 4 + 2;
     var numNames = buffer[offset];
     offset++;

     if (buffer.Length <= offset + numNames * NbNsNodeName.NODE_NAME_LENGTH + NbNsStatistics.STATISTICS_LENGTH)
        return false;

      var nodeNames = new List<NbNsNodeName>();
      for (byte i = 0; i < numNames; i++)
      {
        NbNsNodeName nodeName;
        if (!NbNsNodeName.TryParse(buffer, offset, out nodeName))
          return false;
        nodeNames.Add(nodeName);
        offset += NbNsNodeName.NODE_NAME_LENGTH;
      }
      result.NodeNames = nodeNames;

      NbNsStatistics statistics;
      if (!NbNsStatistics.TryParse(buffer, offset, out statistics))
        return false;
      result.Statistics = statistics;

      resourceRecord = result;
      return true;
    }