/// <summary> /// Sends this <see cref="ISnmpMessage"/> and handles the response from agent. /// </summary> /// <param name="request">The <see cref="ISnmpMessage"/>.</param> /// <param name="timeout">The time-out value, in milliseconds. The default value is 0, which indicates an infinite time-out period. Specifying -1 also indicates an infinite time-out period.</param> /// <param name="receiver">Port number.</param> /// <param name="registry">User registry.</param> /// <returns></returns> public static ISnmpMessage GetResponse(this ISnmpMessage request, int timeout, IPEndPoint receiver, UserRegistry registry) { // TODO: make more usage of UserRegistry. if (request == null) { throw new ArgumentNullException("request"); } if (receiver == null) { throw new ArgumentNullException("receiver"); } var code = request.TypeCode(); if (code == SnmpType.TrapV1Pdu || code == SnmpType.TrapV2Pdu || code == SnmpType.ReportPdu) { throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "not a request message: {0}", code)); } using (var socket = receiver.GetSocket()) { return(request.GetResponse(timeout, receiver, registry, socket)); } }
/// <summary> /// Sends this <see cref="ISnmpMessage"/> and handles the response from agent. /// </summary> /// <param name="request">The <see cref="ISnmpMessage"/>.</param> /// <param name="receiver">Port number.</param> /// <param name="registry">User registry.</param> /// <returns></returns> public static async Task <ISnmpMessage> GetResponseAsync(this ISnmpMessage request, IPEndPoint receiver, UserRegistry registry) { // TODO: make more usage of UserRegistry. if (request == null) { throw new ArgumentNullException(nameof(request)); } if (receiver == null) { throw new ArgumentNullException(nameof(receiver)); } var code = request.TypeCode(); if (code == SnmpType.TrapV1Pdu || code == SnmpType.TrapV2Pdu || code == SnmpType.ReportPdu) { throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "not a request message: {0}", code)); } using (var socket = receiver.GetSocket()) { return(await request.GetResponseAsync(receiver, registry, socket).ConfigureAwait(false)); } }
/// <summary> /// Sends this <see cref="ISnmpMessage"/> and handles the response from agent. /// </summary> /// <param name="request">The <see cref="ISnmpMessage"/>.</param> /// <param name="timeout">The time-out value, in milliseconds. The default value is 0, which indicates an infinite time-out period. Specifying -1 also indicates an infinite time-out period.</param> /// <param name="receiver">Port number.</param> /// <returns></returns> public static ISnmpMessage GetResponse(this ISnmpMessage request, int timeout, IPEndPoint receiver) { if (request == null) { throw new ArgumentNullException("request"); } if (receiver == null) { throw new ArgumentNullException("receiver"); } var code = request.TypeCode(); if (code == SnmpType.TrapV1Pdu || code == SnmpType.TrapV2Pdu || code == SnmpType.ReportPdu) { throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "not a request message: {0}", code)); } using (var socket = receiver.GetSocket()) { #if SSHARP socket.Connect(receiver); #endif return(request.GetResponse(timeout, receiver, socket)); } }
public async Task <ReportMessage> GetResponseAsync(IPEndPoint receiver, CancellationToken token) { if (receiver == null) { throw new ArgumentNullException(nameof(receiver)); } using var socket = receiver.GetSocket(); return((ReportMessage)await _discovery.GetResponseAsync(receiver, Empty, socket, token).ConfigureAwait(false)); }
/// <summary> /// Gets the response. /// </summary> /// <param name="timeout">The time-out value, in milliseconds. The default value is 0, which indicates an infinite time-out period. Specifying -1 also indicates an infinite time-out period.</param> /// <param name="receiver">The receiver.</param> /// <returns></returns> public ReportMessage GetResponse(int timeout, IPEndPoint receiver) { if (receiver == null) { throw new ArgumentNullException("receiver"); } using (var socket = receiver.GetSocket()) { return((ReportMessage)_discovery.GetResponse(timeout, receiver, Empty, socket)); } }
/// <summary> /// Gets the response. /// </summary> /// <param name="receiver">The receiver.</param> /// <returns></returns> public async Task <ReportMessage> GetResponseAsync(IPEndPoint receiver) { if (receiver == null) { throw new ArgumentNullException("receiver"); } using (var socket = receiver.GetSocket()) { return((ReportMessage)await _discovery.GetResponseAsync(receiver, Empty, socket).ConfigureAwait(false)); } }
/// <summary> /// Sends this <see cref="ISnmpMessage"/> and handles the response from agent. /// </summary> /// <param name="request">The <see cref="ISnmpMessage"/>.</param> /// <param name="timeout">The time-out value, in milliseconds. The default value is 0, which indicates an infinite time-out period. Specifying -1 also indicates an infinite time-out period.</param> /// <param name="receiver">Port number.</param> /// <returns></returns> public static ISnmpMessage GetResponse(this ISnmpMessage request, int timeout, IPEndPoint receiver) { if (request == null) { throw new ArgumentNullException("request"); } if (receiver == null) { throw new ArgumentNullException("receiver"); } var code = request.TypeCode(); if (code == SnmpType.TrapV1Pdu || code == SnmpType.TrapV2Pdu || code == SnmpType.ReportPdu) { throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "not a request message: {0}", code)); } int nRetry = 0; while (true) { using (var socket = receiver.GetSocket()) { try { return(request.GetResponse(timeout, receiver, socket)); } catch (TimeoutException tx) { nRetry++; if (nRetry > 3) { throw tx; } } catch (Exception e) { throw e; } } } }
public static async Task <ISnmpMessage> GetResponseAsync(this ISnmpMessage request, IPEndPoint receiver, CancellationToken token) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (receiver == null) { throw new ArgumentNullException(nameof(receiver)); } var code = request.TypeCode(); if (code == SnmpType.TrapV1Pdu || code == SnmpType.TrapV2Pdu || code == SnmpType.ReportPdu) { throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "not a request message: {0}", code)); } using var socket = receiver.GetSocket(); return(await request.GetResponseAsync(receiver, socket, token).ConfigureAwait(false)); }
/// <summary> /// Sends this <see cref="ISnmpMessage"/> and handles the response from agent. /// </summary> /// <param name="request">The <see cref="ISnmpMessage"/>.</param> /// <param name="receiver">Port number.</param> /// <returns></returns> public static async Task <ISnmpMessage> GetResponseAsync(this ISnmpMessage request, IPEndPoint receiver, CancellationToken cancellationToken = default(CancellationToken)) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (receiver == null) { throw new ArgumentNullException(nameof(receiver)); } var code = request.TypeCode(); if (code == SnmpType.TrapV1Pdu || code == SnmpType.TrapV2Pdu || code == SnmpType.ReportPdu) { throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "not a request message: {0}", code)); } var tcs = new TaskCompletionSource <bool>(); using (var cancel = cancellationToken.Register(() => tcs.SetCanceled())) using (var socket = receiver.GetSocket()) { var response = request.GetResponseAsync(receiver, socket); var result = await Task.WhenAny(tcs.Task, response).ConfigureAwait(false); if (result == tcs.Task) { // This should always be true.... // Otherwise throw your own. cancellationToken.ThrowIfCancellationRequested(); } return(await response.ConfigureAwait(false)); } }