You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dr...@apache.org on 2015/11/27 06:38:51 UTC

directory-kerby git commit: DIRKRB-476 Added enumerated type

Repository: directory-kerby
Updated Branches:
  refs/heads/master 4d4be896d -> 0cac18217


DIRKRB-476 Added enumerated type


Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo
Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/commit/0cac1821
Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/0cac1821
Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/0cac1821

Branch: refs/heads/master
Commit: 0cac18217d39697a804c00d7da49b19e5fe01af2
Parents: 4d4be89
Author: Kai Zheng <ka...@intel.com>
Authored: Fri Nov 27 13:38:32 2015 +0800
Committer: Kai Zheng <ka...@intel.com>
Committed: Fri Nov 27 13:38:32 2015 +0800

----------------------------------------------------------------------
 .../org/apache/kerby/asn1/UniversalTag.java     |  1 +
 .../org/apache/kerby/asn1/type/Asn1Any.java     | 39 +++++++++++-
 .../apache/kerby/asn1/type/Asn1Enumerated.java  | 64 ++++++++++++++++++++
 3 files changed, 101 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0cac1821/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java
index 7bc1868..e78b50e 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/UniversalTag.java
@@ -27,6 +27,7 @@ package org.apache.kerby.asn1;
 public enum UniversalTag {
     UNKNOWN             (-1),
     CHOICE              (-2),   // Only for internal using
+    ANY                 (-3),   // Only for internal using
     BER_UNDEFINED_LENGTH(0),    // Used to encode undefined length with BER
     BOOLEAN             (0x01),
     INTEGER             (0x02),

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0cac1821/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
index e73315d..b04b4e1 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Any.java
@@ -20,14 +20,39 @@
 package org.apache.kerby.asn1.type;
 
 import org.apache.kerby.asn1.LimitedByteBuffer;
+import org.apache.kerby.asn1.TagClass;
+import org.apache.kerby.asn1.UniversalTag;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
+/**
+ * Can be any valid ASN-1 ojbect, limited or not limited.
+ *
+ * WARNING!!!!
+ * Note, this is far from complete, as most of parent methods are to override.
+ */
 public class Asn1Any extends AbstractAsn1Type<Asn1Type> {
+    private Asn1Type field;
+
+    public Asn1Any() {
+        super(TagClass.UNIVERSAL, UniversalTag.ANY.getValue());
+    }
 
+    // For encoding phase.
     public Asn1Any(Asn1Type anyValue) {
-        super(anyValue.tagFlags(), anyValue.tagNo(), anyValue);
+        this();
+        setValue(anyValue);
+    }
+
+    // For decoding phase, value may be an Asn1Item, not fully decoded.
+    public void setItem(Asn1Type value) {
+        this.field = value;
+    }
+
+    // For decoding phase.
+    public Asn1Type getItem() {
+        return field;
     }
 
     @Override
@@ -40,8 +65,16 @@ public class Asn1Any extends AbstractAsn1Type<Asn1Type> {
         ((AbstractAsn1Type<?>) getValue()).encodeBody(buffer);
     }
 
-    @Override
     protected void decodeBody(LimitedByteBuffer content) throws IOException {
-        ((AbstractAsn1Type<?>) getValue()).decodeBody(content);
+        // Not used
+    }
+
+    // Available for encoding phase.
+    protected <T extends Asn1Type> T getValueAs(Class<T> t) {
+        Asn1Type value = getValue();
+        if (value == null) {
+            return null;
+        }
+        return (T) value;
     }
 }

http://git-wip-us.apache.org/repos/asf/directory-kerby/blob/0cac1821/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Enumerated.java
----------------------------------------------------------------------
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Enumerated.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Enumerated.java
new file mode 100644
index 0000000..8dc4b4a
--- /dev/null
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1Enumerated.java
@@ -0,0 +1,64 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.kerby.asn1.type;
+
+import org.apache.kerby.asn1.UniversalTag;
+
+import java.io.IOException;
+import java.math.BigInteger;
+
+/**
+ * The ASN1 enumerated type
+ */
+public abstract class Asn1Enumerated<T extends Asn1EnumType> extends Asn1Simple<T> {
+
+    /**
+     * Default constructor, generally for decoding as a container
+     */
+    public Asn1Enumerated() {
+        this(null);
+    }
+
+    /**
+     * Constructor with a value, generally for encoding of the value
+     * @param value The boolean value
+     */
+    public Asn1Enumerated(T value) {
+        super(UniversalTag.ENUMERATED, value);
+    }
+
+    protected void toBytes() {
+        BigInteger biValue = BigInteger.valueOf(getValue().getValue());
+        setBytes(biValue.toByteArray());
+    }
+
+    protected void toValue() throws IOException {
+        BigInteger biVal = new BigInteger(getBytes());
+        int iVal = biVal.intValue();
+        Asn1EnumType[] allValues = getAllEnumValues();
+        for (Asn1EnumType val : allValues) {
+            if (val.getValue() == iVal) {
+                setValue((T) val);
+            }
+        }
+    }
+
+    protected abstract Asn1EnumType[] getAllEnumValues();
+}