1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Utilities;
- namespace SMBLibrary.Authentication
- {
-
-
-
- public class NegotiateMessage
- {
- public string Signature;
- public MessageTypeName MessageType;
- public NegotiateFlags NegotiateFlags;
- public string DomainName;
- public string Workstation;
- public Version Version;
- public NegotiateMessage()
- {
- Signature = AuthenticateMessage.ValidSignature;
- MessageType = MessageTypeName.Negotiate;
- DomainName = String.Empty;
- Workstation = String.Empty;
- }
- public NegotiateMessage(byte[] buffer)
- {
- Signature = ByteReader.ReadAnsiString(buffer, 0, 8);
- MessageType = (MessageTypeName)LittleEndianConverter.ToUInt32(buffer, 8);
- NegotiateFlags = (NegotiateFlags)LittleEndianConverter.ToUInt32(buffer, 12);
- DomainName = AuthenticationMessageUtils.ReadAnsiStringBufferPointer(buffer, 16);
- Workstation = AuthenticationMessageUtils.ReadAnsiStringBufferPointer(buffer, 24);
- if ((NegotiateFlags & NegotiateFlags.Version) > 0)
- {
- Version = new Version(buffer, 32);
- }
- }
- public byte[] GetBytes()
- {
- int fixedLength = 32;
- if ((NegotiateFlags & NegotiateFlags.Version) > 0)
- {
- fixedLength += 8;
- }
- int payloadLength = DomainName.Length * 2 + Workstation.Length * 2;
- byte[] buffer = new byte[fixedLength + payloadLength];
- ByteWriter.WriteAnsiString(buffer, 0, AuthenticateMessage.ValidSignature, 8);
- LittleEndianWriter.WriteUInt32(buffer, 8, (uint)MessageType);
- LittleEndianWriter.WriteUInt32(buffer, 12, (uint)NegotiateFlags);
- if ((NegotiateFlags & NegotiateFlags.Version) > 0)
- {
- Version.WriteBytes(buffer, 32);
- }
- int offset = fixedLength;
- AuthenticationMessageUtils.WriteBufferPointer(buffer, 16, (ushort)(DomainName.Length * 2), (uint)offset);
- ByteWriter.WriteUTF16String(buffer, ref offset, DomainName);
- AuthenticationMessageUtils.WriteBufferPointer(buffer, 16, (ushort)(Workstation.Length * 2), (uint)offset);
- ByteWriter.WriteUTF16String(buffer, ref offset, Workstation);
- return buffer;
- }
- }
- }
|