blob: f52c35a3409d9e88550ffdcaa85c7bf23b2e3c62 [file] [log] [blame]
Andrew Brown2f1fdbf2015-01-21 10:52:29 -08001/*
2 * File name: ControlParametersDecoder.java
3 *
4 * Purpose: See http://redmine.named-data.net/projects/nfd/wiki/ControlCommand
5 *
6 * © Copyright Intel Corporation. All rights reserved.
7 * Intel Corporation, 2200 Mission College Boulevard,
8 * Santa Clara, CA 95052-8119, USA
9 */
10package com.intel.jndn.management;
11
12import java.nio.ByteBuffer;
13import java.util.ArrayList;
14import net.named_data.jndn.ControlParameters;
15import net.named_data.jndn.encoding.EncodingException;
16import net.named_data.jndn.encoding.TlvWireFormat;
17import net.named_data.jndn.encoding.tlv.Tlv;
18import net.named_data.jndn.encoding.tlv.TlvDecoder;
19import net.named_data.jndn.util.Blob;
20
21/**
22 *
23 * @author Andrew Brown <andrew.brown@intel.com>
24 */
25public class ControlResponseDecoder extends TlvWireFormat {
26
27 /**
28 * Use TLV codes from jndn.encoding.tlv.Tlv.java See
29 * http://redmine.named-data.net/projects/nfd/wiki/ControlCommand
30 */
31 public final static int ControlResponse = 101;
32 public final static int ControlResponse_StatusCode = 102;
33 public final static int ControlResponse_StatusText = 103;
34
35 /**
36 * Decode a ControlResponse TLV object; see
37 * http://redmine.named-data.net/projects/nfd/wiki/ControlCommand
38 *
39 * @param controlResponse
40 * @param input
41 * @throws EncodingException
42 */
43 public void decodeControlResponse(ControlResponse controlResponse, ByteBuffer input) throws EncodingException {
44 TlvDecoder decoder = new TlvDecoder(input);
45 int endOffset = decoder.readNestedTlvsStart(ControlResponse);
46
47 // parse
48 controlResponse.StatusCode = (int) decoder.readNonNegativeIntegerTlv(ControlResponse_StatusCode);
49 Blob statusText = new Blob(decoder.readBlobTlv(ControlResponse_StatusText), true); // copy because buffer is immutable
50 controlResponse.StatusText = statusText.toString();
51 controlResponse.Body = new ArrayList<>();
52 while (decoder.peekType(Tlv.ControlParameters_ControlParameters, endOffset)) {
53 ByteBuffer copyInput = input.duplicate();
54 copyInput.position(decoder.getOffset());
55 int internalEndOffset = decoder.readNestedTlvsStart(Tlv.ControlParameters_ControlParameters);
56 // decode
57 ControlParameters copyParameters = new ControlParameters();
58 copyParameters.wireDecode(copyInput);
59 controlResponse.Body.add(copyParameters);
60 decoder.seek(internalEndOffset);
61 //
62 decoder.finishNestedTlvs(internalEndOffset);
63 }
64
65 // etc...
66 decoder.finishNestedTlvs(endOffset);
67 }
68}