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: QuorumSystem.h,v 1.3 2004/05/19 15:56:55 mmarsh Exp $ 00008 // 00009 // $Log: QuorumSystem.h,v $ 00010 // Revision 1.3 2004/05/19 15:56:55 mmarsh 00011 // *** empty log message *** 00012 // 00013 // Revision 1.2 2003/11/04 22:17:23 mmarsh 00014 // General code cleanup. 00015 // 00016 // 00017 00018 #ifndef __CODEX_QUORUM_QUORUMSYSTEM_H__ 00019 #define __CODEX_QUORUM_QUORUMSYSTEM_H__ 00020 00021 #include <vector> 00022 #include <algorithm> 00023 #include <map> 00024 00025 #include "Message.h" 00026 #include "RemoteServer.h" 00027 #include "ResponseTracker.h" 00028 #include "MessageDispatcher.h" 00029 00065 namespace CODEX_Quorum 00066 { 00068 typedef vector<Message> MessageVector; 00070 typedef vector<RemoteServerReturn> ReturnVector; 00071 //typedef pair<const RemoteServerReturn*, const Response*> ResponsePair; 00072 //typedef vector<ResponsePair> ResponsePairVector; 00073 00078 class QuorumSystem 00079 { 00080 public : 00087 QuorumSystem( ResponseTracker* aRT ) : m_responseTracker( aRT ) {} 00088 00092 virtual ~QuorumSystem() { delete m_responseTracker; } 00093 00097 virtual unsigned int quorumSystemSize() = 0; 00098 00102 virtual unsigned int quorumSize() = 0; 00103 00107 virtual unsigned int faultsTolerated() = 0; 00108 00141 virtual bool broadcastMessage( const Message& msg, 00142 ReturnVector& rets, 00143 ResponseCallback* cb ) = 0; 00144 00175 virtual bool unicastMessage( const MessageVector& msgs, 00176 ReturnVector& rets, 00177 ResponseCallback* cb = 0 ) = 0; 00178 00193 virtual void poll( MessageDispatcher& requestDispatcher, 00194 QuorumDispatcher& responseDispatcher ) = 0; 00195 00199 virtual unsigned char* extractKey(const unsigned char* data) { 00200 return m_responseTracker->extractKey( data ); 00201 } 00202 00207 virtual bool keyRegistered( const unsigned char* key ) { 00208 return ( 0 != (*m_responseTracker)( key ) ); 00209 } 00210 00211 protected : 00213 ResponseTracker* m_responseTracker; 00214 }; 00215 00221 class ByzantineQuorumSystem : public QuorumSystem 00222 { 00223 public : 00225 ByzantineQuorumSystem( ResponseTracker* aRT ) : QuorumSystem( aRT ) {} 00226 00228 virtual ~ByzantineQuorumSystem() {} 00229 }; 00230 00231 } 00232 00233 #endif /* __CODEX_QUORUM_QUORUMSYSTEM_H__ */
1.2.18