/* Copyright (C) 2014 Tal Aloni . All rights reserved. * * You can redistribute this program and/or modify it under the terms of * the GNU Lesser Public License as published by the Free Software Foundation, * either version 3 of the License, or (at your option) any later version. */ using System; using System.Collections.Generic; using System.Text; using Utilities; namespace SMBLibrary.RPC { /// /// p_cont_elem_t /// public class ContextElement // Presentation Context Element { public ushort ContextID; //byte NumberOfTransferSyntaxItems; public byte Reserved; public SyntaxID AbstractSyntax; public List TransferSyntaxList = new List(); public ContextElement(byte[] buffer, int offset) { ContextID = LittleEndianConverter.ToUInt16(buffer, offset + 0); byte numberOfTransferSyntaxItems = ByteReader.ReadByte(buffer, offset + 2); Reserved = ByteReader.ReadByte(buffer, offset + 3); AbstractSyntax = new SyntaxID(buffer, offset + 4); offset += 4 + SyntaxID.Length; for (int index = 0; index < numberOfTransferSyntaxItems; index++) { SyntaxID syntax = new SyntaxID(buffer, offset); TransferSyntaxList.Add(syntax); offset += SyntaxID.Length; } } public void WriteBytes(byte[] buffer, int offset) { byte numberOfTransferSyntaxItems = (byte)TransferSyntaxList.Count; LittleEndianWriter.WriteUInt16(buffer, offset + 0, ContextID); ByteWriter.WriteByte(buffer, offset + 2, numberOfTransferSyntaxItems); ByteWriter.WriteByte(buffer, offset + 3, Reserved); AbstractSyntax.WriteBytes(buffer, offset + 4); offset += 4 + SyntaxID.Length; for (int index = 0; index < numberOfTransferSyntaxItems; index++) { TransferSyntaxList[index].WriteBytes(buffer, offset); offset += SyntaxID.Length; } } public int Length { get { return 4 + SyntaxID.Length * (TransferSyntaxList.Count + 1); } } } }