2005-04-12 Dick Porter <dick@ximian.com>
[mono.git] / mcs / class / Novell.Directory.Ldap / Novell.Directory.Ldap.Events / Novell.Directory.Ldap.Events.Edir / EdirEventIntermediateResponse.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.Events.Edir.EdirEventIntermediateResponse.cs
25 //
26 // Author:
27 //   Anil Bhatia (banil@novell.com)
28 //
29 // (C) 2003 Novell, Inc (http://www.novell.com)
30 //
31
32
33 using System;
34 using System.IO;
35
36 using Novell.Directory.Ldap;
37 using Novell.Directory.Ldap.Rfc2251;
38 using Novell.Directory.Ldap.Asn1;
39 using Novell.Directory.Ldap.Events.Edir.EventData;
40
41 namespace Novell.Directory.Ldap.Events.Edir
42 {
43   /// <summary>
44   /// This class represents the intermediate response corresponding to edir events.
45   /// </summary>
46   public class EdirEventIntermediateResponse : LdapIntermediateResponse
47   {
48     protected EdirEventType event_type;
49
50     /// <summary>
51     /// Type of Edir event.
52     /// </summary>
53     public EdirEventType EventType
54     {
55       get
56       {
57         return event_type;
58       }
59     }
60
61     protected EdirEventResultType event_result_type;
62     
63     /// <summary>
64     /// Type of Edir event result.
65     /// </summary>
66     public EdirEventResultType EventResultType
67     {
68       get
69       {
70         return event_result_type;
71       }
72     }
73     
74     protected BaseEdirEventData event_response_data;
75
76     /// <summary>
77     /// The response data object associated with Edir event.
78     /// </summary>
79     public BaseEdirEventData EventResponseDataObject
80     {
81       get
82       {
83         return event_response_data;
84       }
85     }
86     
87     public EdirEventIntermediateResponse(RfcLdapMessage message)
88       : base(message)
89     {
90       ProcessMessage(getValue());
91     }
92
93     public EdirEventIntermediateResponse(byte[] message)
94       : base( new RfcLdapMessage( new Asn1Sequence() ) )
95     {
96       ProcessMessage(SupportClass.ToSByteArray(message));
97     }
98
99     [CLSCompliantAttribute(false)]
100     protected void ProcessMessage(sbyte[] returnedValue)
101     {
102       LBERDecoder decoder = new LBERDecoder();
103       Asn1Sequence sequence = (Asn1Sequence) decoder.decode(returnedValue);
104
105       event_type = (EdirEventType)(((Asn1Integer) sequence.get_Renamed(0)).intValue());
106       event_result_type = (EdirEventResultType)(((Asn1Integer) sequence.get_Renamed(1)).intValue());
107
108       if (sequence.size() > 2)
109       {
110         Asn1Tagged objTagged = (Asn1Tagged) sequence.get_Renamed(2);
111         
112         switch((EdirEventDataType)(objTagged.getIdentifier().Tag))
113         {
114         case EdirEventDataType.EDIR_TAG_ENTRY_EVENT_DATA:
115           event_response_data = new EntryEventData(EdirEventDataType.EDIR_TAG_ENTRY_EVENT_DATA, objTagged.taggedValue());
116           break;
117
118         case EdirEventDataType.EDIR_TAG_VALUE_EVENT_DATA:
119           event_response_data = new ValueEventData(EdirEventDataType.EDIR_TAG_VALUE_EVENT_DATA, objTagged.taggedValue());
120           break;
121           
122         case EdirEventDataType.EDIR_TAG_DEBUG_EVENT_DATA:
123           event_response_data = new DebugEventData(EdirEventDataType.EDIR_TAG_DEBUG_EVENT_DATA, objTagged.taggedValue());
124           break;
125           
126         case EdirEventDataType.EDIR_TAG_GENERAL_EVENT_DATA:
127           event_response_data = new GeneralDSEventData(EdirEventDataType.EDIR_TAG_GENERAL_EVENT_DATA, objTagged.taggedValue());
128           break;
129           
130         case EdirEventDataType.EDIR_TAG_SKULK_DATA:
131           event_response_data = null;
132           break;
133           
134         case EdirEventDataType.EDIR_TAG_BINDERY_EVENT_DATA:
135           event_response_data = new BinderyObjectEventData(EdirEventDataType.EDIR_TAG_BINDERY_EVENT_DATA, objTagged.taggedValue());
136           break;
137           
138         case EdirEventDataType.EDIR_TAG_DSESEV_INFO:
139           event_response_data = new SecurityEquivalenceEventData(EdirEventDataType.EDIR_TAG_DSESEV_INFO, objTagged.taggedValue());
140           break;
141           
142         case EdirEventDataType.EDIR_TAG_MODULE_STATE_DATA:
143           event_response_data = new ModuleStateEventData(EdirEventDataType.EDIR_TAG_MODULE_STATE_DATA, objTagged.taggedValue());
144           break;
145           
146         case EdirEventDataType.EDIR_TAG_NETWORK_ADDRESS:
147           event_response_data = new NetworkAddressEventData(EdirEventDataType.EDIR_TAG_NETWORK_ADDRESS, objTagged.taggedValue());
148           break;
149           
150         case EdirEventDataType.EDIR_TAG_CONNECTION_STATE:
151           event_response_data = new ConnectionStateEventData(EdirEventDataType.EDIR_TAG_CONNECTION_STATE, objTagged.taggedValue());
152           break;
153
154         case EdirEventDataType.EDIR_TAG_CHANGE_SERVER_ADDRESS:
155           event_response_data = new ChangeAddressEventData(EdirEventDataType.EDIR_TAG_CHANGE_SERVER_ADDRESS, objTagged.taggedValue());
156           break;
157
158           /*
159             case EdirEventDataType.EDIR_TAG_CHANGE_CONFIG_PARAM :
160                 responsedata =
161                     new ChangeConfigEventData(
162                         taggedobject.taggedValue());
163
164                 break;
165
166             case EdirEventDataType.EDIR_TAG_STATUS_LOG :
167                 responsedata =
168                     new StatusLogEventData(taggedobject.taggedValue());
169
170                 break;
171           */
172         case EdirEventDataType.EDIR_TAG_NO_DATA:
173           event_response_data = null;
174           break;
175
176         default:
177           //unhandled data.
178           throw new IOException();
179           }
180       } else
181       {
182         //NO DATA
183         event_response_data = null;
184       }
185     }
186   }
187 }