public override IPermission Intersect(IPermission target) {
// Pattern suggested by Security engine
if (target == null) {
return null;
}
WebPermission other = target as WebPermission;
if(other == null) {
throw new ArgumentException(SR.GetString(SR.net_perm_target), "target");
}
if (m_noRestriction)
{
return other.Copy();
}
if (other.m_noRestriction)
{
return Copy();
}
WebPermission result = new WebPermission();
if (m_UnrestrictedConnect && other.m_UnrestrictedConnect)
{
result.m_UnrestrictedConnect = true;
}
else if (m_UnrestrictedConnect || other.m_UnrestrictedConnect)
{
result.m_connectList = (ArrayList) (m_UnrestrictedConnect ? other : this).m_connectList.Clone();
}
else
{
intersectList(m_connectList, other.m_connectList, result.m_connectList);
}
if (m_UnrestrictedAccept && other.m_UnrestrictedAccept)
{
result.m_UnrestrictedAccept = true;
}
else if (m_UnrestrictedAccept || other.m_UnrestrictedAccept)
{
result.m_acceptList = (ArrayList) (m_UnrestrictedAccept ? other : this).m_acceptList.Clone();
}
else
{
intersectList(m_acceptList, other.m_acceptList, result.m_acceptList);
}
// return null if resulting permission is restricted and empty
if (!result.m_UnrestrictedConnect && !result.m_UnrestrictedAccept &&
result.m_connectList.Count == 0 && result.m_acceptList.Count == 0) {
return null;
}
return result;
}