mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-28 19:38:26 +01:00
update sharpcifs
This commit is contained in:
@@ -18,133 +18,133 @@ using SharpCifs.Dcerpc.Ndr;
|
||||
|
||||
namespace SharpCifs.Dcerpc
|
||||
{
|
||||
public abstract class DcerpcMessage : NdrObject
|
||||
{
|
||||
protected internal int Ptype = -1;
|
||||
public abstract class DcerpcMessage : NdrObject
|
||||
{
|
||||
protected internal int Ptype = -1;
|
||||
|
||||
protected internal int Flags;
|
||||
protected internal int Flags;
|
||||
|
||||
protected internal int Length;
|
||||
protected internal int Length;
|
||||
|
||||
protected internal int CallId;
|
||||
protected internal int CallId;
|
||||
|
||||
protected internal int AllocHint;
|
||||
protected internal int AllocHint;
|
||||
|
||||
protected internal int Result;
|
||||
protected internal int Result;
|
||||
|
||||
public virtual bool IsFlagSet(int flag)
|
||||
{
|
||||
return (Flags & flag) == flag;
|
||||
}
|
||||
public virtual bool IsFlagSet(int flag)
|
||||
{
|
||||
return (Flags & flag) == flag;
|
||||
}
|
||||
|
||||
public virtual void UnsetFlag(int flag)
|
||||
{
|
||||
Flags &= ~flag;
|
||||
}
|
||||
public virtual void UnsetFlag(int flag)
|
||||
{
|
||||
Flags &= ~flag;
|
||||
}
|
||||
|
||||
public virtual void SetFlag(int flag)
|
||||
{
|
||||
Flags |= flag;
|
||||
}
|
||||
public virtual void SetFlag(int flag)
|
||||
{
|
||||
Flags |= flag;
|
||||
}
|
||||
|
||||
public virtual DcerpcException GetResult()
|
||||
{
|
||||
if (Result != 0)
|
||||
{
|
||||
return new DcerpcException(Result);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public virtual DcerpcException GetResult()
|
||||
{
|
||||
if (Result != 0)
|
||||
{
|
||||
return new DcerpcException(Result);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
internal virtual void Encode_header(NdrBuffer buf)
|
||||
{
|
||||
buf.Enc_ndr_small(5);
|
||||
buf.Enc_ndr_small(0);
|
||||
buf.Enc_ndr_small(Ptype);
|
||||
buf.Enc_ndr_small(Flags);
|
||||
buf.Enc_ndr_long(unchecked(0x00000010));
|
||||
buf.Enc_ndr_short(Length);
|
||||
buf.Enc_ndr_short(0);
|
||||
buf.Enc_ndr_long(CallId);
|
||||
}
|
||||
internal virtual void Encode_header(NdrBuffer buf)
|
||||
{
|
||||
buf.Enc_ndr_small(5);
|
||||
buf.Enc_ndr_small(0);
|
||||
buf.Enc_ndr_small(Ptype);
|
||||
buf.Enc_ndr_small(Flags);
|
||||
buf.Enc_ndr_long(unchecked(0x00000010));
|
||||
buf.Enc_ndr_short(Length);
|
||||
buf.Enc_ndr_short(0);
|
||||
buf.Enc_ndr_long(CallId);
|
||||
}
|
||||
|
||||
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
||||
internal virtual void Decode_header(NdrBuffer buf)
|
||||
{
|
||||
if (buf.Dec_ndr_small() != 5 || buf.Dec_ndr_small() != 0)
|
||||
{
|
||||
throw new NdrException("DCERPC version not supported");
|
||||
}
|
||||
Ptype = buf.Dec_ndr_small();
|
||||
Flags = buf.Dec_ndr_small();
|
||||
if (buf.Dec_ndr_long() != unchecked(0x00000010))
|
||||
{
|
||||
throw new NdrException("Data representation not supported");
|
||||
}
|
||||
Length = buf.Dec_ndr_short();
|
||||
if (buf.Dec_ndr_short() != 0)
|
||||
{
|
||||
throw new NdrException("DCERPC authentication not supported");
|
||||
}
|
||||
CallId = buf.Dec_ndr_long();
|
||||
}
|
||||
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
||||
internal virtual void Decode_header(NdrBuffer buf)
|
||||
{
|
||||
if (buf.Dec_ndr_small() != 5 || buf.Dec_ndr_small() != 0)
|
||||
{
|
||||
throw new NdrException("DCERPC version not supported");
|
||||
}
|
||||
Ptype = buf.Dec_ndr_small();
|
||||
Flags = buf.Dec_ndr_small();
|
||||
if (buf.Dec_ndr_long() != unchecked(0x00000010))
|
||||
{
|
||||
throw new NdrException("Data representation not supported");
|
||||
}
|
||||
Length = buf.Dec_ndr_short();
|
||||
if (buf.Dec_ndr_short() != 0)
|
||||
{
|
||||
throw new NdrException("DCERPC authentication not supported");
|
||||
}
|
||||
CallId = buf.Dec_ndr_long();
|
||||
}
|
||||
|
||||
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
||||
public override void Encode(NdrBuffer buf)
|
||||
{
|
||||
int start = buf.GetIndex();
|
||||
int allocHintIndex = 0;
|
||||
buf.Advance(16);
|
||||
if (Ptype == 0)
|
||||
{
|
||||
allocHintIndex = buf.GetIndex();
|
||||
buf.Enc_ndr_long(0);
|
||||
buf.Enc_ndr_short(0);
|
||||
buf.Enc_ndr_short(GetOpnum());
|
||||
}
|
||||
Encode_in(buf);
|
||||
Length = buf.GetIndex() - start;
|
||||
if (Ptype == 0)
|
||||
{
|
||||
buf.SetIndex(allocHintIndex);
|
||||
AllocHint = Length - allocHintIndex;
|
||||
buf.Enc_ndr_long(AllocHint);
|
||||
}
|
||||
buf.SetIndex(start);
|
||||
Encode_header(buf);
|
||||
buf.SetIndex(start + Length);
|
||||
}
|
||||
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
||||
public override void Encode(NdrBuffer buf)
|
||||
{
|
||||
int start = buf.GetIndex();
|
||||
int allocHintIndex = 0;
|
||||
buf.Advance(16);
|
||||
if (Ptype == 0)
|
||||
{
|
||||
allocHintIndex = buf.GetIndex();
|
||||
buf.Enc_ndr_long(0);
|
||||
buf.Enc_ndr_short(0);
|
||||
buf.Enc_ndr_short(GetOpnum());
|
||||
}
|
||||
Encode_in(buf);
|
||||
Length = buf.GetIndex() - start;
|
||||
if (Ptype == 0)
|
||||
{
|
||||
buf.SetIndex(allocHintIndex);
|
||||
AllocHint = Length - allocHintIndex;
|
||||
buf.Enc_ndr_long(AllocHint);
|
||||
}
|
||||
buf.SetIndex(start);
|
||||
Encode_header(buf);
|
||||
buf.SetIndex(start + Length);
|
||||
}
|
||||
|
||||
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
||||
public override void Decode(NdrBuffer buf)
|
||||
{
|
||||
Decode_header(buf);
|
||||
if (Ptype != 12 && Ptype != 2 && Ptype != 3 && Ptype != 13)
|
||||
{
|
||||
throw new NdrException("Unexpected ptype: " + Ptype);
|
||||
}
|
||||
if (Ptype == 2 || Ptype == 3)
|
||||
{
|
||||
AllocHint = buf.Dec_ndr_long();
|
||||
buf.Dec_ndr_short();
|
||||
buf.Dec_ndr_short();
|
||||
}
|
||||
if (Ptype == 3 || Ptype == 13)
|
||||
{
|
||||
Result = buf.Dec_ndr_long();
|
||||
}
|
||||
else
|
||||
{
|
||||
Decode_out(buf);
|
||||
}
|
||||
}
|
||||
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
||||
public override void Decode(NdrBuffer buf)
|
||||
{
|
||||
Decode_header(buf);
|
||||
if (Ptype != 12 && Ptype != 2 && Ptype != 3 && Ptype != 13)
|
||||
{
|
||||
throw new NdrException("Unexpected ptype: " + Ptype);
|
||||
}
|
||||
if (Ptype == 2 || Ptype == 3)
|
||||
{
|
||||
AllocHint = buf.Dec_ndr_long();
|
||||
buf.Dec_ndr_short();
|
||||
buf.Dec_ndr_short();
|
||||
}
|
||||
if (Ptype == 3 || Ptype == 13)
|
||||
{
|
||||
Result = buf.Dec_ndr_long();
|
||||
}
|
||||
else
|
||||
{
|
||||
Decode_out(buf);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract int GetOpnum();
|
||||
public abstract int GetOpnum();
|
||||
|
||||
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
||||
public abstract void Encode_in(NdrBuffer dst);
|
||||
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
||||
public abstract void Encode_in(NdrBuffer dst);
|
||||
|
||||
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
||||
public abstract void Decode_out(NdrBuffer src);
|
||||
}
|
||||
/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
|
||||
public abstract void Decode_out(NdrBuffer src);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user