/// <summary> /// Returns existing NetSiteState object for specified address, first checking group membership or null /// </summary> public NetSiteState FindNetSiteStateForAddress(string address, ref Group group) { NetSiteState result; if (group==null) group = FindGroupForAddress(address); if (group!=null) if (NetState.TryGetValue(group.Key, out result)) return result; if (NetState.TryGetValue(address, out result)) return result; return null; }
internal NetSiteState(Group group) { Group = group; m_LastTouch = DateTime.UtcNow; }
/// <summary> /// Cheks whether the rule is satisfied - all listed conditions are met. May lazily resolve addresses to groups /// </summary> public virtual bool Check(NetGate.State state, ITraffic traffic, ref Group fromGroup, ref Group toGroup) { if ( !Check_FromAddrs(traffic.FromAddress) || !Check_ToAddrs(traffic.ToAddress) || !Check_Methods(traffic.Method) || !Check_Services(traffic.Service) || !Check_URLFragments(traffic.RequestURL) ) return false; if (m_FromGroups!=null) { if (fromGroup==null) fromGroup = state.FindGroupForAddress(traffic.FromAddress); if (fromGroup==null) return false; if (!Check_FromGroups(fromGroup.Name)) return false; } if (m_ToGroups!=null) { if (toGroup==null) toGroup = state.FindGroupForAddress(traffic.ToAddress); if (toGroup==null) return false; if (!Check_ToGroups(toGroup.Name)) return false; } if (m_FromExpression!=null) { var netState = state.FindNetSiteStateForAddress(traffic.FromAddress, ref fromGroup); if (!invokeEvaluator(netState, m_FromExpression)) return false; } if (m_ToExpression!=null) { var netState = state.FindNetSiteStateForAddress(traffic.ToAddress, ref toGroup); if (!invokeEvaluator(netState, m_ToExpression)) return false; } return true; }