Add this for backwards compatibility
[mono.git] / mcs / ilasm / codegen / DeclSecurity.cs
1 //
2 // Mono.ILASM.DeclSecurity
3 //
4 // Author(s):
5 //  Ankit Jain  <JAnkit@novell.com>
6 //
7 // (C) 2005 Ankit Jain, All rights reserved
8 //
9
10
11 using System;
12 using System.Collections;
13 using System.Security;
14 using System.Security.Permissions;
15
16 namespace Mono.ILASM {
17
18         public interface IDeclSecurityTarget {
19                 void AddPermission (PEAPI.SecurityAction sec_action, IPermission iper);
20                 void AddPermissionSet (PEAPI.SecurityAction sec_action, PermissionSet perm_set);
21         }
22
23         public class DeclSecurity {
24
25                 private Hashtable permissionset_table;
26
27                 public DeclSecurity ()
28                 {
29                         permissionset_table = new Hashtable ();        
30                 }
31
32                 public void AddPermission (PEAPI.SecurityAction sec_action, IPermission perm)
33                 {
34                         PermissionSet ps = (PermissionSet) permissionset_table [sec_action];
35                         if (ps == null) {
36                                 ps = new PermissionSet (PermissionState.None);        
37                                 permissionset_table [sec_action] = ps;
38                         }
39
40                         ps.AddPermission (perm);
41                 }
42
43                 public void AddPermissionSet (PEAPI.SecurityAction sec_action, PermissionSet perm_set)
44                 {
45                         PermissionSet ps = (PermissionSet) permissionset_table [sec_action];
46                         if (ps == null) {
47                                 permissionset_table [sec_action] = perm_set;
48                                 return;
49                         }
50
51                         foreach (IPermission iper in perm_set)
52                                 ps.AddPermission (iper);
53                 }
54                 
55                 public void AddTo (CodeGen code_gen, PEAPI.MetaDataElement elem)
56                 {
57                         System.Text.UnicodeEncoding ue = new System.Text.UnicodeEncoding ();
58                         foreach (PEAPI.SecurityAction sec_action in permissionset_table.Keys)
59                                 code_gen.PEFile.AddDeclSecurity (sec_action, 
60                                         ue.GetBytes (((PermissionSet) permissionset_table [sec_action]).ToXml ().ToString ()), 
61                                         elem);
62                 }
63
64         }
65
66 }