Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   Related Pages  

ClientMessageParser.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: ClientMessageParser.cc,v 1.3 2004/05/19 15:56:51 mmarsh Exp $
00008 //
00009 // $Log: ClientMessageParser.cc,v $
00010 // Revision 1.3  2004/05/19 15:56:51  mmarsh
00011 // *** empty log message ***
00012 //
00013 // Revision 1.2  2003/11/04 22:31:49  mmarsh
00014 // *** empty log message ***
00015 //
00016 //
00017 
00018 #include "ClientMessageParser.h"
00019 #include "RoutedClientMessageEvent.h"
00020 #include "RoutedClientMessageHandler.h"
00021 
00022 #include "timing.h"
00023 
00024 using namespace CODEX_KeyService;
00025 
00026 void
00027 ClientMessageParser::operator()( unsigned char* server,
00028                                  unsigned char* mID,
00029                                  CODEX_Quorum::Message* m )
00030 {
00031    if ( NULL == m )
00032    {
00033       if ( 0 != server ) delete [] server;
00034       if ( 0 != mID ) delete [] mID;
00035       return;
00036    }
00037 #ifdef TIMING
00038    ActiveTimer.start();
00039 #endif
00040    const unsigned char* buff = m->buffer();
00041    long buffLength = m->length();
00042    unsigned char* pBuff = (unsigned char*) (buff+1);
00043    ClientMessageEventBase* evt = NULL;
00044    switch( buff[0] )
00045    {
00046       using namespace CODEX_Client;
00047       case (CODEX_Client::kCreateKeyMsg |
00048             CODEX_Client::SignatureMask) :
00049          evt = new RoutedClientMessageEvent< SignedCreateKeyMsg >(
00050             this, m_destination, server, mID );
00051          break;
00052       case (CODEX_Client::kWriteKeyMsg |
00053             CODEX_Client::SignatureMask) :
00054          evt = new RoutedClientMessageEvent< SignedWriteKeyMsg >(
00055             this, m_destination, server, mID );
00056          break;
00057       case (CODEX_Client::kReadKeyMsg |
00058             CODEX_Client::SignatureMask) :
00059          evt = new RoutedClientMessageEvent< LabeledReadKeyMsg >(
00060             this, m_destination, server, mID );
00061          break;
00062       default :
00063          // Bad message type for a client request -- drop it.
00064          cerr << "Bad message type: "
00065               << (unsigned int)buff[0]
00066               << endl;
00067          if ( 0 != server ) delete [] server;
00068          if ( 0 != mID ) delete [] mID;
00069          break;
00070    }
00071    if ( NULL != evt )
00072    {
00073       if ( evt->unmarshal( &pBuff, buffLength ) )
00074       {
00075          // Enqueue the event.
00076          sendEvent( evt, 0 );
00077       }
00078       else
00079       {
00080          // Bad message format -- drop it.
00081          delete evt;
00082       }
00083    }
00084    delete m;
00085 #ifdef TIMING
00086    ActiveTimer.stop();
00087 #endif
00088 }

Generated on Wed Jun 2 16:32:54 2004 for COrnell Data EXchange (CODEX) by doxygen1.2.18