001package org.apache.commons.ssl.org.bouncycastle.asn1.cmp; 002 003import java.util.Enumeration; 004 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 012 013public class ErrorMsgContent 014 extends ASN1Object 015{ 016 private PKIStatusInfo pkiStatusInfo; 017 private ASN1Integer errorCode; 018 private PKIFreeText errorDetails; 019 020 private ErrorMsgContent(ASN1Sequence seq) 021 { 022 Enumeration en = seq.getObjects(); 023 024 pkiStatusInfo = PKIStatusInfo.getInstance(en.nextElement()); 025 026 while (en.hasMoreElements()) 027 { 028 Object o = en.nextElement(); 029 030 if (o instanceof ASN1Integer) 031 { 032 errorCode = ASN1Integer.getInstance(o); 033 } 034 else 035 { 036 errorDetails = PKIFreeText.getInstance(o); 037 } 038 } 039 } 040 041 public static ErrorMsgContent getInstance(Object o) 042 { 043 if (o instanceof ErrorMsgContent) 044 { 045 return (ErrorMsgContent)o; 046 } 047 048 if (o != null) 049 { 050 return new ErrorMsgContent(ASN1Sequence.getInstance(o)); 051 } 052 053 return null; 054 } 055 056 public ErrorMsgContent(PKIStatusInfo pkiStatusInfo) 057 { 058 this(pkiStatusInfo, null, null); 059 } 060 061 public ErrorMsgContent( 062 PKIStatusInfo pkiStatusInfo, 063 ASN1Integer errorCode, 064 PKIFreeText errorDetails) 065 { 066 if (pkiStatusInfo == null) 067 { 068 throw new IllegalArgumentException("'pkiStatusInfo' cannot be null"); 069 } 070 071 this.pkiStatusInfo = pkiStatusInfo; 072 this.errorCode = errorCode; 073 this.errorDetails = errorDetails; 074 } 075 076 public PKIStatusInfo getPKIStatusInfo() 077 { 078 return pkiStatusInfo; 079 } 080 081 public ASN1Integer getErrorCode() 082 { 083 return errorCode; 084 } 085 086 public PKIFreeText getErrorDetails() 087 { 088 return errorDetails; 089 } 090 091 /** 092 * <pre> 093 * ErrorMsgContent ::= SEQUENCE { 094 * pKIStatusInfo PKIStatusInfo, 095 * errorCode INTEGER OPTIONAL, 096 * -- implementation-specific error codes 097 * errorDetails PKIFreeText OPTIONAL 098 * -- implementation-specific error details 099 * } 100 * </pre> 101 * @return a basic ASN.1 object representation. 102 */ 103 public ASN1Primitive toASN1Primitive() 104 { 105 ASN1EncodableVector v = new ASN1EncodableVector(); 106 107 v.add(pkiStatusInfo); 108 addOptional(v, errorCode); 109 addOptional(v, errorDetails); 110 111 return new DERSequence(v); 112 } 113 114 private void addOptional(ASN1EncodableVector v, ASN1Encodable obj) 115 { 116 if (obj != null) 117 { 118 v.add(obj); 119 } 120 } 121}