diff options
Diffstat (limited to 'src/ext/Msmq/wixext/MsmqDecompiler.cs')
-rw-r--r-- | src/ext/Msmq/wixext/MsmqDecompiler.cs | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/src/ext/Msmq/wixext/MsmqDecompiler.cs b/src/ext/Msmq/wixext/MsmqDecompiler.cs new file mode 100644 index 00000000..aa8c34b6 --- /dev/null +++ b/src/ext/Msmq/wixext/MsmqDecompiler.cs | |||
@@ -0,0 +1,305 @@ | |||
1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
2 | |||
3 | namespace WixToolset.Msmq | ||
4 | { | ||
5 | #if TODO_CONSIDER_DECOMPILER | ||
6 | using System; | ||
7 | using System.Collections; | ||
8 | using System.Globalization; | ||
9 | using WixToolset.Data; | ||
10 | using WixToolset.Extensibility; | ||
11 | using Msmq = WixToolset.Extensions.Serialize.Msmq; | ||
12 | using Wix = WixToolset.Data.Serialize; | ||
13 | |||
14 | /// <summary> | ||
15 | /// The decompiler for the WiX Toolset MSMQ Extension. | ||
16 | /// </summary> | ||
17 | public sealed class MsmqDecompiler : DecompilerExtension | ||
18 | { | ||
19 | /// <summary> | ||
20 | /// Creates a decompiler for MSMQ Extension. | ||
21 | /// </summary> | ||
22 | public MsmqDecompiler() | ||
23 | { | ||
24 | this.TableDefinitions = MsmqExtensionData.GetExtensionTableDefinitions(); | ||
25 | } | ||
26 | |||
27 | /// <summary> | ||
28 | /// Get the extensions library to be removed. | ||
29 | /// </summary> | ||
30 | /// <param name="tableDefinitions">Table definitions for library.</param> | ||
31 | /// <returns>Library to remove from decompiled output.</returns> | ||
32 | public override Library GetLibraryToRemove(TableDefinitionCollection tableDefinitions) | ||
33 | { | ||
34 | return MsmqExtensionData.GetExtensionLibrary(tableDefinitions); | ||
35 | } | ||
36 | |||
37 | /// <summary> | ||
38 | /// Decompiles an extension table. | ||
39 | /// </summary> | ||
40 | /// <param name="table">The table to decompile.</param> | ||
41 | public override void DecompileTable(Table table) | ||
42 | { | ||
43 | switch (table.Name) | ||
44 | { | ||
45 | case "MessageQueue": | ||
46 | this.DecompileMessageQueueTable(table); | ||
47 | break; | ||
48 | case "MessageQueueUserPermission": | ||
49 | this.DecompileMessageQueueUserPermissionTable(table); | ||
50 | break; | ||
51 | case "MessageQueueGroupPermission": | ||
52 | this.DecompileMessageQueueGroupPermissionTable(table); | ||
53 | break; | ||
54 | default: | ||
55 | base.DecompileTable(table); | ||
56 | break; | ||
57 | } | ||
58 | } | ||
59 | |||
60 | /// <summary> | ||
61 | /// Decompile the MessageQueue table. | ||
62 | /// </summary> | ||
63 | /// <param name="table">The table to decompile.</param> | ||
64 | private void DecompileMessageQueueTable(Table table) | ||
65 | { | ||
66 | foreach (Row row in table.Rows) | ||
67 | { | ||
68 | Msmq.MessageQueue queue = new Msmq.MessageQueue(); | ||
69 | |||
70 | queue.Id = (string)row[0]; | ||
71 | |||
72 | if (null != row[2]) | ||
73 | { | ||
74 | queue.BasePriority = (int)row[2]; | ||
75 | } | ||
76 | |||
77 | if (null != row[3]) | ||
78 | { | ||
79 | queue.JournalQuota = (int)row[3]; | ||
80 | } | ||
81 | |||
82 | queue.Label = (string)row[4]; | ||
83 | |||
84 | if (null != row[5]) | ||
85 | { | ||
86 | queue.MulticastAddress = (string)row[5]; | ||
87 | } | ||
88 | |||
89 | queue.PathName = (string)row[6]; | ||
90 | |||
91 | if (null != row[7]) | ||
92 | { | ||
93 | switch ((MsmqCompiler.MqiMessageQueuePrivacyLevel)row[7]) | ||
94 | { | ||
95 | case MsmqCompiler.MqiMessageQueuePrivacyLevel.None: | ||
96 | queue.PrivLevel = Msmq.MessageQueue.PrivLevelType.none; | ||
97 | break; | ||
98 | case MsmqCompiler.MqiMessageQueuePrivacyLevel.Optional: | ||
99 | queue.PrivLevel = Msmq.MessageQueue.PrivLevelType.optional; | ||
100 | break; | ||
101 | case MsmqCompiler.MqiMessageQueuePrivacyLevel.Body: | ||
102 | queue.PrivLevel = Msmq.MessageQueue.PrivLevelType.body; | ||
103 | break; | ||
104 | default: | ||
105 | break; | ||
106 | } | ||
107 | } | ||
108 | |||
109 | if (null != row[8]) | ||
110 | { | ||
111 | queue.Quota = (int)row[8]; | ||
112 | } | ||
113 | |||
114 | if (null != row[9]) | ||
115 | { | ||
116 | queue.ServiceTypeGuid = (string)row[9]; | ||
117 | } | ||
118 | |||
119 | int attributes = (int)row[10]; | ||
120 | |||
121 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueueAttributes.Authenticate)) | ||
122 | { | ||
123 | queue.Authenticate = Msmq.YesNoType.yes; | ||
124 | } | ||
125 | |||
126 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueueAttributes.Journal)) | ||
127 | { | ||
128 | queue.Journal = Msmq.YesNoType.yes; | ||
129 | } | ||
130 | |||
131 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueueAttributes.Transactional)) | ||
132 | { | ||
133 | queue.Transactional = Msmq.YesNoType.yes; | ||
134 | } | ||
135 | |||
136 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[1]); | ||
137 | if (null != component) | ||
138 | { | ||
139 | component.AddChild(queue); | ||
140 | } | ||
141 | else | ||
142 | { | ||
143 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[1], "Component")); | ||
144 | } | ||
145 | } | ||
146 | } | ||
147 | |||
148 | /// <summary> | ||
149 | /// Decompile the MessageQueueUserPermission table. | ||
150 | /// </summary> | ||
151 | /// <param name="table">The table to decompile.</param> | ||
152 | private void DecompileMessageQueueUserPermissionTable(Table table) | ||
153 | { | ||
154 | foreach (Row row in table.Rows) | ||
155 | { | ||
156 | Msmq.MessageQueuePermission queuePermission = new Msmq.MessageQueuePermission(); | ||
157 | |||
158 | queuePermission.Id = (string)row[0]; | ||
159 | |||
160 | if (null != row[2]) | ||
161 | { | ||
162 | queuePermission.MessageQueue = (string)row[2]; | ||
163 | } | ||
164 | |||
165 | queuePermission.User = (string)row[3]; | ||
166 | |||
167 | DecompileMessageQueuePermissionAttributes(row, queuePermission); | ||
168 | |||
169 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[1]); | ||
170 | if (null != component) | ||
171 | { | ||
172 | component.AddChild(queuePermission); | ||
173 | } | ||
174 | else | ||
175 | { | ||
176 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[1], "Component")); | ||
177 | } | ||
178 | } | ||
179 | } | ||
180 | |||
181 | /// <summary> | ||
182 | /// Decompile the MessageQueueGroupPermission table. | ||
183 | /// </summary> | ||
184 | /// <param name="table">The table to decompile.</param> | ||
185 | private void DecompileMessageQueueGroupPermissionTable(Table table) | ||
186 | { | ||
187 | foreach (Row row in table.Rows) | ||
188 | { | ||
189 | Msmq.MessageQueuePermission queuePermission = new Msmq.MessageQueuePermission(); | ||
190 | |||
191 | queuePermission.Id = (string)row[0]; | ||
192 | |||
193 | if (null != row[2]) | ||
194 | { | ||
195 | queuePermission.MessageQueue = (string)row[2]; | ||
196 | } | ||
197 | |||
198 | queuePermission.Group = (string)row[3]; | ||
199 | |||
200 | DecompileMessageQueuePermissionAttributes(row, queuePermission); | ||
201 | |||
202 | Wix.Component component = (Wix.Component)this.Core.GetIndexedElement("Component", (string)row[1]); | ||
203 | if (null != component) | ||
204 | { | ||
205 | component.AddChild(queuePermission); | ||
206 | } | ||
207 | else | ||
208 | { | ||
209 | this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, table.Name, row.GetPrimaryKey(DecompilerConstants.PrimaryKeyDelimiter), "Component_", (string)row[1], "Component")); | ||
210 | } | ||
211 | } | ||
212 | } | ||
213 | |||
214 | /// <summary> | ||
215 | /// Decompile row attributes for the MessageQueueUserPermission and MessageQueueGroupPermission tables. | ||
216 | /// </summary> | ||
217 | /// <param name="row">The row to decompile.</param> | ||
218 | /// <param name="table">Target element.</param> | ||
219 | private void DecompileMessageQueuePermissionAttributes(Row row, Msmq.MessageQueuePermission queuePermission) | ||
220 | { | ||
221 | int attributes = (int)row[4]; | ||
222 | |||
223 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.DeleteMessage)) | ||
224 | { | ||
225 | queuePermission.DeleteMessage = Msmq.YesNoType.yes; | ||
226 | } | ||
227 | |||
228 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.PeekMessage)) | ||
229 | { | ||
230 | queuePermission.PeekMessage = Msmq.YesNoType.yes; | ||
231 | } | ||
232 | |||
233 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.WriteMessage)) | ||
234 | { | ||
235 | queuePermission.WriteMessage = Msmq.YesNoType.yes; | ||
236 | } | ||
237 | |||
238 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.DeleteJournalMessage)) | ||
239 | { | ||
240 | queuePermission.DeleteJournalMessage = Msmq.YesNoType.yes; | ||
241 | } | ||
242 | |||
243 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.SetQueueProperties)) | ||
244 | { | ||
245 | queuePermission.SetQueueProperties = Msmq.YesNoType.yes; | ||
246 | } | ||
247 | |||
248 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.GetQueueProperties)) | ||
249 | { | ||
250 | queuePermission.GetQueueProperties = Msmq.YesNoType.yes; | ||
251 | } | ||
252 | |||
253 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.DeleteQueue)) | ||
254 | { | ||
255 | queuePermission.DeleteQueue = Msmq.YesNoType.yes; | ||
256 | } | ||
257 | |||
258 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.GetQueuePermissions)) | ||
259 | { | ||
260 | queuePermission.GetQueuePermissions = Msmq.YesNoType.yes; | ||
261 | } | ||
262 | |||
263 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.ChangeQueuePermissions)) | ||
264 | { | ||
265 | queuePermission.ChangeQueuePermissions = Msmq.YesNoType.yes; | ||
266 | } | ||
267 | |||
268 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.TakeQueueOwnership)) | ||
269 | { | ||
270 | queuePermission.TakeQueueOwnership = Msmq.YesNoType.yes; | ||
271 | } | ||
272 | |||
273 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.ReceiveMessage)) | ||
274 | { | ||
275 | queuePermission.ReceiveMessage = Msmq.YesNoType.yes; | ||
276 | } | ||
277 | |||
278 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.ReceiveJournalMessage)) | ||
279 | { | ||
280 | queuePermission.ReceiveJournalMessage = Msmq.YesNoType.yes; | ||
281 | } | ||
282 | |||
283 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.QueueGenericRead)) | ||
284 | { | ||
285 | queuePermission.QueueGenericRead = Msmq.YesNoType.yes; | ||
286 | } | ||
287 | |||
288 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.QueueGenericWrite)) | ||
289 | { | ||
290 | queuePermission.QueueGenericWrite = Msmq.YesNoType.yes; | ||
291 | } | ||
292 | |||
293 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.QueueGenericExecute)) | ||
294 | { | ||
295 | queuePermission.QueueGenericExecute = Msmq.YesNoType.yes; | ||
296 | } | ||
297 | |||
298 | if (0 != (attributes & (int)MsmqCompiler.MqiMessageQueuePermission.QueueGenericAll)) | ||
299 | { | ||
300 | queuePermission.QueueGenericAll = Msmq.YesNoType.yes; | ||
301 | } | ||
302 | } | ||
303 | } | ||
304 | #endif | ||
305 | } | ||