public override bool IsSubsetOf(IPermission target) { if (target == null) { return(false); } if (!(target is MessageQueuePermission)) { throw new ArgumentException(Res.GetString("InvalidParameter", new object[] { "target", target.ToString() })); } MessageQueuePermission permission = (MessageQueuePermission)target; if (!permission.IsUnrestricted()) { IDictionaryEnumerator enumerator; if (this.IsUnrestricted()) { return(false); } this.ResolveFormatNames(); permission.ResolveFormatNames(); if (((this.resolvedFormatNames.Count == 0) && (permission.resolvedFormatNames.Count != 0)) || ((this.resolvedFormatNames.Count != 0) && (permission.resolvedFormatNames.Count == 0))) { return(false); } if (permission.resolvedFormatNames.ContainsKey("*")) { MessageQueuePermissionAccess access = (MessageQueuePermissionAccess)permission.resolvedFormatNames["*"]; enumerator = this.resolvedFormatNames.GetEnumerator(); while (enumerator.MoveNext()) { MessageQueuePermissionAccess access2 = (MessageQueuePermissionAccess)enumerator.Value; if ((access2 & access) != access2) { return(false); } } return(true); } enumerator = this.resolvedFormatNames.GetEnumerator(); while (enumerator.MoveNext()) { string key = (string)enumerator.Key; if (!permission.resolvedFormatNames.ContainsKey(key)) { return(false); } MessageQueuePermissionAccess access3 = (MessageQueuePermissionAccess)enumerator.Value; MessageQueuePermissionAccess access4 = (MessageQueuePermissionAccess)permission.resolvedFormatNames[key]; if ((access3 & access4) != access3) { return(false); } } } return(true); }
/// <include file='doc\MessageQueuePermission.uex' path='docs/doc[@for="MessageQueuePermission.Intersect"]/*' /> /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override IPermission Intersect(IPermission target) { if (target == null) { return(null); } if (!(target is MessageQueuePermission)) { throw new ArgumentException(Res.GetString(Res.InvalidParameter, "target", target.ToString())); } MessageQueuePermission targetQueuePermission = (MessageQueuePermission)target; if (this.IsUnrestricted()) { return(targetQueuePermission.Copy()); } if (targetQueuePermission.IsUnrestricted()) { return(this.Copy()); } this.ResolveFormatNames(); targetQueuePermission.ResolveFormatNames(); MessageQueuePermission newPermission = new MessageQueuePermission(); Hashtable newFormatNames = new Hashtable(new CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture), new CaseInsensitiveComparer(CultureInfo.InvariantCulture)); newPermission.resolvedFormatNames = newFormatNames; IDictionaryEnumerator formatNamesEnumerator; Hashtable formatNamesTable; if (this.resolvedFormatNames.Count < targetQueuePermission.resolvedFormatNames.Count) { formatNamesEnumerator = this.resolvedFormatNames.GetEnumerator(); formatNamesTable = targetQueuePermission.resolvedFormatNames; } else { formatNamesEnumerator = targetQueuePermission.resolvedFormatNames.GetEnumerator(); formatNamesTable = this.resolvedFormatNames; } while (formatNamesEnumerator.MoveNext()) { if (formatNamesTable.ContainsKey(formatNamesEnumerator.Key)) { string currentFormatName = (string)formatNamesEnumerator.Key; MessageQueuePermissionAccess currentAccess = (MessageQueuePermissionAccess)formatNamesEnumerator.Value; MessageQueuePermissionAccess targetAccess = (MessageQueuePermissionAccess)formatNamesTable[currentFormatName]; newFormatNames.Add(currentFormatName, currentAccess & targetAccess); } } return(newPermission); }
public override IPermission Intersect(IPermission target) { IDictionaryEnumerator enumerator; Hashtable resolvedFormatNames; if (target == null) { return(null); } if (!(target is MessageQueuePermission)) { throw new ArgumentException(Res.GetString("InvalidParameter", new object[] { "target", target.ToString() })); } MessageQueuePermission permission = (MessageQueuePermission)target; if (this.IsUnrestricted()) { return(permission.Copy()); } if (permission.IsUnrestricted()) { return(this.Copy()); } this.ResolveFormatNames(); permission.ResolveFormatNames(); MessageQueuePermission permission2 = new MessageQueuePermission(); Hashtable hashtable = new Hashtable(GetComparer()); permission2.resolvedFormatNames = hashtable; if (this.resolvedFormatNames.Count < permission.resolvedFormatNames.Count) { enumerator = this.resolvedFormatNames.GetEnumerator(); resolvedFormatNames = permission.resolvedFormatNames; } else { enumerator = permission.resolvedFormatNames.GetEnumerator(); resolvedFormatNames = this.resolvedFormatNames; } while (enumerator.MoveNext()) { if (resolvedFormatNames.ContainsKey(enumerator.Key)) { string key = (string)enumerator.Key; MessageQueuePermissionAccess access = (MessageQueuePermissionAccess)enumerator.Value; MessageQueuePermissionAccess access2 = (MessageQueuePermissionAccess)resolvedFormatNames[key]; hashtable.Add(key, access & access2); } } return(permission2); }
/// <include file='doc\MessageQueuePermission.uex' path='docs/doc[@for="MessageQueuePermission.Union"]/*' /> /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override IPermission Union(IPermission target) { if (target == null) { return(this.Copy()); } if (!(target is MessageQueuePermission)) { throw new ArgumentException(Res.GetString(Res.InvalidParameter, "target", target.ToString())); } MessageQueuePermission targetQueuePermission = (MessageQueuePermission)target; MessageQueuePermission newPermission = new MessageQueuePermission(); if (this.IsUnrestricted() || targetQueuePermission.IsUnrestricted()) { newPermission.isUnrestricted = true; return(newPermission); } Hashtable newFormatNames = new Hashtable(new CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture), new CaseInsensitiveComparer(CultureInfo.InvariantCulture)); this.ResolveFormatNames(); targetQueuePermission.ResolveFormatNames(); IDictionaryEnumerator formatNamesEnumerator = this.resolvedFormatNames.GetEnumerator(); IDictionaryEnumerator targetFormatNamesEnumerator = targetQueuePermission.resolvedFormatNames.GetEnumerator(); while (formatNamesEnumerator.MoveNext()) { newFormatNames[(string)formatNamesEnumerator.Key] = formatNamesEnumerator.Value; } while (targetFormatNamesEnumerator.MoveNext()) { if (!newFormatNames.ContainsKey(targetFormatNamesEnumerator.Key)) { newFormatNames[targetFormatNamesEnumerator.Key] = targetFormatNamesEnumerator.Value; } else { MessageQueuePermissionAccess currentAccess = (MessageQueuePermissionAccess)newFormatNames[targetFormatNamesEnumerator.Key]; newFormatNames[targetFormatNamesEnumerator.Key] = currentAccess | (MessageQueuePermissionAccess)targetFormatNamesEnumerator.Value; } } newPermission.resolvedFormatNames = newFormatNames; return(newPermission); }
public override IPermission Union(IPermission target) { if (target == null) { return(this.Copy()); } if (!(target is MessageQueuePermission)) { throw new ArgumentException(Res.GetString("InvalidParameter", new object[] { "target", target.ToString() })); } MessageQueuePermission permission = (MessageQueuePermission)target; MessageQueuePermission permission2 = new MessageQueuePermission(); if (this.IsUnrestricted() || permission.IsUnrestricted()) { permission2.isUnrestricted = true; return(permission2); } Hashtable hashtable = new Hashtable(GetComparer()); this.ResolveFormatNames(); permission.ResolveFormatNames(); IDictionaryEnumerator enumerator = this.resolvedFormatNames.GetEnumerator(); IDictionaryEnumerator enumerator2 = permission.resolvedFormatNames.GetEnumerator(); while (enumerator.MoveNext()) { hashtable[(string)enumerator.Key] = enumerator.Value; } while (enumerator2.MoveNext()) { if (!hashtable.ContainsKey(enumerator2.Key)) { hashtable[enumerator2.Key] = enumerator2.Value; } else { MessageQueuePermissionAccess access = (MessageQueuePermissionAccess)hashtable[enumerator2.Key]; hashtable[enumerator2.Key] = access | ((MessageQueuePermissionAccess)enumerator2.Value); } } permission2.resolvedFormatNames = hashtable; return(permission2); }
/// <include file='doc\MessageQueuePermission.uex' path='docs/doc[@for="MessageQueuePermission.IsSubsetOf"]/*' /> /// <devdoc> /// <para>[To be supplied.]</para> /// </devdoc> public override bool IsSubsetOf(IPermission target) { if (target == null) { return(false); } if (!(target is MessageQueuePermission)) { throw new ArgumentException(Res.GetString(Res.InvalidParameter, "target", target.ToString())); } MessageQueuePermission targetQueuePermission = (MessageQueuePermission)target; if (targetQueuePermission.IsUnrestricted()) { return(true); } else if (this.IsUnrestricted()) { return(false); } this.ResolveFormatNames(); targetQueuePermission.ResolveFormatNames(); //If one of the tables is empty the subset cannot be resolved reliably, should assume //then that they are not subset of each other. if ((this.resolvedFormatNames.Count == 0 && targetQueuePermission.resolvedFormatNames.Count != 0) || (this.resolvedFormatNames.Count != 0 && targetQueuePermission.resolvedFormatNames.Count == 0)) { return(false); } //If the target table contains a wild card, all the current formatName access need to be //a subset of the target. IDictionaryEnumerator formatNamesEnumerator; if (targetQueuePermission.resolvedFormatNames.ContainsKey(Any)) { MessageQueuePermissionAccess targetAccess = (MessageQueuePermissionAccess)targetQueuePermission.resolvedFormatNames[Any]; formatNamesEnumerator = this.resolvedFormatNames.GetEnumerator(); while (formatNamesEnumerator.MoveNext()) { MessageQueuePermissionAccess currentAccess = (MessageQueuePermissionAccess)formatNamesEnumerator.Value; if ((currentAccess & targetAccess) != currentAccess) { return(false); } } return(true); } //If the current table contains a wild card it can be treated as any other format name. formatNamesEnumerator = this.resolvedFormatNames.GetEnumerator(); while (formatNamesEnumerator.MoveNext()) { string currentFormatName = (string)formatNamesEnumerator.Key; if (!targetQueuePermission.resolvedFormatNames.ContainsKey(currentFormatName)) { return(false); } else { MessageQueuePermissionAccess currentAccess = (MessageQueuePermissionAccess)formatNamesEnumerator.Value; MessageQueuePermissionAccess targetAccess = (MessageQueuePermissionAccess)targetQueuePermission.resolvedFormatNames[currentFormatName]; if ((currentAccess & targetAccess) != currentAccess) { return(false); } } } return(true); }