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