00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
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:
00110 return NULL;
00111 }