Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Net / System / Net / NetworkInformation / NetworkInformationPermission.cs / 1 / NetworkInformationPermission.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Net.NetworkInformation {
using System.Collections;
using System.Security;
using System.Security.Permissions;
using System.Globalization;
using System.Threading;
[Flags]
public enum NetworkInformationAccess {None = 0, Read=1, Ping = 4};
[ AttributeUsage( AttributeTargets.Method | AttributeTargets.Constructor |
AttributeTargets.Class | AttributeTargets.Struct |
AttributeTargets.Assembly,
AllowMultiple = true, Inherited = false )]
[Serializable]
public sealed class NetworkInformationPermissionAttribute: CodeAccessSecurityAttribute
{
private const string strAccess = "Access";
private string access = null;
public NetworkInformationPermissionAttribute( SecurityAction action ): base( action )
{
}
public string Access{
get{
return access;
}
set{
access = value;
}
}
public override IPermission CreatePermission()
{
NetworkInformationPermission perm = null;
if (Unrestricted) {
perm = new NetworkInformationPermission(PermissionState.Unrestricted);
}
else {
perm = new NetworkInformationPermission(PermissionState.None);
if (access != null) {
if (0 == string.Compare(access, "Read", StringComparison.OrdinalIgnoreCase)) {
perm.AddPermission(NetworkInformationAccess.Read);
}
else if (0 == string.Compare(access, "Ping", StringComparison.OrdinalIgnoreCase)) {
perm.AddPermission(NetworkInformationAccess.Ping);
}
else if (0 == string.Compare(access, "None", StringComparison.OrdinalIgnoreCase)) {
perm.AddPermission(NetworkInformationAccess.None);
}
else {
throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val, strAccess, access));
}
}
}
return perm;
}
}
[Serializable]
public sealed class NetworkInformationPermission : CodeAccessPermission, IUnrestrictedPermission {
NetworkInformationAccess access;
bool unrestricted;
public NetworkInformationPermission(PermissionState state) {
if (state == PermissionState.Unrestricted){
access = NetworkInformationAccess.Read | NetworkInformationAccess.Ping;
unrestricted = true;
}
else{
access = NetworkInformationAccess.None;
}
}
internal NetworkInformationPermission(bool unrestricted) {
if (unrestricted){
access = NetworkInformationAccess.Read | NetworkInformationAccess.Ping;
unrestricted = true;
}
else{
access = NetworkInformationAccess.None;
}
}
public NetworkInformationPermission(NetworkInformationAccess access) {
this.access = access;
}
public NetworkInformationAccess Access{
get{
return access;
}
}
public void AddPermission(NetworkInformationAccess access) {
this.access|=access;
}
public bool IsUnrestricted() {
return unrestricted;
}
public override IPermission Copy() {
if(unrestricted){
return new NetworkInformationPermission(true);
}
return new NetworkInformationPermission(access);
}
public override IPermission Union(IPermission target) {
if (target==null) {
return this.Copy();
}
NetworkInformationPermission other = target as NetworkInformationPermission;
if(other == null) {
throw new ArgumentException(SR.GetString(SR.net_perm_target), "target");
}
if(unrestricted || other.IsUnrestricted()){
return new NetworkInformationPermission(true);
}
return new NetworkInformationPermission(this.access | other.access);
}
public override IPermission Intersect(IPermission target) {
if (target == null) {
return null;
}
NetworkInformationPermission other = target as NetworkInformationPermission;
if(other == null) {
throw new ArgumentException(SR.GetString(SR.net_perm_target), "target");
}
if(unrestricted && other.IsUnrestricted()){
return new NetworkInformationPermission(true);
}
return new NetworkInformationPermission(access & other.access);
}
public override bool IsSubsetOf(IPermission target) {
// Pattern suggested by security engine
if (target == null) {
return (access == NetworkInformationAccess.None);
}
NetworkInformationPermission other = target as NetworkInformationPermission;
if (other == null) {
throw new ArgumentException(SR.GetString(SR.net_perm_target), "target");
}
if(unrestricted && !other.IsUnrestricted()){
return false;
}
else if ((access & other.access) == access) {
return true;
}
return false;
}
public override void FromXml(SecurityElement securityElement) {
access = NetworkInformationAccess.None;
if (securityElement == null) {
throw new ArgumentNullException("securityElement");
}
if (!securityElement.Tag.Equals("IPermission")) {
throw new ArgumentException(SR.GetString(SR.net_not_ipermission), "securityElement");
}
string className = securityElement.Attribute("class");
if (className == null) {
throw new ArgumentException(SR.GetString(SR.net_no_classname), "securityElement");
}
if (className.IndexOf(this.GetType().FullName) < 0) {
throw new ArgumentException(SR.GetString(SR.net_no_typename), "securityElement");
}
String str = securityElement.Attribute("Unrestricted");
if (str != null) {
if (0 == string.Compare( str, "true", StringComparison.OrdinalIgnoreCase)){
access = NetworkInformationAccess.Read | NetworkInformationAccess.Ping;
unrestricted = true;
return;
}
}
if(securityElement.Children != null)
{
foreach(SecurityElement child in securityElement.Children)
{
str = child.Attribute("Access");
if(0 == string.Compare(str, "Read", StringComparison.OrdinalIgnoreCase)){
access |= NetworkInformationAccess.Read;
}
else if(0 == string.Compare(str, "Ping", StringComparison.OrdinalIgnoreCase)){
access |= NetworkInformationAccess.Ping;
}
}
}
}
public override SecurityElement ToXml() {
SecurityElement securityElement = new SecurityElement( "IPermission" );
securityElement.AddAttribute("class", this.GetType().FullName + ", " + this.GetType().Module.Assembly.FullName.Replace( '\"', '\'' ));
securityElement.AddAttribute("version", "1");
if(unrestricted){
securityElement.AddAttribute("Unrestricted", "true");
return securityElement;
}
if ((access & NetworkInformationAccess.Read) > 0) {
SecurityElement child = new SecurityElement("NetworkInformationAccess");
child.AddAttribute( "Access", "Read");
securityElement.AddChild(child);
}
if ((access & NetworkInformationAccess.Ping) > 0) {
SecurityElement child = new SecurityElement("NetworkInformationAccess");
child.AddAttribute( "Access", "Ping");
securityElement.AddChild(child);
}
return securityElement;
}
}// class NetworkInformationPermission
} // namespace System.Net
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BamlTreeNode.cs
- ConfigXmlWhitespace.cs
- InternalRelationshipCollection.cs
- Registry.cs
- ObjectDisposedException.cs
- MessageAction.cs
- TextContainerHelper.cs
- LOSFormatter.cs
- ColumnHeaderConverter.cs
- CodeNamespace.cs
- WriterOutput.cs
- RectValueSerializer.cs
- Pair.cs
- VectorConverter.cs
- DataSetUtil.cs
- AutoCompleteStringCollection.cs
- XmlSchemaComplexContentRestriction.cs
- BidOverLoads.cs
- HiddenFieldPageStatePersister.cs
- DataGridViewButtonCell.cs
- SimpleWorkerRequest.cs
- BitmapScalingModeValidation.cs
- UnauthorizedWebPart.cs
- ContentPlaceHolder.cs
- IISUnsafeMethods.cs
- SafeArrayTypeMismatchException.cs
- _OSSOCK.cs
- PersianCalendar.cs
- ConfigurationPermission.cs
- Trace.cs
- Point3DAnimation.cs
- StylusButtonEventArgs.cs
- ComIntegrationManifestGenerator.cs
- NonSerializedAttribute.cs
- CaseInsensitiveHashCodeProvider.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- SamlAction.cs
- HeaderedContentControl.cs
- Bezier.cs
- EntityClassGenerator.cs
- TableRowGroupCollection.cs
- EdmEntityTypeAttribute.cs
- UserPreferenceChangingEventArgs.cs
- FormatStringEditor.cs
- EntitySetBaseCollection.cs
- TimeSpanOrInfiniteConverter.cs
- StrongTypingException.cs
- DoubleKeyFrameCollection.cs
- SecurityListenerSettingsLifetimeManager.cs
- DataKey.cs
- ExpressionList.cs
- COM2EnumConverter.cs
- ArcSegment.cs
- ColumnCollection.cs
- SingleObjectCollection.cs
- BitmapCodecInfo.cs
- CheckBoxStandardAdapter.cs
- WebBrowserUriTypeConverter.cs
- DesignerActionVerbItem.cs
- ExtensionMethods.cs
- PreloadedPackages.cs
- SearchForVirtualItemEventArgs.cs
- TemplateControl.cs
- PathNode.cs
- TokenizerHelper.cs
- TreeNodeStyleCollection.cs
- PartialTrustVisibleAssemblyCollection.cs
- Exceptions.cs
- LogStream.cs
- DateTimeParse.cs
- EventManager.cs
- ObfuscationAttribute.cs
- ToolStripTextBox.cs
- JavaScriptSerializer.cs
- GlobalizationAssembly.cs
- ControlPropertyNameConverter.cs
- XmlDocument.cs
- UInt32Storage.cs
- ExternalException.cs
- ToolStripContentPanel.cs
- ZipIOModeEnforcingStream.cs
- XPathScanner.cs
- SupportingTokenSpecification.cs
- ErrorStyle.cs
- ArgumentOutOfRangeException.cs
- CqlParser.cs
- ByteStreamGeometryContext.cs
- ExpressionPrinter.cs
- ReadOnlyNameValueCollection.cs
- DBCSCodePageEncoding.cs
- SessionEndingCancelEventArgs.cs
- DiffuseMaterial.cs
- LogStream.cs
- Trace.cs
- BackgroundWorker.cs
- Variant.cs
- XmlILOptimizerVisitor.cs
- HitTestFilterBehavior.cs
- CompilerTypeWithParams.cs
- GridViewRowCollection.cs