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

CreateKeyMsg.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: CreateKeyMsg.cc,v 1.3 2004/05/19 15:56:48 mmarsh Exp $
00008 //
00009 // $Log: CreateKeyMsg.cc,v $
00010 // Revision 1.3  2004/05/19 15:56:48  mmarsh
00011 // *** empty log message ***
00012 //
00013 // Revision 1.2  2003/11/04 22:31:48  mmarsh
00014 // *** empty log message ***
00015 //
00016 //
00017 
00018 #include "Message.h"
00019 
00020 using namespace CODEX_Client;
00021 using namespace CODEX_ASN1;
00022 using namespace CODEX_Ciphers;
00023 
00024 CreateKeyMsg::CreateKeyMsg() :
00025    Message( false )
00026 {
00027 }
00028 
00029 CreateKeyMsg::CreateKeyMsg( const OctetString& name,
00030                             const Certificate& owner,
00031                             const Policy& readP,
00032                             const Policy& writeP ) :
00033    Message( true ),
00034    m_name( name ),
00035    m_owner( owner ),
00036    m_readP( readP ),
00037    m_writeP( writeP )
00038 {
00039 }
00040 
00041 CreateKeyMsg::CreateKeyMsg( const CreateKeyMsg& aCKM ) :
00042    Message( aCKM.m_initialized ),
00043    m_name( aCKM.m_name ),
00044    m_owner( aCKM.m_owner ),
00045    m_readP( aCKM.m_readP ),
00046    m_writeP( aCKM.m_writeP )
00047 {
00048 }
00049 
00050 void
00051 CreateKeyMsg::operator=( const CreateKeyMsg& aCKM )
00052 {
00053    m_initialized = aCKM.m_initialized;
00054    m_name        = aCKM.m_name;
00055    m_owner       = aCKM.m_owner;
00056    m_readP       = aCKM.m_readP;
00057    m_writeP      = aCKM.m_writeP;
00058 }
00059 
00060 int
00061 CreateKeyMsg::marshal( unsigned char ** pp ) const
00062 {
00063    int r=0;
00064    int ret=0;
00065    unsigned char * p;
00066 
00067    ret += m_name.marshal(0);
00068    ret += m_owner.marshal(0);
00069    ret += m_readP.marshal(0);
00070    ret += m_writeP.marshal(0);
00071    M_ASN1_I2D_seq_total();
00072    m_name.marshal(&p);
00073    m_owner.marshal(&p);
00074    m_readP.marshal(&p);
00075    m_writeP.marshal(&p);
00076    M_ASN1_I2D_finish();
00077 }
00078 
00079 void*
00080 CreateKeyMsg::unmarshal( void* bogus, unsigned char ** pp, long length )
00081 {
00082    if ( m_initialized )
00083    {
00084       return NULL;
00085    }
00086    if ( (NULL == pp) || (NULL == *pp) )
00087    {
00088       return NULL;
00089    }
00090    ASN1_CTX c;
00091    c.pp = pp;
00092    c.q = *pp;
00093    c.error = ERR_R_NESTED_ASN1_ERROR;
00094    int i;
00095 
00096    M_ASN1_D2I_Init();
00097    M_ASN1_D2I_start_sequence();
00098    M_ASN1_D2I_get(i, m_name.unmarshal);
00099    M_ASN1_D2I_get(i, m_owner.unmarshal);
00100    M_ASN1_D2I_get(i, m_readP.unmarshal);
00101    M_ASN1_D2I_get(i, m_writeP.unmarshal);
00102    if ( !asn1_Finish(&c) )
00103    {
00104       return NULL;
00105    }
00106    *pp=c.p;
00107    m_initialized = true;
00108    return this;
00109   err: // needed by ASN.1 macros
00110    return NULL;
00111 }

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