/
DirectoryResponse.cs
138 lines (115 loc) · 4.92 KB
/
DirectoryResponse.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
namespace System.DirectoryServices.Protocols
{
public abstract class DirectoryResponse : DirectoryOperation
{
private readonly DirectoryControl[] _directoryControls;
internal Uri[] _directoryReferral;
internal DirectoryResponse(string dn, DirectoryControl[] controls, ResultCode result, string message, Uri[] referral)
{
MatchedDN = dn;
_directoryControls = controls;
ResultCode = result;
ErrorMessage = message;
_directoryReferral = referral;
}
public string RequestId { get; }
public virtual string MatchedDN { get; }
public virtual DirectoryControl[] Controls
{
get
{
if (_directoryControls == null)
{
return Array.Empty<DirectoryControl>();
}
DirectoryControl[] tempControls = new DirectoryControl[_directoryControls.Length];
for (int i = 0; i < _directoryControls.Length; i++)
{
tempControls[i] = new DirectoryControl(_directoryControls[i].Type, _directoryControls[i].GetValue(), _directoryControls[i].IsCritical, _directoryControls[i].ServerSide);
}
DirectoryControl.TransformControls(tempControls);
return tempControls;
}
}
public virtual ResultCode ResultCode { get; }
public virtual string ErrorMessage { get; }
public virtual Uri[] Referral
{
get
{
if (_directoryReferral == null)
{
return Array.Empty<Uri>();
}
Uri[] tempReferral = new Uri[_directoryReferral.Length];
for (int i = 0; i < _directoryReferral.Length; i++)
{
tempReferral[i] = new Uri(_directoryReferral[i].AbsoluteUri);
}
return tempReferral;
}
}
}
public class DeleteResponse : DirectoryResponse
{
internal DeleteResponse(string dn, DirectoryControl[] controls, ResultCode result, string message, Uri[] referral) : base(dn, controls, result, message, referral) { }
}
public class AddResponse : DirectoryResponse
{
internal AddResponse(string dn, DirectoryControl[] controls, ResultCode result, string message, Uri[] referral) : base(dn, controls, result, message, referral) { }
}
public class ModifyResponse : DirectoryResponse
{
internal ModifyResponse(string dn, DirectoryControl[] controls, ResultCode result, string message, Uri[] referral) : base(dn, controls, result, message, referral) { }
}
public class ModifyDNResponse : DirectoryResponse
{
internal ModifyDNResponse(string dn, DirectoryControl[] controls, ResultCode result, string message, Uri[] referral) : base(dn, controls, result, message, referral) { }
}
public class CompareResponse : DirectoryResponse
{
internal CompareResponse(string dn, DirectoryControl[] controls, ResultCode result, string message, Uri[] referral) : base(dn, controls, result, message, referral) { }
}
public class ExtendedResponse : DirectoryResponse
{
private byte[] _value;
internal ExtendedResponse(string dn, DirectoryControl[] controls, ResultCode result, string message, Uri[] referral) : base(dn, controls, result, message, referral) { }
public string ResponseName { get; internal set; }
public byte[] ResponseValue
{
get
{
if (_value == null)
{
return Array.Empty<byte>();
}
byte[] tmpValue = new byte[_value.Length];
for (int i = 0; i < _value.Length; i++)
{
tmpValue[i] = _value[i];
}
return tmpValue;
}
internal set => _value = value;
}
}
public class SearchResponse : DirectoryResponse
{
private SearchResultReferenceCollection _referenceCollection = new SearchResultReferenceCollection();
private SearchResultEntryCollection _entryCollection = new SearchResultEntryCollection();
internal bool searchDone;
internal SearchResponse(string dn, DirectoryControl[] controls, ResultCode result, string message, Uri[] referral) : base(dn, controls, result, message, referral) { }
public SearchResultReferenceCollection References
{
get => _referenceCollection;
internal set => _referenceCollection = value;
}
public SearchResultEntryCollection Entries
{
get => _entryCollection;
internal set => _entryCollection = value;
}
}
}