本文整理汇总了C#中Request.GetOptions方法的典型用法代码示例。如果您正苦于以下问题:C# Request.GetOptions方法的具体用法?C# Request.GetOptions怎么用?C# Request.GetOptions使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Request
的用法示例。
在下文中一共展示了Request.GetOptions方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetRequest
/// <summary>
/// Starting from an external CoAP request, the method fills a new request
/// for the internal CoAP nodes. Translates the proxy-uri option in the uri
/// of the new request and simply copies the options and the payload from the
/// original request to the new one.
/// </summary>
/// <param name="incomingRequest">the original request</param>
/// <returns></returns>
/// <exception cref="ArgumentNullException">the <paramref name="incomingRequest"/> is null</exception>
/// <exception cref="TranslationException"></exception>
public static Request GetRequest(Request incomingRequest)
{
if (incomingRequest == null)
throw ThrowHelper.ArgumentNull("incomingRequest");
Request outgoingRequest = new Request(incomingRequest.Method, incomingRequest.Type == MessageType.CON);
// copy payload
Byte[] payload = incomingRequest.Payload;
outgoingRequest.Payload = payload;
// get the uri address from the proxy-uri option
Uri serverUri = null;
try
{
/*
* The new draft (14) only allows one proxy-uri option. Thus, this
* code segment has changed.
*/
serverUri = incomingRequest.ProxyUri;
}
catch (UriFormatException e)
{
throw new TranslationException("Cannot translate the server uri", e);
}
// copy every option from the original message
foreach (Option opt in incomingRequest.GetOptions())
{
// do not copy the proxy-uri option because it is not necessary in
// the new message
// do not copy the token option because it is a local option and
// have to be assigned by the proper layer
// do not copy the block* option because it is a local option and
// have to be assigned by the proper layer
// do not copy the uri-* options because they are already filled in
// the new message
if (opt.Type == OptionType.ProxyUri
|| opt.Type == OptionType.UriHost
|| opt.Type == OptionType.UriPath
|| opt.Type == OptionType.UriPort
|| opt.Type == OptionType.UriQuery
|| opt.Type == OptionType.Block1
|| opt.Type == OptionType.Block2)
continue;
outgoingRequest.AddOption(opt);
}
if (serverUri != null)
outgoingRequest.URI = serverUri;
return outgoingRequest;
}
示例2: TestMessage
public void TestMessage()
#endif
{
Message msg = new Request(Method.GET, true);
msg.ID = 12345;
msg.Payload = System.Text.Encoding.UTF8.GetBytes("payload");
Byte[] data = Spec.Encode(msg);
Message convMsg = Spec.Decode(data);
Assert.AreEqual(msg.Code, convMsg.Code);
Assert.AreEqual(msg.Type, convMsg.Type);
Assert.AreEqual(msg.ID, convMsg.ID);
Assert.AreEqual(msg.GetOptions().Count(), convMsg.GetOptions().Count());
Assert.IsTrue(msg.Payload.SequenceEqual(convMsg.Payload));
}
示例3: GetNextRequestBlock
private Request GetNextRequestBlock(Request request, BlockwiseStatus status)
{
Int32 num = status.CurrentNUM;
Int32 szx = status.CurrentSZX;
Request block = new Request(request.Method);
block.SetOptions(request.GetOptions());
block.Destination = request.Destination;
block.Token = request.Token;
block.Type = MessageType.CON;
Int32 currentSize = 1 << (4 + szx);
Int32 from = num * currentSize;
Int32 to = Math.Min((num + 1) * currentSize, request.PayloadSize);
Int32 length = to - from;
Byte[] blockPayload = new Byte[length];
Array.Copy(request.Payload, from, blockPayload, 0, length);
block.Payload = blockPayload;
Boolean m = to < request.PayloadSize;
block.AddOption(new BlockOption(OptionType.Block1, num, szx, m));
status.Complete = !m;
return block;
}
示例4: TestMessageWithOptions
public void TestMessageWithOptions()
#endif
{
Message msg = new Request(Method.GET, true);
msg.ID = 12345;
msg.Payload = System.Text.Encoding.UTF8.GetBytes("payload");
msg.AddOption(Option.Create(OptionType.ContentType, "text/plain"));
msg.AddOption(Option.Create(OptionType.MaxAge, 30));
Byte[] data = Spec.Encode(msg);
Message convMsg = Spec.Decode(data);
Assert.AreEqual(msg.Code, convMsg.Code);
Assert.AreEqual(msg.Type, convMsg.Type);
Assert.AreEqual(msg.ID, convMsg.ID);
Assert.AreEqual(msg.GetOptions().Count(), convMsg.GetOptions().Count());
Assert.IsTrue(msg.GetOptions().SequenceEqual(convMsg.GetOptions()));
Assert.IsTrue(msg.Payload.SequenceEqual(convMsg.Payload));
}
示例5: TestRequestParsing
public void TestRequestParsing()
#endif
{
Request request = new Request(Method.POST, false);
request.ID = 7;
request.Token = new Byte[] { 11, 82, 165, 77, 3 };
request.AddIfMatch(new Byte[] { 34, 239 })
.AddIfMatch(new Byte[] { 88, 12, 254, 157, 5 });
request.ContentType = 40;
request.Accept = 40;
Byte[] bytes = Spec.NewMessageEncoder().Encode(request);
IMessageDecoder decoder = Spec.NewMessageDecoder(bytes);
Assert.IsTrue(decoder.IsRequest);
Request result = decoder.DecodeRequest();
Assert.AreEqual(request.ID, result.ID);
Assert.IsTrue(request.Token.SequenceEqual(result.Token));
Assert.IsTrue(request.GetOptions().SequenceEqual(result.GetOptions()));
}
示例6: TestMessageWithExtendedOption
public void TestMessageWithExtendedOption()
#endif
{
Message msg = new Request(Method.GET, true);
msg.ID = 12345;
msg.AddOption(Option.Create((OptionType)12, "a"));
msg.AddOption(Option.Create((OptionType)197, "extend option"));
msg.Payload = System.Text.Encoding.UTF8.GetBytes("payload");
Byte[] data = Spec.Encode(msg);
Message convMsg = Spec.Decode(data);
Assert.AreEqual(msg.Code, convMsg.Code);
Assert.AreEqual(msg.Type, convMsg.Type);
Assert.AreEqual(msg.ID, convMsg.ID);
Assert.AreEqual(msg.GetOptions().Count(), convMsg.GetOptions().Count());
Assert.IsTrue(msg.GetOptions().SequenceEqual(convMsg.GetOptions()));
Assert.IsTrue(msg.Payload.SequenceEqual(convMsg.Payload));
Option extendOpt = convMsg.GetFirstOption((OptionType)197);
Assert.IsNotNull(extendOpt);
Assert.AreEqual(extendOpt.StringValue, "extend option");
}