public override void FromXml(SecurityElement securityElement) {
if (securityElement == null) {
//
// null SecurityElement
//
throw new ArgumentNullException("securityElement");
}
if (!securityElement.Tag.Equals("IPermission")) {
//
// SecurityElement must be a permission element
//
throw new ArgumentException(SR.GetString(SR.net_not_ipermission), "securityElement");
}
string className = securityElement.Attribute("class");
if (className == null) {
//
// SecurityElement must be a permission element for this type
//
throw new ArgumentException(SR.GetString(SR.net_no_classname), "securityElement");
}
if (className.IndexOf(this.GetType().FullName) < 0) {
//
// SecurityElement must be a permission element for this type
//
throw new ArgumentException(SR.GetString(SR.net_no_typename), "securityElement");
}
String str = securityElement.Attribute("Unrestricted");
m_connectList = new ArrayList();
m_acceptList = new ArrayList();
m_UnrestrictedAccept = m_UnrestrictedConnect = false;
if (str != null && string.Compare(str, "true", StringComparison.OrdinalIgnoreCase ) == 0)
{
m_noRestriction = true;
return;
}
m_noRestriction = false;
SecurityElement et = securityElement.SearchForChildByTag("ConnectAccess");
string uriPattern;
if (et != null) {
foreach(SecurityElement uriElem in et.Children) {
//NOTE: Any stuff coming from XML is treated as URI PATTERN!
if (uriElem.Tag.Equals("URI")) {
try {
uriPattern = uriElem.Attribute("uri");
}
catch {
uriPattern = null;
}
if (uriPattern == null) {
throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val_in_element), "ConnectAccess");
}
if (uriPattern == MatchAll)
{
m_UnrestrictedConnect = true;
m_connectList = new ArrayList();
break;
}
else
{
AddAsPattern(NetworkAccess.Connect, new DelayedRegex(uriPattern));
}
}
else {
// improper tag found, just ignore
}
}
}
et = securityElement.SearchForChildByTag("AcceptAccess");
if (et != null) {
foreach(SecurityElement uriElem in et.Children) {
//NOTE: Any stuff coming from XML is treated as URI PATTERN!
if (uriElem.Tag.Equals("URI")) {
try {
uriPattern = uriElem.Attribute("uri");
}
catch {
uriPattern = null;
}
if (uriPattern == null) {
throw new ArgumentException(SR.GetString(SR.net_perm_invalid_val_in_element), "AcceptAccess");
}
if (uriPattern == MatchAll)
{
m_UnrestrictedAccept = true;
m_acceptList = new ArrayList();
break;
}
else
{
AddAsPattern(NetworkAccess.Accept, new DelayedRegex(uriPattern));
}
}
else {
// improper tag found, just ignore
}
}
}
}