/*
* Part of the CCNx Java Library.
*
* Copyright (C) 2010-2012 Palo Alto Research Center, Inc.
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details. You should have received
* a copy of the GNU Lesser General Public License along with this library;
* if not, write to the Free Software Foundation, Inc., 51 Franklin Street,
* Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.ccnx.ccn.impl.encoding;
/**
* In Java, you can't control the value an enum is assigned to, so we map
* it into an interior value. Use the XML name as the name of the enum, so
* can map easily to strings.
*
* Move from enum to final ints, in order to reduce overhead.
*
* This is essentially an XMLDictionary, but it was created as a static class
* so it cannot implement XMLDictionary. Therefore, it is wrapped by CCNProtocolDictionary.
*/
public class CCNProtocolDTags {
/**
* Note if you add one of these, add it to the reverse string map as well.
* Emphasize getting the work done at compile time over trying to make something
* flexible and developer error-proof.
*/
public static final int Any = 13;
public static final int Name = 14;
public static final int Component = 15;
public static final int Certificate = 16;
public static final int Collection = 17;
public static final int CompleteName = 18;
public static final int Content = 19;
public static final int SignedInfo = 20;
public static final int ContentDigest = 21;
public static final int ContentHash = 22;
public static final int Count = 24;
public static final int Header = 25;
public static final int Interest = 26; /* 20090915 */
public static final int Key = 27;
public static final int KeyLocator = 28;
public static final int KeyName = 29;
public static final int Length = 30;
public static final int Link = 31;
public static final int LinkAuthenticator = 32;
public static final int NameComponentCount = 33; /* DeprecatedInInterest */
public static final int ExtOpt = 34;
public static final int RootDigest = 36;
public static final int Signature = 37;
public static final int Start = 38;
public static final int Timestamp = 39;
public static final int Type = 40;
public static final int Nonce = 41;
public static final int Scope = 42;
public static final int Exclude = 43;
public static final int Bloom = 44;
public static final int BloomSeed = 45;
public static final int AnswerOriginKind = 47;
public static final int InterestLifetime = 48;
public static final int Witness = 53;
public static final int SignatureBits = 54;
public static final int DigestAlgorithm = 55;
public static final int BlockSize = 56;
public static final int FreshnessSeconds = 58;
public static final int FinalBlockID = 59;
public static final int PublisherPublicKeyDigest = 60;
public static final int PublisherCertificateDigest = 61;
public static final int PublisherIssuerKeyDigest = 62;
public static final int PublisherIssuerCertificateDigest = 63;
public static final int ContentObject = 64; /* 20090915 */
public static final int WrappedKey = 65;
public static final int WrappingKeyIdentifier = 66;
public static final int WrapAlgorithm = 67;
public static final int KeyAlgorithm = 68;
public static final int Label = 69;
public static final int EncryptedKey = 70;
public static final int EncryptedNonceKey = 71;
public static final int WrappingKeyName = 72;
public static final int Action = 73;
public static final int FaceID = 74;
public static final int IPProto = 75;
public static final int Host = 76;
public static final int Port = 77;
public static final int MulticastInterface = 78;
public static final int ForwardingFlags = 79;
public static final int FaceInstance = 80;
public static final int ForwardingEntry = 81;
public static final int MulticastTTL = 82;
public static final int MinSuffixComponents = 83;
public static final int MaxSuffixComponents = 84;
public static final int ChildSelector = 85;
public static final int RepositoryInfo = 86;
public static final int Version = 87;
public static final int RepositoryVersion = 88;
public static final int GlobalPrefix = 89;
public static final int LocalName = 90;
public static final int Policy = 91;
public static final int Namespace = 92;
public static final int GlobalPrefixName = 93;
public static final int PolicyVersion = 94;
public static final int KeyValueSet = 95;
public static final int KeyValuePair = 96;
public static final int IntegerValue = 97;
public static final int DecimalValue = 98;
public static final int StringValue = 99;
public static final int BinaryValue = 100;
public static final int NameValue = 101;
public static final int Entry = 102;
public static final int ACL = 103;
public static final int ParameterizedName = 104;
public static final int Prefix = 105;
public static final int Suffix = 106;
public static final int Root = 107;
public static final int ProfileName = 108;
public static final int Parameters = 109;
public static final int InfoString = 110;
// 111 unallocated
public static final int StatusResponse = 112;
public static final int StatusCode = 113;
public static final int StatusText = 114;
// Sync protocol
public static final int SyncNode = 115;
public static final int SyncNodeKind = 116;
public static final int SyncNodeElement = 117;
public static final int SyncVersion = 118;
public static final int SyncNodeElements = 119;
public static final int SyncContentHash = 120;
public static final int SyncLeafCount = 121;
public static final int SyncTreeDepth = 122;
public static final int SyncByteCount = 123;
public static final int ConfigSlice = 124;
public static final int ConfigSliceList = 125;
public static final int ConfigSliceOp = 126;
// Remember to keep in sync with schema/tagnames.csvsdict
public static final int CCNProtocolDataUnit = 17702112;
public static final String CCNPROTOCOL_DATA_UNIT = "CCNProtocolDataUnit";
protected static final String [] _tagToStringMap = new String[]{
null, null, null, null, null, null, null, null, null, null, null,
null, null,
"Any", "Name", "Component", "Certificate", "Collection", "CompleteName",
"Content", "SignedInfo", "ContentDigest", "ContentHash", null, "Count", "Header",
"Interest", "Key", "KeyLocator", "KeyName", "Length", "Link", "LinkAuthenticator",
"NameComponentCount", "ExtOpt", null, "RootDigest", "Signature", "Start", "Timestamp", "Type",
"Nonce", "Scope", "Exclude", "Bloom", "BloomSeed", null, "AnswerOriginKind",
"InterestLifetime", null, null, null, null, "Witness", "SignatureBits", "DigestAlgorithm", "BlockSize",
null, "FreshnessSeconds", "FinalBlockID", "PublisherPublicKeyDigest", "PublisherCertificateDigest",
"PublisherIssuerKeyDigest", "PublisherIssuerCertificateDigest", "ContentObject",
"WrappedKey", "WrappingKeyIdentifier", "WrapAlgorithm", "KeyAlgorithm", "Label",
"EncryptedKey", "EncryptedNonceKey", "WrappingKeyName", "Action", "FaceID", "IPProto",
"Host", "Port", "MulticastInterface", "ForwardingFlags", "FaceInstance",
"ForwardingEntry", "MulticastTTL", "MinSuffixComponents", "MaxSuffixComponents", "ChildSelector",
"RepositoryInfo", "Version", "RepositoryVersion", "GlobalPrefix", "LocalName",
"Policy", "Namespace", "GlobalPrefixName", "PolicyVersion", "KeyValueSet", "KeyValuePair",
"IntegerValue", "DecimalValue", "StringValue", "BinaryValue", "NameValue", "Entry",
"ACL", "ParameterizedName", "Prefix", "Suffix", "Root", "ProfileName", "Parameters",
"InfoString", null,
"StatusResponse", "StatusCode", "StatusText", "SyncNode", "SyncNodeKind", "SyncNodeElement",
"SyncVersion", "SyncNodeElements", "SyncContentHash", "SyncLeafCount", "SyncTreeDepth", "SyncByteCount",
"ConfigSlice", "ConfigSliceList", "ConfigSliceOp" };
protected static final int TAG_MAP_LENGTH = _tagToStringMap.length;
/**
* This is the slow search -- find a tag based on an index. Only
* used in cases where we need to print based on a binary tag value;
* this is only used in text encoding of usually binary objects... For
* now, as it's rare, do a scan, rather than taking the up front hit
* to build a hash table.
* @param tagVal
* @return
*/
public static String tagToString(long tagVal) {
if ((tagVal >= 0) && (tagVal < TAG_MAP_LENGTH)) {
return _tagToStringMap[(int)tagVal];
} else if (tagVal == CCNProtocolDataUnit) {
return CCNPROTOCOL_DATA_UNIT;
}
return null;
}
public static Long stringToTag(String tagName) {
// the slow way, but right now we don't care.... want a static lookup for the forward direction
for (int i=0; i < TAG_MAP_LENGTH; ++i) {
if ((null != _tagToStringMap[i]) && (_tagToStringMap[i].equals(tagName))) {
return (long)i;
}
}
if (CCNPROTOCOL_DATA_UNIT.equals(tagName)) {
return (long)CCNProtocolDataUnit;
}
return null;
}
}