New test.
[mono.git] / mcs / class / Novell.Directory.Ldap / Novell.Directory.Ldap / LdapIntermediateResponse.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.LdapIntermediateResponse.cs
25 //
26 // Author:
27 //   Anil Bhatia (banil@novell.com)
28 //
29 // (C) 2003 Novell, Inc (http://www.novell.com)
30 //
31
32 using System;
33 using Novell.Directory.Ldap.Asn1;
34 using Novell.Directory.Ldap.Rfc2251;
35 using Novell.Directory.Ldap.Utilclass;
36
37 namespace Novell.Directory.Ldap
38 {
39   /**
40    *
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    */
47   public class LdapIntermediateResponse : LdapResponse
48   {
49     private static RespExtensionSet registeredResponses = new RespExtensionSet();
50
51         /**
52          * Registers a class to be instantiated on receipt of a extendedresponse
53          * with the given OID.
54          *
55          * <p>Any previous registration for the OID is overridden. The 
56          *  extendedResponseClass object MUST be an extension of 
57          *  LdapIntermediateResponse. </p>
58          *
59          * @param oid            The object identifier of the control.
60          * <br><br>
61          * @param extendedResponseClass  A class which can instantiate an 
62          *                                LdapIntermediateResponse.
63          */
64         public static void register(String oid, Type extendedResponseClass) 
65         {
66                 registeredResponses.registerResponseExtension(oid, extendedResponseClass);
67                 return;
68         }
69
70         /* package */
71         public static RespExtensionSet getRegisteredResponses()
72         {
73                 return registeredResponses;
74         }
75
76
77     /**
78      * Creates an LdapIntermediateResponse object which encapsulates
79      * a server response to an asynchronous extended operation request.
80      *
81      * @param message  The RfcLdapMessage to convert to an
82      *                 LdapIntermediateResponse object.
83      */
84     public LdapIntermediateResponse(RfcLdapMessage message) : base(message)
85     {
86     }
87
88     /**
89      * Returns the message identifier of the response.
90      *
91      * @return OID of the response.
92      */
93     public String getID()
94     {
95         RfcLdapOID respOID =
96             ((RfcIntermediateResponse)message.Response).getResponseName();
97         if (respOID == null)
98             return null;
99         return respOID.stringValue();
100     }
101
102     /**
103      * Returns the value part of the response in raw bytes.
104      *
105      * @return The value of the response.
106      */
107     [CLSCompliantAttribute(false)]
108     public sbyte[] getValue()
109     {
110                 Asn1OctetString tempString =
111                 ((RfcIntermediateResponse)message.Response).getResponse();
112                 if (tempString == null)
113                         return null;
114                 else
115                         return(tempString.byteValue());
116     }
117   }
118 }