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