mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-26 02:27:06 +01:00
update sharpcifs
This commit is contained in:
@@ -19,140 +19,122 @@ using SharpCifs.Util.Sharpen;
|
||||
|
||||
namespace SharpCifs.Netbios
|
||||
{
|
||||
internal class NodeStatusResponse : NameServicePacket
|
||||
{
|
||||
private NbtAddress _queryAddress;
|
||||
internal class NodeStatusResponse : NameServicePacket
|
||||
{
|
||||
private NbtAddress _queryAddress;
|
||||
|
||||
private int _numberOfNames;
|
||||
private int _numberOfNames;
|
||||
|
||||
private byte[] _macAddress;
|
||||
private byte[] _macAddress;
|
||||
|
||||
private byte[] _stats;
|
||||
private byte[] _stats;
|
||||
|
||||
internal NbtAddress[] AddressArray;
|
||||
internal NbtAddress[] AddressArray;
|
||||
|
||||
internal NodeStatusResponse(NbtAddress queryAddress)
|
||||
{
|
||||
this._queryAddress = queryAddress;
|
||||
RecordName = new Name();
|
||||
_macAddress = new byte[6];
|
||||
}
|
||||
internal NodeStatusResponse(NbtAddress queryAddress)
|
||||
{
|
||||
this._queryAddress = queryAddress;
|
||||
RecordName = new Name();
|
||||
_macAddress = new byte[6];
|
||||
}
|
||||
|
||||
internal override int WriteBodyWireFormat(byte[] dst, int dstIndex)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
internal override int WriteBodyWireFormat(byte[] dst, int dstIndex)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
internal override int ReadBodyWireFormat(byte[] src, int srcIndex)
|
||||
{
|
||||
return ReadResourceRecordWireFormat(src, srcIndex);
|
||||
}
|
||||
internal override int ReadBodyWireFormat(byte[] src, int srcIndex)
|
||||
{
|
||||
return ReadResourceRecordWireFormat(src, srcIndex);
|
||||
}
|
||||
|
||||
internal override int WriteRDataWireFormat(byte[] dst, int dstIndex)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
internal override int WriteRDataWireFormat(byte[] dst, int dstIndex)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
internal override int ReadRDataWireFormat(byte[] src, int srcIndex)
|
||||
{
|
||||
int start = srcIndex;
|
||||
_numberOfNames = src[srcIndex] & unchecked(0xFF);
|
||||
int namesLength = _numberOfNames * 18;
|
||||
int statsLength = RDataLength - namesLength - 1;
|
||||
_numberOfNames = src[srcIndex++] & unchecked(0xFF);
|
||||
// gotta read the mac first so we can populate addressArray with it
|
||||
Array.Copy(src, srcIndex + namesLength, _macAddress, 0, 6);
|
||||
srcIndex += ReadNodeNameArray(src, srcIndex);
|
||||
_stats = new byte[statsLength];
|
||||
Array.Copy(src, srcIndex, _stats, 0, statsLength);
|
||||
srcIndex += statsLength;
|
||||
return srcIndex - start;
|
||||
}
|
||||
internal override int ReadRDataWireFormat(byte[] src, int srcIndex)
|
||||
{
|
||||
int start = srcIndex;
|
||||
_numberOfNames = src[srcIndex] & unchecked(0xFF);
|
||||
int namesLength = _numberOfNames * 18;
|
||||
int statsLength = RDataLength - namesLength - 1;
|
||||
_numberOfNames = src[srcIndex++] & unchecked(0xFF);
|
||||
// gotta read the mac first so we can populate addressArray with it
|
||||
Array.Copy(src, srcIndex + namesLength, _macAddress, 0, 6);
|
||||
srcIndex += ReadNodeNameArray(src, srcIndex);
|
||||
_stats = new byte[statsLength];
|
||||
Array.Copy(src, srcIndex, _stats, 0, statsLength);
|
||||
srcIndex += statsLength;
|
||||
return srcIndex - start;
|
||||
}
|
||||
|
||||
private int ReadNodeNameArray(byte[] src, int srcIndex)
|
||||
{
|
||||
int start = srcIndex;
|
||||
AddressArray = new NbtAddress[_numberOfNames];
|
||||
string n;
|
||||
int hexCode;
|
||||
string scope = _queryAddress.HostName.Scope;
|
||||
bool groupName;
|
||||
int ownerNodeType;
|
||||
bool isBeingDeleted;
|
||||
bool isInConflict;
|
||||
bool isActive;
|
||||
bool isPermanent;
|
||||
int j;
|
||||
bool addrFound = false;
|
||||
try
|
||||
{
|
||||
for (int i = 0; i < _numberOfNames; srcIndex += 18, i++)
|
||||
{
|
||||
for (j = srcIndex + 14; src[j] == unchecked(0x20); j--)
|
||||
{
|
||||
}
|
||||
n = Runtime.GetStringForBytes(src, srcIndex, j - srcIndex + 1, Name.OemEncoding
|
||||
);
|
||||
hexCode = src[srcIndex + 15] & unchecked(0xFF);
|
||||
groupName = ((src[srcIndex + 16] & unchecked(0x80)) == unchecked(0x80))
|
||||
? true
|
||||
: false;
|
||||
ownerNodeType = (src[srcIndex + 16] & unchecked(0x60)) >> 5;
|
||||
isBeingDeleted = ((src[srcIndex + 16] & unchecked(0x10)) == unchecked(0x10))
|
||||
? true
|
||||
: false;
|
||||
isInConflict = ((src[srcIndex + 16] & unchecked(0x08)) == unchecked(0x08))
|
||||
? true
|
||||
: false;
|
||||
isActive = ((src[srcIndex + 16] & unchecked(0x04)) == unchecked(0x04))
|
||||
? true
|
||||
: false;
|
||||
isPermanent = ((src[srcIndex + 16] & unchecked(0x02)) == unchecked(0x02))
|
||||
? true
|
||||
: false;
|
||||
if (!addrFound
|
||||
&& _queryAddress.HostName.HexCode == hexCode
|
||||
&& (_queryAddress.HostName == NbtAddress.UnknownName
|
||||
|| _queryAddress.HostName.name.Equals(n)))
|
||||
{
|
||||
if (_queryAddress.HostName == NbtAddress.UnknownName)
|
||||
{
|
||||
_queryAddress.HostName = new Name(n, hexCode, scope);
|
||||
}
|
||||
_queryAddress.GroupName = groupName;
|
||||
_queryAddress.NodeType = ownerNodeType;
|
||||
_queryAddress.isBeingDeleted = isBeingDeleted;
|
||||
_queryAddress.isInConflict = isInConflict;
|
||||
_queryAddress.isActive = isActive;
|
||||
_queryAddress.isPermanent = isPermanent;
|
||||
_queryAddress.MacAddress = _macAddress;
|
||||
_queryAddress.IsDataFromNodeStatus = true;
|
||||
addrFound = true;
|
||||
AddressArray[i] = _queryAddress;
|
||||
}
|
||||
else
|
||||
{
|
||||
AddressArray[i] = new NbtAddress(new Name(n, hexCode, scope),
|
||||
_queryAddress.Address,
|
||||
groupName,
|
||||
ownerNodeType,
|
||||
isBeingDeleted,
|
||||
isInConflict,
|
||||
isActive,
|
||||
isPermanent,
|
||||
_macAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (UnsupportedEncodingException)
|
||||
{
|
||||
}
|
||||
return srcIndex - start;
|
||||
}
|
||||
private int ReadNodeNameArray(byte[] src, int srcIndex)
|
||||
{
|
||||
int start = srcIndex;
|
||||
AddressArray = new NbtAddress[_numberOfNames];
|
||||
string n;
|
||||
int hexCode;
|
||||
string scope = _queryAddress.HostName.Scope;
|
||||
bool groupName;
|
||||
int ownerNodeType;
|
||||
bool isBeingDeleted;
|
||||
bool isInConflict;
|
||||
bool isActive;
|
||||
bool isPermanent;
|
||||
int j;
|
||||
bool addrFound = false;
|
||||
try
|
||||
{
|
||||
for (int i = 0; i < _numberOfNames; srcIndex += 18, i++)
|
||||
{
|
||||
for (j = srcIndex + 14; src[j] == unchecked(0x20); j--)
|
||||
{
|
||||
}
|
||||
n = Runtime.GetStringForBytes(src, srcIndex, j - srcIndex + 1, Name.OemEncoding
|
||||
);
|
||||
hexCode = src[srcIndex + 15] & unchecked(0xFF);
|
||||
groupName = ((src[srcIndex + 16] & unchecked(0x80)) == unchecked(0x80)) ? true : false;
|
||||
ownerNodeType = (src[srcIndex + 16] & unchecked(0x60)) >> 5;
|
||||
isBeingDeleted = ((src[srcIndex + 16] & unchecked(0x10)) == unchecked(0x10)) ? true : false;
|
||||
isInConflict = ((src[srcIndex + 16] & unchecked(0x08)) == unchecked(0x08)) ? true : false;
|
||||
isActive = ((src[srcIndex + 16] & unchecked(0x04)) == unchecked(0x04)) ? true : false;
|
||||
isPermanent = ((src[srcIndex + 16] & unchecked(0x02)) == unchecked(0x02)) ? true : false;
|
||||
if (!addrFound && _queryAddress.HostName.HexCode == hexCode && (_queryAddress.HostName
|
||||
== NbtAddress.UnknownName || _queryAddress.HostName.name.Equals(n)))
|
||||
{
|
||||
if (_queryAddress.HostName == NbtAddress.UnknownName)
|
||||
{
|
||||
_queryAddress.HostName = new Name(n, hexCode, scope);
|
||||
}
|
||||
_queryAddress.GroupName = groupName;
|
||||
_queryAddress.NodeType = ownerNodeType;
|
||||
_queryAddress.isBeingDeleted = isBeingDeleted;
|
||||
_queryAddress.isInConflict = isInConflict;
|
||||
_queryAddress.isActive = isActive;
|
||||
_queryAddress.isPermanent = isPermanent;
|
||||
_queryAddress.MacAddress = _macAddress;
|
||||
_queryAddress.IsDataFromNodeStatus = true;
|
||||
addrFound = true;
|
||||
AddressArray[i] = _queryAddress;
|
||||
}
|
||||
else
|
||||
{
|
||||
AddressArray[i] = new NbtAddress(new Name(n, hexCode, scope), _queryAddress.Address
|
||||
, groupName, ownerNodeType, isBeingDeleted, isInConflict, isActive, isPermanent,
|
||||
_macAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (UnsupportedEncodingException)
|
||||
{
|
||||
}
|
||||
return srcIndex - start;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return "NodeStatusResponse[" + base.ToString() + "]";
|
||||
}
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
return "NodeStatusResponse[" + base.ToString() + "]";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user