internal virtual DfsReferral[] __getDfsReferrals(NtlmPasswordAuthentication auth,
string path, int rn)
{
SmbTree ipc = GetSmbSession(auth).GetSmbTree("IPC$", null);
Trans2GetDfsReferralResponse resp = new Trans2GetDfsReferralResponse();
ipc.Send(new Trans2GetDfsReferral(path), resp);
if (rn == 0 || resp.NumReferrals < rn)
{
rn = resp.NumReferrals;
}
DfsReferral[] drs = new DfsReferral[rn];
string[] arr = new string[4];
long expiration = Runtime.CurrentTimeMillis() + Dfs.Ttl * 1000;
for (int di = 0; di < drs.Length; di++)
{
DfsReferral dr = new DfsReferral();
dr.ResolveHashes = auth.HashesExternal;
dr.Ttl = resp.Referrals[di].Ttl;
dr.Expiration = expiration;
if (path.Equals(string.Empty))
{
dr.Server = Runtime.Substring(resp.Referrals[di].Path, 1).ToLower();
}
else
{
DfsPathSplit(resp.Referrals[di].Node, arr);
dr.Server = arr[1];
dr.Share = arr[2];
dr.Path = arr[3];
}
dr.PathConsumed = resp.PathConsumed;
drs[di] = dr;
}
return drs;
}
}