public CoapBlockWiseContext(CoapClient client, CoapMessage request, CoapMessage response = null) { Client = client ?? throw new ArgumentNullException(nameof(client)); Request = request?.Clone(true) ?? throw new ArgumentNullException(nameof(request)); Response = response?.Clone(true); }
/// <summary> /// Attempts to read the entire body of the block-wise message. Using the <paramref name="originalRequest"/> to request blocks. /// </summary> /// <param name="message">A message containing a <see cref="Block2"/> option.</param> /// <param name="client"></param> /// <param name="originalRequest">The orignal request which the block-wise response was for.</param> /// <returns>The completed body for the block-wise messages.</returns> public static byte[] GetCompletedBlockWisePayload(this CoapMessage message, CoapClient client, CoapMessage originalRequest) { var block2 = message.Options.Get <Options.Block2>() ?? throw new ArgumentException($"{nameof(CoapMessage)} does not contain a {nameof(Options.Block2)} option", nameof(message)); if (originalRequest == null) { throw new ArgumentNullException("Please provide original requesting message", nameof(originalRequest)); } if (block2.BlockNumber != 0) { throw new CoapBlockException($"Can not get completed payload starting with block {block2.BlockNumber}. Please start from 0"); } var memoryStream = new MemoryStream(); using (var reader = new CoapBlockStreamReader(client, message, originalRequest)) reader.CopyTo(memoryStream); return(memoryStream.ToArray()); }
public static CoapBlockWiseContext CreateBlockWiseContext(this CoapMessage message, CoapClient client, CoapMessage response = null) { if (!message.Code.IsRequest()) { throw new ArgumentException($"A block-Wise context requires a base request message. Message code {message.Code} is invalid.", nameof(message)); } if (response != null && response.Code.IsRequest()) { throw new ArgumentException($"A block-Wise context response can not be set from a message code {message.Code}.", nameof(response)); } return(new CoapBlockWiseContext(client, message, response)); }