aboutsummaryrefslogtreecommitdiff
path: root/src/wixext/MsmqDecompiler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/wixext/MsmqDecompiler.cs')
-rw-r--r--src/wixext/MsmqDecompiler.cs303
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
3namespace 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}