//   NOTE: this is a machine generated file--editing not recommended
//
// acext.h - class definitions for ASN.1 module ACEXT
//
//   This file was generated by snacc on Mon Apr 26 08:02:27 2004
//   UBC snacc by Mike Sample
//   A couple of enhancements made by IBM European Networking Center

#ifndef _acext_h_
#define _acext_h_


#include "asn-incl.h"
#include "X509Common.h"
#include "AttributeCertificateDefinitions.h"
#include "AuthenticationFramework.h"

#ifndef NO_NAMESPACE
namespace SNACC {
#endif
//------------------------------------------------------------------------------
// class declarations:

class RightSyntax;
class GroupSyntax;
class VerifyingCertChain;
class AttributeCertChain;

//------------------------------------------------------------------------------
// externs for value defs

extern const AsnOid right;
extern const AsnOid group;
extern const AsnOid id_at_group;
extern const AsnOid id_at_right;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// class definitions:

typedef enum ACEXTAnyId
{
    right_ANY_ID = 0,
    group_ANY_ID = 1
} ACEXTAnyId;


class  RightSyntax: public AsnType
{
public:
  GeneralNames		*rightAuthority;
  GeneralName		*rightName;

   RightSyntax() {Init();}
   void Init(void);
   virtual ~RightSyntax() {Clear();}
   void Clear();
   RightSyntax(const RightSyntax& that);
public:
  virtual const char * typeName(void) const { return "RightSyntax"; }
  AsnType		*Clone() const;

  RightSyntax		&operator = (const RightSyntax &that);
  AsnLen		BEncContent (AsnBuf &b) const;
  void			BDecContent (const AsnBuf &b, AsnTag tag, AsnLen elmtLen, AsnLen &bytesDecoded);

  AsnLen		BEnc (AsnBuf &b) const;
  void			BDec (const AsnBuf &b, AsnLen &bytesDecoded);
  void		Print (std::ostream &os) const;
  void		PrintXML (std::ostream &os, const char *lpszTitle=NULL) const;
};


class  GroupSyntax: public AsnType
{
public:
  GeneralNames		*groupAuthority;
  GeneralName		*groupName;

   GroupSyntax() {Init();}
   void Init(void);
   virtual ~GroupSyntax() {Clear();}
   void Clear();
   GroupSyntax(const GroupSyntax& that);
public:
  virtual const char * typeName(void) const { return "GroupSyntax"; }
  AsnType		*Clone() const;

  GroupSyntax		&operator = (const GroupSyntax &that);
  AsnLen		BEncContent (AsnBuf &b) const;
  void			BDecContent (const AsnBuf &b, AsnTag tag, AsnLen elmtLen, AsnLen &bytesDecoded);

  AsnLen		BEnc (AsnBuf &b) const;
  void			BDec (const AsnBuf &b, AsnLen &bytesDecoded);
  void		Print (std::ostream &os) const;
  void		PrintXML (std::ostream &os, const char *lpszTitle=NULL) const;
};


/* All SEQUENCE OF and SET OF types are handled by the AsnSeqOf and AsnSetOf
 * templates defined in asn-list.h.  The private member function 'typeNameStr'
 * is used by the Print() and PrintXML() to display the class name.  It's
 * private because it will eventually be replaced by enchanced META code.
 */
class VerifyingCertChain : public AsnSeqOf<Certificate>
{
public:
  virtual const char * typeName(void) const { return "VerifyingCertChain"; }
};

class  AttributeCertChain: public AsnType
{
public:
  AttributeCertificate		*attributeCert;
  VerifyingCertChain		certificateChain;

   AttributeCertChain() {Init();}
   void Init(void);
   virtual ~AttributeCertChain() {Clear();}
   void Clear();
   AttributeCertChain(const AttributeCertChain& that);
public:
  virtual const char * typeName(void) const { return "AttributeCertChain"; }
  AsnType		*Clone() const;

  AttributeCertChain		&operator = (const AttributeCertChain &that);
  AsnLen		BEncContent (AsnBuf &b) const;
  void			BDecContent (const AsnBuf &b, AsnTag tag, AsnLen elmtLen, AsnLen &bytesDecoded);

  AsnLen		BEnc (AsnBuf &b) const;
  void			BDec (const AsnBuf &b, AsnLen &bytesDecoded);
  void		Print (std::ostream &os) const;
  void		PrintXML (std::ostream &os, const char *lpszTitle=NULL) const;
};


#ifndef NO_NAMESPACE
} // namespace close
#endif

#endif /* conditional include of acext.h */
