* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / Novell.Directory.Ldap / Novell.Directory.Ldap / LdapExtendedResponse.cs
1 /******************************************************************************
2 * The MIT License
3 * Copyright (c) 2003 Novell Inc.  www.novell.com
4
5 * Permission is hereby granted, free of charge, to any person obtaining  a copy
6 * of this software and associated documentation files (the Software), to deal
7 * in the Software without restriction, including  without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
9 * copies of the Software, and to  permit persons to whom the Software is 
10 * furnished to do so, subject to the following conditions:
11
12 * The above copyright notice and this permission notice shall be included in 
13 * all copies or substantial portions of the Software.
14
15 * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 * SOFTWARE.
22 *******************************************************************************/
23 //
24 // Novell.Directory.Ldap.LdapExtendedResponse.cs
25 //
26 // Author:
27 //   Sunil Kumar (Sunilk@novell.com)
28 //
29 // (C) 2003 Novell, Inc (http://www.novell.com)
30 //
31
32 using System;
33 using Novell.Directory.Ldap.Rfc2251;
34 using Novell.Directory.Ldap.Asn1;
35 using RespExtensionSet = Novell.Directory.Ldap.Utilclass.RespExtensionSet;
36
37 namespace Novell.Directory.Ldap
38 {
39         
40         /// <summary> 
41         /// Encapsulates the response returned by an Ldap server on an
42         /// asynchronous extended operation request.  It extends LdapResponse.
43         /// 
44         /// The response can contain the OID of the extension, an octet string
45         /// with the operation's data, both, or neither.
46         /// </summary>
47         public class LdapExtendedResponse:LdapResponse
48         {
49                 /// <summary> Returns the message identifier of the response.
50                 /// 
51                 /// </summary>
52                 /// <returns> OID of the response.
53                 /// </returns>
54                 virtual public System.String ID
55                 {
56                         get
57                         {
58                                 RfcLdapOID respOID = ((RfcExtendedResponse) message.Response).ResponseName;
59                                 if (respOID == null)
60                                         return null;
61                                 return respOID.stringValue();
62                         }
63                         
64                 }
65
66                 static LdapExtendedResponse()
67                 {
68                         registeredResponses = new RespExtensionSet();
69                 }
70
71                 public static RespExtensionSet RegisteredResponses
72                 {
73                         /* package */
74                         
75                         get
76                         {
77                                 return registeredResponses;
78                         }
79                         
80                 }
81
82                 /// <summary> Returns the value part of the response in raw bytes.
83                 /// 
84                 /// </summary>
85                 /// <returns> The value of the response.
86                 /// </returns>
87                 [CLSCompliantAttribute(false)]
88                 virtual public sbyte[] Value
89                 {
90                         get
91                         {
92                                 Asn1OctetString tempString = ((RfcExtendedResponse) message.Response).Response;
93                                 if (tempString == null)
94                                         return null;
95                                 else
96                                         return (tempString.byteValue());
97                         }
98                         
99                 }
100                 private static RespExtensionSet registeredResponses;
101                 
102                 /// <summary> Creates an LdapExtendedResponse object which encapsulates
103                 /// a server response to an asynchronous extended operation request.
104                 /// 
105                 /// </summary>
106                 /// <param name="message"> The RfcLdapMessage to convert to an
107                 /// LdapExtendedResponse object.
108                 /// </param>
109                 public LdapExtendedResponse(RfcLdapMessage message):base(message)
110                 {
111                 }
112
113                 /// <summary> Registers a class to be instantiated on receipt of a extendedresponse
114                 /// with the given OID.
115                 /// 
116                 /// <p>Any previous registration for the OID is overridden. The 
117                 /// extendedResponseClass object MUST be an extension of 
118                 /// LDAPExtendedResponse. </p>
119                 /// 
120                 /// </summary>
121                 /// <param name="oid">           The object identifier of the control.
122                 /// </param>
123                 /// <param name="extendedResponseClass"> A class which can instantiate an 
124                 /// LDAPExtendedResponse.
125                 /// </param>
126                 public static void  register(System.String oid, System.Type extendedResponseClass)
127                 {
128                         registeredResponses.registerResponseExtension(oid, extendedResponseClass);
129                         return ;
130                 }
131
132         }
133 }