Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

OctetString.cc

00001 /*
00002  * Copyright 2003 Michael A. Marsh, Cornell University. All rights reserved.
00003  * This software is released under the modified BSD license.
00004  * See the file LICENSE in the top-level directory for details.
00005  */
00006 //
00007 // $Id: OctetString.cc,v 1.3 2004/05/19 15:56:38 mmarsh Exp $
00008 //
00009 // $Log: OctetString.cc,v $
00010 // Revision 1.3  2004/05/19 15:56:38  mmarsh
00011 // Added copyright and license statements.
00012 //
00013 // Revision 1.2  2003/11/04 22:31:46  mmarsh
00014 // *** empty log message ***
00015 //
00016 //
00017 
00018 #include "OctetString.h"
00019 
00020 using namespace CODEX_ASN1;
00021 
00022 OctetString::OctetString() :
00023    Base( false ),
00024    m_asn1( 0 )
00025 {
00026 }
00027 
00028 OctetString::OctetString( const ustring& value ) :
00029    Base( true ),
00030    m_value( value ),
00031    m_asn1( 0 )
00032 {
00033    m_asn1 = ASN1_OCTET_STRING_new();
00034    ASN1_OCTET_STRING_set( m_asn1,
00035                           (unsigned char*)m_value.data(),
00036                           m_value.length() );
00037 }
00038 
00039 OctetString::OctetString( const ASN1_OCTET_STRING* asn1 ) :
00040    Base( true ),
00041    m_asn1( 0 )
00042 {
00043    m_asn1 = M_ASN1_OCTET_STRING_dup( asn1 );
00044    m_value.assign( m_asn1->data, m_asn1->length );
00045 }
00046 
00047 OctetString::OctetString( const OctetString& aOS ) :
00048    Base( aOS.m_initialized ),
00049    m_value( aOS.m_value ),
00050    m_asn1( 0 )
00051 {
00052    if ( 0 != aOS.m_asn1 )
00053    {
00054       m_asn1 = M_ASN1_OCTET_STRING_dup( aOS.m_asn1 );
00055    }
00056 }
00057 
00058 OctetString::~OctetString()
00059 {
00060    ASN1_OCTET_STRING_free( m_asn1 );
00061 }
00062 
00063 void
00064 OctetString::operator=( const OctetString& aOS )
00065 {
00066    m_initialized = aOS.m_initialized;
00067    m_value = aOS.m_value;
00068    if ( 0 != m_asn1 )
00069    {
00070       M_ASN1_OCTET_STRING_free( m_asn1 );
00071       m_asn1 = 0;
00072    }
00073    if ( 0 != aOS.m_asn1 )
00074    {
00075       m_asn1 = M_ASN1_OCTET_STRING_dup( aOS.m_asn1 );
00076    }
00077 }
00078 
00079 int
00080 OctetString::marshal( unsigned char ** pp ) const
00081 {
00082    return i2d_ASN1_OCTET_STRING( m_asn1, pp );
00083 }
00084 
00085 void*
00086 OctetString::unmarshal( void* bogus, unsigned char** pp, long length )
00087 {
00088    if ( m_initialized )
00089    {
00090       return NULL;
00091    }
00092    if ( 0 == d2i_ASN1_OCTET_STRING( &m_asn1, (unsigned char**)pp, length ) )
00093    {
00094       return NULL;
00095    }
00096    m_value.assign( m_asn1->data, m_asn1->length );
00097    m_initialized = true;
00098    return this;
00099 }

Generated on Fri May 6 17:40:51 2005 for COrnell Data EXchange (CODEX) by  doxygen 1.4.1