/// <summary> /// Checks if the given IP falls into the specified range /// </summary> /// <param name="target">The IP to check</param> /// <returns>True if it is inside the range, otherwise false</returns> public override bool Matches(System.Net.IPAddress target) { if (target == null) { throw new ArgumentNullException("target"); } byte[] addressBytes = target.GetAddressBytes(); bool lowerBoundary = true, upperBoundary = true; for (int i = 0; i < StartAddress.GetAddressBytes().Length&& (lowerBoundary || upperBoundary); i++) { if ((lowerBoundary && addressBytes[i] < StartAddress.GetAddressBytes()[i]) || (upperBoundary && addressBytes[i] > EndAddress.GetAddressBytes()[i])) { return(false); } lowerBoundary &= (addressBytes[i] == StartAddress.GetAddressBytes()[i]); upperBoundary &= (addressBytes[i] == EndAddress.GetAddressBytes()[i]); } return(true); }
/// <summary> /// Retrieves the value of the expression /// </summary> /// <param name="evalContext">Evaluation context</param> /// <param name="checkOnly"></param> /// <returns>Evaluated expression value</returns> public override ExpressionValue Evaluate(IExpressionEvaluationContext evalContext, bool checkOnly = false) { // --- Test for operand errors var addrValue = StartAddress.Evaluate(evalContext); if (addrValue.Type == ExpressionValueType.Error) { EvaluationError = StartAddress.EvaluationError; return(ExpressionValue.Error); } var endValue = EndAddress == null ? new ExpressionValue(1) : EndAddress.Evaluate(evalContext); if (endValue.Type == ExpressionValueType.Error) { EvaluationError = EndAddress?.EvaluationError; return(ExpressionValue.Error); } if (checkOnly) { return(ExpressionValue.NonEvaluated); } if (addrValue.Type == ExpressionValueType.ByteArray || endValue.Type == ExpressionValueType.ByteArray) { EvaluationError = "Memory address operator cannot be applied on a byte array"; return(ExpressionValue.Error); } return(new ExpressionValue(evalContext.GetMachineContext().GetMemorySection(addrValue.AsWord(), endValue.AsWord()))); }
/// <summary> /// Returns a string that represents the current <see cref="NetworkAddress" />. /// </summary> /// <returns> /// A string that represents the current <see cref="NetworkAddress" />. /// </returns> public override string ToString() { if (StartAddress.Equals(EndAddress)) { return(Address.ToString()); } return($"{Address}/{SubnetMask}"); }
public override bool Equals(object obj) { if (obj is AccessIPRange) { AccessIPRange tmp = obj as AccessIPRange; return((StartAddress.Equals(tmp.StartAddress)) && (EndAddress.Equals(tmp.EndAddress))); } return(false); }
internal void Dump() { Arch.Console.Write(StartAddress.ToUInt32()); Arch.Console.Write("~"); Arch.Console.Write(End.ToUInt32()); if (BackingFile != null) { Arch.Console.Write(" backed at "); Arch.Console.Write((long)FileOffset); Arch.Console.Write("+"); Arch.Console.Write(FileSize); } Arch.Console.Write(" access="); Arch.Console.Write(Access); Arch.Console.WriteLine(); }
/// <summary> /// Compares two IP address ranges. /// </summary> /// <returns> /// <see langword="true" /> if the two address ranges are equal; otherwise, <see langword="false" />. /// </returns> /// <param name="comparand">An <see cref="IPRange" /> instance to compare to the current instance. </param> private bool Equals(IPRange comparand) { return(StartAddress.Equals(comparand.StartAddress) && EndAddress.Equals(comparand.EndAddress)); }
/// <summary> /// On text change inside "StartAddress" textbox /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void StartAddress_TextChanged(object sender, TextChangedEventArgs e) { StartAddress.ClearValue(Border.BorderBrushProperty); }
internal DHCP_IP_RANGE ToNativeIpRange() => new DHCP_IP_RANGE(StartAddress.ToNativeAsNetwork(), EndAddress.ToNativeAsNetwork());
internal DHCP_BOOTP_IP_RANGE ToNativeBootpIpRange() => new DHCP_BOOTP_IP_RANGE(StartAddress.ToNativeAsNetwork(), EndAddress.ToNativeAsNetwork(), BootpClientsAllocated, MaxBootpAllowed);