public void OnHeader([In, MarshalAs(UnmanagedType.Interface)] INSSBuffer pHeader) { byte[] buffer; uint length; var manBuff = pHeader as ManBuffer; if (manBuff != null) { buffer = manBuff.Buffer; length = manBuff.UsedLength; manBuff.Dispose(); } else { using (var b = new NSSBuffer(pHeader)) { length = b.Length; buffer = new byte[length]; b.Read(buffer, 0, (int)length); } } if (!m_HeaderWrote) { if (BaseStream.CanSeek) { m_HeaderPosition = BaseStream.Position; m_HeaderLength = length; } m_HeaderWrote = true; base.Write(buffer, 0, (int)length); } else if (BaseStream.CanSeek && (length == m_HeaderLength)) { long pos = BaseStream.Position; BaseStream.Position = m_HeaderPosition; BaseStream.Write(buffer, 0, (int)length); BaseStream.Position = pos; } }
public void OnDataUnit([In, MarshalAs(UnmanagedType.Interface)] INSSBuffer pDataUnit) { byte[] buffer; int length; var manBuff = pDataUnit as ManBuffer; if (manBuff != null) { buffer = manBuff.Buffer; length = (int)manBuff.UsedLength; manBuff.Dispose(); } else { using (var b = new NSSBuffer(pDataUnit)) { length = (int)b.Length; buffer = new byte[length]; b.Read(buffer, 0, length); } } base.Write(buffer, 0, length); }