aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/IO/SharpCifs/Smb/Trans2GetDfsReferralResponse.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/IO/SharpCifs/Smb/Trans2GetDfsReferralResponse.cs')
-rw-r--r--Emby.Server.Implementations/IO/SharpCifs/Smb/Trans2GetDfsReferralResponse.cs179
1 files changed, 179 insertions, 0 deletions
diff --git a/Emby.Server.Implementations/IO/SharpCifs/Smb/Trans2GetDfsReferralResponse.cs b/Emby.Server.Implementations/IO/SharpCifs/Smb/Trans2GetDfsReferralResponse.cs
new file mode 100644
index 000000000..5fa4a795d
--- /dev/null
+++ b/Emby.Server.Implementations/IO/SharpCifs/Smb/Trans2GetDfsReferralResponse.cs
@@ -0,0 +1,179 @@
+// This code is derived from jcifs smb client library <jcifs at samba dot org>
+// Ported by J. Arturo <webmaster at komodosoft dot net>
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+using SharpCifs.Util.Sharpen;
+
+namespace SharpCifs.Smb
+{
+ internal class Trans2GetDfsReferralResponse : SmbComTransactionResponse
+ {
+ internal class Referral
+ {
+ private int _version;
+
+ private int _size;
+
+ private int _serverType;
+
+ private int _flags;
+
+ private int _proximity;
+
+ private int _pathOffset;
+
+ private int _altPathOffset;
+
+ private int _nodeOffset;
+
+ private string _altPath;
+
+ internal int Ttl;
+
+ internal string Path;
+
+ internal string Node;
+
+ internal virtual int ReadWireFormat(byte[] buffer, int bufferIndex, int len)
+ {
+ int start = bufferIndex;
+ _version = ReadInt2(buffer, bufferIndex);
+ if (_version != 3 && _version != 1)
+ {
+ throw new RuntimeException("Version " + _version + " referral not supported. Please report this to jcifs at samba dot org."
+ );
+ }
+ bufferIndex += 2;
+ _size = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 2;
+ _serverType = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 2;
+ _flags = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 2;
+ if (_version == 3)
+ {
+ _proximity = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 2;
+ Ttl = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 2;
+ _pathOffset = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 2;
+ _altPathOffset = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 2;
+ _nodeOffset = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 2;
+ Path = _enclosing.ReadString(buffer, start + _pathOffset, len, (_enclosing.Flags2 & SmbConstants.Flags2Unicode) != 0);
+ if (_nodeOffset > 0)
+ {
+ Node = _enclosing.ReadString(buffer, start + _nodeOffset, len, (_enclosing.Flags2 & SmbConstants.Flags2Unicode) != 0);
+ }
+ }
+ else
+ {
+ if (_version == 1)
+ {
+ Node = _enclosing.ReadString(buffer, bufferIndex, len, (_enclosing
+ .Flags2 & SmbConstants.Flags2Unicode) != 0);
+ }
+ }
+ return _size;
+ }
+
+ public override string ToString()
+ {
+ return "Referral[" + "version=" + _version + ",size=" + _size
+ + ",serverType=" + _serverType + ",flags=" + _flags + ",proximity=" + _proximity + ",ttl=" + Ttl + ",pathOffset=" + _pathOffset + ",altPathOffset="
+ + _altPathOffset + ",nodeOffset=" + _nodeOffset + ",path=" + Path
+ + ",altPath=" + _altPath + ",node=" + Node + "]";
+ }
+
+ internal Referral(Trans2GetDfsReferralResponse enclosing)
+ {
+ this._enclosing = enclosing;
+ }
+
+ private readonly Trans2GetDfsReferralResponse _enclosing;
+ }
+
+ internal int PathConsumed;
+
+ internal int NumReferrals;
+
+ internal int flags;
+
+ internal Referral[] Referrals;
+
+ public Trans2GetDfsReferralResponse()
+ {
+ SubCommand = Smb.SmbComTransaction.Trans2GetDfsReferral;
+ }
+
+ internal override int WriteSetupWireFormat(byte[] dst, int dstIndex)
+ {
+ return 0;
+ }
+
+ internal override int WriteParametersWireFormat(byte[] dst, int dstIndex)
+ {
+ return 0;
+ }
+
+ internal override int WriteDataWireFormat(byte[] dst, int dstIndex)
+ {
+ return 0;
+ }
+
+ internal override int ReadSetupWireFormat(byte[] buffer, int bufferIndex, int len
+ )
+ {
+ return 0;
+ }
+
+ internal override int ReadParametersWireFormat(byte[] buffer, int bufferIndex, int
+ len)
+ {
+ return 0;
+ }
+
+ internal override int ReadDataWireFormat(byte[] buffer, int bufferIndex, int len)
+ {
+ int start = bufferIndex;
+ PathConsumed = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 2;
+ if ((Flags2 & SmbConstants.Flags2Unicode) != 0)
+ {
+ PathConsumed /= 2;
+ }
+ NumReferrals = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 2;
+ flags = ReadInt2(buffer, bufferIndex);
+ bufferIndex += 4;
+ Referrals = new Referral[NumReferrals];
+ for (int ri = 0; ri < NumReferrals; ri++)
+ {
+ Referrals[ri] = new Referral(this);
+ bufferIndex += Referrals[ri].ReadWireFormat(buffer, bufferIndex, len);
+ }
+ return bufferIndex - start;
+ }
+
+ public override string ToString()
+ {
+ return "Trans2GetDfsReferralResponse[" + base.ToString() + ",pathConsumed="
+ + PathConsumed + ",numReferrals=" + NumReferrals + ",flags=" + flags + "]";
+ }
+ }
+}