如何为CoAP请求添加额外选项?

时间:2016-08-17 14:53:04

标签: coap californium

我知道CoAP定义了一些可以包含在发送请求中的选项,每个选项都有自己的编号。 CoAP uri请求的结构如下:

coap-URI =" coap:" " //"主持人[":" path] abempty ["?"查询]

其中包括一些选项,如:Uri-Host,Uri-Port,Uri-Path和Uri-Query,每个选项都有自己的编号,例如:Uri-Host为3,Uri Path为11。 ......我想为此CoAP请求添加更多额外选项,例如一些选项编号256,257 ...我该怎么做?

先谢谢你

1 个答案:

答案 0 :(得分:1)

我设法通过了选项号256。

CoapClient client = new CoapClient(...);
Request request = new Request(CoAP.Code.GET, CoAP.Type.NON);
OptionSet optionSet = new OptionSet();
optionSet.addOption(new Option(256, "admin:admin"));
request.setOptions(optionSet);
client.advanced(request); // or async version
client.shutdown();

资源:

@Override
public void handleGET(CoapExchange exchange) {
    OptionSet optionSet = exchange.advanced().getRequest().getOptions();
    List<Option> options = optionSet.asSortedList();
    options.stream()
            .filter(o -> o.getNumber() == 256)
            .findFirst()
            .ifPresent(o -> System.err.println(o.getNumber() + " " + o.getStringValue()));
}

输出:

256 admin:admin

但是,选项号256可能不是一般的正确选择:

RFC 7252 The Constrained Application Protocol (CoAP). 12.2. CoAP Option Numbers Registry

  

IANA对此子注册表未来添加的政策是分开的      分为三层如下。范围为0..255保留      IETF定义的选项(IETF审核或IESG批准)。该      范围256..2047保留用于公共常用选项      规格(要求规格)。 2048..64999的范围是      对于所有其他选项,包括私人或特定于供应商的选项,      进行指定专家审查,以帮助确保      选项语义是正确定义的。两者之间的选项编号      65000和65535(含)包含在实验中。他们不是      用于任何类型的供应商特定用途,不得用于      运营部署。