Mixe for Privacy and Anonymity in the Internet
monitoringDefs.h
Go to the documentation of this file.
00001 /*
00002 Copyright (c) The JAP-Team, JonDos GmbH
00003 
00004 All rights reserved.
00005 
00006 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
00007 
00008     * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
00009     * Redistributions in binary form must reproduce the above copyright notice,
00010        this list of conditions and the following disclaimer in the documentation and/or
00011        other materials provided with the distribution.
00012     * Neither the name of the University of Technology Dresden, Germany, nor the name of
00013        the JonDos GmbH, nor the names of their contributors may be used to endorse or
00014        promote products derived from this software without specific prior written permission.
00015 
00016 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00017 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00018 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00019 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
00020 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00021 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00022 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00023 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00024 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00025 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00026 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027 */
00028 #ifndef MONITORING_DEFS_H_
00029 #define MONITORING_DEFS_H_
00030 
00049 /* How many different status types exist*/
00050 
00051 #define STATUS_FLAG(status_type) (1<<(unsigned int)status_type)
00052 
00053 #define FIRST_STATUS 0
00054 #define FIRST_EVENT 0
00055 #define ENTRY_STATE 0
00056 
00057 #define DOM_ELEMENT_STATUS_MESSAGE_NAME "StatusMessage"
00058 #define DOM_ELEMENT_STATE_NAME "State"
00059 #define DOM_ELEMENT_STATE_LEVEL_NAME "StateLevel"
00060 #define DOM_ELEMENT_STATE_DESCRIPTION_NAME "StateDescription"
00061 
00062 #define MAX_DESCRIPTION_LENGTH 50
00063 #define MONITORING_SERVER_PORT 8080
00064 #define XML_STATUS_MESSAGE_MAX_SIZE 3000
00065 
00066 #define XML_STATUS_MESSAGE_START "<StatusMessage>"
00067 #define HTTP_ANSWER_PREFIX_FORMAT "HTTP/1.1 200 OK\nContent-Length: %u\nConnection: close\nContent-Type: text/xml; charset=UTF-8\n\n"
00068 
00069 #define HTTP_ANSWER_PREFIX_MAX_LENGTH 100
00070 
00071 #define EVER 1
00072 
00073 //all status types
00074 enum status_type
00075 {
00076   stat_undef = -1,
00077   stat_networking = 0,
00078 #ifdef PAYMENT
00079   stat_payment,
00080 #endif
00081   stat_system,
00082   stat_all
00083 };
00084 
00085 #define NR_STATUS_TYPES stat_all
00086 
00087 //enum type for the id of a state
00088 enum state_type
00089 {
00090   st_ignore = -1,
00091   /* networking states */
00092   st_net_entry = 0,
00093   st_net_firstMixInit, st_net_firstMixConnectedToNext, st_net_firstMixOnline ,
00094   st_net_middleMixInit, st_net_middleMixConnectedToPrev,
00095   st_net_middleMixConnectedToNext, st_net_middleMixOnline,
00096   st_net_lastMixInit, st_net_lastMixConnectedToPrev, st_net_lastMixOnline,
00097   st_net_overall, /* only represents the number all network states */
00098 #ifdef PAYMENT
00099   /* payment states */
00100   st_pay_entry = 0,
00101   st_pay_aiInit, st_pay_aiShutdown,
00102   st_pay_biAvailable, st_pay_biUnreachable, st_pay_biPermanentlyUnreachable,
00103   st_pay_dbError, st_pay_dbErrorBiUnreachable, st_pay_dbErrorBiPermanentlyUnreachable,
00104   st_pay_overall, /* only represents the number all payment states */
00105 #endif
00106   /* system states */
00107   st_sys_entry = 0,
00108   st_sys_initializing, st_sys_operating, st_sys_restarting,
00109   st_sys_shuttingDown, st_sys_ShuttingDownAfterSegFault,
00110   st_sys_overall /* only represents the number all system states */
00111 };
00112 
00113 //enum type for the id of an event
00114 enum event_type
00115 {
00116   /* networking events */
00117   ev_net_firstMixInited = 0, ev_net_middleMixInited , ev_net_lastMixInited,
00118   ev_net_prevConnected, ev_net_nextConnected,
00119   ev_net_prevConnectionClosed, ev_net_nextConnectionClosed,
00120   ev_net_keyExchangePrevSuccessful, ev_net_keyExchangeNextSuccessful,
00121   ev_net_keyExchangePrevFailed, ev_net_keyExchangeNextFailed,
00122   ev_net_overall, /* only represents the number all network events */
00123 #ifdef PAYMENT
00124   /* payment events */
00125   ev_pay_aiInited = 0, ev_pay_aiShutdown,
00126   ev_pay_biConnectionSuccess, ev_pay_biConnectionFailure, ev_pay_biConnectionCriticalSubseqFailures,
00127   ev_pay_dbConnectionSuccess, ev_pay_dbConnectionFailure,
00128   ev_pay_overall,  /* only represents the number all payment events */
00129 #endif
00130   /* system events */
00131   ev_sys_start = 0,
00132   ev_sys_enterMainLoop, ev_sys_leavingMainLoop,
00133   ev_sys_sigTerm, ev_sys_sigInt, ev_sys_sigSegV,
00134   ev_sys_overall  /* only represents the number all system events */
00135 };
00136 
00137 #ifdef PAYMENT
00138   #define PAYMENT_STATUS_NAME "PaymentStatus"
00139   #define NR_PAYMENT_STATES st_pay_overall
00140   #define NR_PAYMENT_EVENTS ev_pay_overall
00141 #endif
00142 
00143 #define NETWORKING_STATUS_NAME "NetworkingStatus"
00144 #define NR_NETWORKING_STATES st_net_overall
00145 #define NR_NETWORKING_EVENTS ev_net_overall
00146 
00147 #define SYSTEM_STATUS_NAME "SystemStatus"
00148 #define NR_SYSTEM_STATES st_sys_overall
00149 #define NR_SYSTEM_EVENTS ev_sys_overall
00150 
00151 static const char *STATUS_NAMES[NR_STATUS_TYPES] =
00152 {
00153     NETWORKING_STATUS_NAME,
00154 #ifdef PAYMENT
00155     PAYMENT_STATUS_NAME,
00156 #endif
00157     SYSTEM_STATUS_NAME
00158 };
00159 
00160 static const int EVENT_COUNT[NR_STATUS_TYPES] =
00161 {
00162     NR_NETWORKING_EVENTS,
00163 #ifdef PAYMENT
00164     NR_PAYMENT_EVENTS,
00165 #endif
00166     NR_SYSTEM_EVENTS
00167 };
00168 
00169 static const int STATE_COUNT[NR_STATUS_TYPES] =
00170 {
00171     NR_NETWORKING_STATES,
00172 #ifdef PAYMENT
00173     NR_PAYMENT_STATES,
00174 #endif
00175     NR_SYSTEM_STATES
00176 };
00177 
00178 
00179 /* indices must correspond to strings in STATUS_LEVEL_NAMES */
00180 enum state_level
00181 {
00182   stl_ok = 0, stl_warning, stl_critical, stl_unknown, stl_all
00183 };
00184 
00185 #define NR_STATE_LEVELS stl_all
00186 
00187 static const char *STATUS_LEVEL_NAMES[NR_STATE_LEVELS] =
00188 {
00189     "OK", "WARNING", "CRITICAL", "UNKNOWN"
00190 };
00191 
00192 typedef enum state_type state_type_t;
00193 typedef enum status_type status_type_t;
00194 typedef enum state_type transition_t;
00195 typedef enum event_type event_type_t;
00196 typedef enum state_level state_level_t;
00197 
00198 //struct representing an event
00199 struct event
00200 {
00201   event_type_t ev_type; //id of the event
00202   status_type_t ev_statusType; //status to which the event belongs
00203   char *ev_description; //text description of this event.
00204 };
00205 
00206 struct state
00207 {
00208   state_type_t st_type; //id of the state
00209   status_type_t st_statusType; //status to which the state belongs
00210   state_level_t st_stateLevel; //level of the state (e.g "ok", "critical")
00211   char *st_description; //text description of this state.
00212   struct event *st_cause;
00213   struct state *st_prev;
00214   transition_t *st_transitions; //pointer to the transitions which leads from this state to other states
00215 };
00216 
00217 typedef struct state state_t;
00218 typedef struct event event_t;
00219 
00221 #define FINISH_STATE_DEFINITIONS(state_array) \
00222       FINISH_NETWORKING_STATE_DEFINITIONS(state_array) \
00223       FINISH_PAYMENT_STATE_DEFINITIONS(state_array) \
00224       FINISH_SYSTEM_STATE_DEFINITIONS(state_array)
00225 
00226 #define FINISH_EVENT_DEFINITIONS(event_array) \
00227       FINISH_NETWORKING_EVENT_DEFINITIONS(event_array) \
00228       FINISH_PAYMENT_EVENT_DEFINITIONS(event_array) \
00229       FINISH_SYSTEM_EVENT_DEFINITIONS(event_array)
00230 
00231 /* networking states description and transition assignment
00232  * new networking state definitions can be appended here
00233  * (after being declared as networking enum state_type)
00234  */
00235 #define FINISH_NETWORKING_STATE_DEFINITIONS(state_array) \
00236       NET_STATE_DEF(state_array, st_net_entry, \
00237           "networking entry state", \
00238           TRANS_NET_ENTRY, stl_unknown) \
00239       NET_STATE_DEF(state_array, st_net_firstMixInit,\
00240           "first mix initialized", \
00241           TRANS_NET_FIRST_MIX_INIT, stl_warning) \
00242       NET_STATE_DEF(state_array, st_net_firstMixConnectedToNext, \
00243           "first mix connected to next mix", \
00244             TRANS_NET_FIRST_MIX_CONNECTED_TO_NEXT, stl_warning) \
00245       NET_STATE_DEF(state_array, st_net_firstMixOnline, \
00246           "first mix online", \
00247            TRANS_NET_FIRST_MIX_ONLINE, stl_ok) \
00248       NET_STATE_DEF(state_array, st_net_middleMixInit, \
00249           "middle mix initialized", \
00250           TRANS_NET_MIDDLE_MIX_INIT, stl_warning) \
00251       NET_STATE_DEF(state_array, st_net_middleMixConnectedToPrev, \
00252           "middle mix connected to previous mix", \
00253           TRANS_NET_MIDDLE_MIX_CONNECTED_TO_PREV, stl_warning) \
00254       NET_STATE_DEF(state_array, st_net_middleMixConnectedToNext, \
00255           "middle mix connected to next mix", \
00256           TRANS_NET_MIDDLE_MIX_CONNECTED_TO_NEXT, stl_warning) \
00257       NET_STATE_DEF(state_array, st_net_middleMixOnline, \
00258           "middle mix online", \
00259           TRANS_NET_MIDDLE_MIX_ONLINE, stl_ok) \
00260       NET_STATE_DEF(state_array, st_net_lastMixInit, \
00261           "last mix initialized", \
00262           TRANS_NET_LAST_MIX_INIT, stl_warning) \
00263       NET_STATE_DEF(state_array, st_net_lastMixConnectedToPrev, \
00264           "last mix connected to previous mix", \
00265             TRANS_NET_LAST_MIX_CONNECTED_TO_PREV, stl_warning) \
00266         NET_STATE_DEF(state_array, st_net_lastMixOnline, \
00267             "last mix online", \
00268           TRANS_NET_LAST_MIX_ONLINE, stl_ok)
00269 
00270 /* networking events descriptions */
00271 #define FINISH_NETWORKING_EVENT_DEFINITIONS(event_array) \
00272       NET_EVENT_DEF(event_array, ev_net_firstMixInited, \
00273           "first mix initialization finished") \
00274       NET_EVENT_DEF(event_array, ev_net_middleMixInited, \
00275           "middle mix initialization finished") \
00276       NET_EVENT_DEF(event_array, ev_net_lastMixInited, \
00277           "last mix initialization finished") \
00278       NET_EVENT_DEF(event_array, ev_net_prevConnected, \
00279           "connection to previous mix established") \
00280       NET_EVENT_DEF(event_array, ev_net_nextConnected, \
00281           "connection to next mix established") \
00282       NET_EVENT_DEF(event_array, ev_net_keyExchangePrevSuccessful, \
00283           "key exchange with previous mix successful") \
00284       NET_EVENT_DEF(event_array, ev_net_keyExchangeNextSuccessful, \
00285             "key exchange with next mix successful") \
00286         NET_EVENT_DEF(event_array, ev_net_keyExchangePrevFailed, \
00287             "key exchange with previous mix failed") \
00288       NET_EVENT_DEF(event_array, ev_net_keyExchangeNextFailed, \
00289             "key exchange with next mix failed") \
00290         NET_EVENT_DEF(event_array, ev_net_prevConnectionClosed, \
00291           "connection to previous mix closed") \
00292       NET_EVENT_DEF(event_array, ev_net_nextConnectionClosed, \
00293           "connection to next mix closed")
00294 
00295 #ifdef PAYMENT
00296   /* payment states description and transition assignment
00297    * new payment state definitions can be appended here
00298    * (after being declared as payment enum state_type)
00299    */
00300   #define FINISH_PAYMENT_STATE_DEFINITIONS(state_array) \
00301         PAY_STATE_DEF(state_array, st_pay_entry, \
00302             "payment entry state", \
00303             TRANS_PAY_ENTRY, stl_unknown) \
00304         PAY_STATE_DEF(state_array, st_pay_aiInit, \
00305             "accounting instance initialized", \
00306             TRANS_PAY_AI_INIT, stl_ok) \
00307         PAY_STATE_DEF(state_array, st_pay_aiShutdown, \
00308             "accounting instance shutdown", \
00309             TRANS_PAY_AI_SHUTDOWN, stl_critical) \
00310         PAY_STATE_DEF(state_array, st_pay_biAvailable, \
00311             "payment instance available", \
00312             TRANS_PAY_BI_AVAILABLE, stl_ok) \
00313         PAY_STATE_DEF(state_array, st_pay_biUnreachable, \
00314             "payment instance temporarily unreachable", \
00315             TRANS_PAY_BI_UNREACHABLE, stl_warning) \
00316         PAY_STATE_DEF(state_array, st_pay_biPermanentlyUnreachable, \
00317             "payment instance permanently unreachable", \
00318             TRANS_PAY_BI_PERMANENTLY_UNREACHABLE, stl_critical) \
00319         PAY_STATE_DEF(state_array, st_pay_dbError, \
00320             "pay DB cannot be accessed ", \
00321             TRANS_PAY_DB_ERROR, stl_critical) \
00322         PAY_STATE_DEF(state_array, st_pay_dbErrorBiUnreachable, \
00323             "pay DB cannot be accessed and Payment Instance temporarily unreachable", \
00324             TRANS_PAY_DB_ERROR_BI_UNREACHABLE, stl_critical) \
00325         PAY_STATE_DEF(state_array, st_pay_dbErrorBiPermanentlyUnreachable, \
00326             "pay DB cannot be accessed and Payment Instance permanently unreachable", \
00327             TRANS_PAY_DB_ERROR_BI_PERMANENTLY_UNREACHABLE, stl_critical)
00328 
00329   /* payment events descriptions */
00330   #define FINISH_PAYMENT_EVENT_DEFINITIONS(event_array) \
00331         PAY_EVENT_DEF(event_array, ev_pay_aiInited, \
00332             "accounting instance initialization finished") \
00333         PAY_EVENT_DEF(event_array, ev_pay_aiShutdown, \
00334               "accounting instance shutdown finished") \
00335           PAY_EVENT_DEF(event_array, ev_pay_biConnectionSuccess, \
00336               "successfully connected to payment instance") \
00337         PAY_EVENT_DEF(event_array, ev_pay_biConnectionFailure, \
00338               "connection to payment instance failed") \
00339         PAY_EVENT_DEF(event_array, ev_pay_biConnectionCriticalSubseqFailures, \
00340               "connection to payment instance failed permanently") \
00341         PAY_EVENT_DEF(event_array, ev_pay_dbConnectionSuccess, \
00342               "pay DB access successful") \
00343         PAY_EVENT_DEF(event_array, ev_pay_dbConnectionFailure, \
00344               "pay DB access failed")
00345 #else
00346   #define FINISH_PAYMENT_STATE_DEFINITIONS(state_array)
00347   #define FINISH_PAYMENT_EVENT_DEFINITIONS(event_array)
00348 #endif /* PAYMENT */
00349 
00350 /* system states description and transition assignment
00351  * new system state definitions can be appended here
00352  * (after being declared as system enum state_type)
00353  */
00354 #define FINISH_SYSTEM_STATE_DEFINITIONS(state_array) \
00355       SYS_STATE_DEF(state_array, st_sys_entry, \
00356           "system entry state", \
00357           TRANS_SYS_ENTRY, stl_unknown) \
00358       SYS_STATE_DEF(state_array, st_sys_initializing, \
00359           "mix is initializing", \
00360           TRANS_SYS_INITIALIZING, stl_warning) \
00361       SYS_STATE_DEF(state_array, st_sys_operating, \
00362           "mix is operating", \
00363           TRANS_SYS_OPERATING, stl_ok) \
00364       SYS_STATE_DEF(state_array, st_sys_restarting, \
00365           "mix is restarting", \
00366           TRANS_SYS_RESTARTING, stl_warning) \
00367       SYS_STATE_DEF(state_array, st_sys_shuttingDown, \
00368           "mix is shutting down", \
00369           TRANS_SYS_SHUTTING_DOWN, stl_critical) \
00370       SYS_STATE_DEF(state_array, st_sys_ShuttingDownAfterSegFault, \
00371           "mix is shutting down due to a segmentation fault!", \
00372           TRANS_SYS_SHUTTING_DOWN_AFTER_SEG_FAULT, stl_critical)
00373 
00374 /* payment events descriptions */
00375 #define FINISH_SYSTEM_EVENT_DEFINITIONS(event_array) \
00376       SYS_EVENT_DEF(event_array, ev_sys_start, \
00377           "mix startup") \
00378       SYS_EVENT_DEF(event_array, ev_sys_enterMainLoop, \
00379           "mix entering main loop") \
00380       SYS_EVENT_DEF(event_array, ev_sys_leavingMainLoop, \
00381           "mix leaving main loop") \
00382       SYS_EVENT_DEF(event_array, ev_sys_sigTerm, \
00383           "mix caught SIG_TERM") \
00384       SYS_EVENT_DEF(event_array, ev_sys_sigInt, \
00385           "mix caught SIG_INT") \
00386       SYS_EVENT_DEF(event_array, ev_sys_sigSegV, \
00387           "mix caught SIG_SEGV")
00388 
00389 /* convenience macros for special status state and event definitions */
00390 #define NET_STATE_DEF(state_array, state_type, description, transitions, stateLevel) \
00391       STATE_DEF(state_array, stat_networking, state_type, description, transitions, stateLevel)
00392 
00393 #define NET_EVENT_DEF(event_array, event_type, description) \
00394       EVENT_DEF(event_array, stat_networking, event_type, description)
00395 
00396 #ifdef PAYMENT
00397   #define PAY_STATE_DEF(state_array, state_type, description, transitions, stateLevel) \
00398         STATE_DEF(state_array, stat_payment, state_type, description, transitions, stateLevel)
00399 
00400   #define PAY_EVENT_DEF(event_array, event_type, description) \
00401         EVENT_DEF(event_array, stat_payment, event_type, description)
00402 #else
00403   #define PAY_STATE_DEF(state_array, state_type, description, transitions, stateLevel)
00404   #define PAY_EVENT_DEF(event_array, event_type, description)
00405 #endif
00406 
00407 #define SYS_STATE_DEF(state_array, state_type, description, transitions, stateLevel) \
00408       STATE_DEF(state_array, stat_system, state_type, description, transitions, stateLevel)
00409 
00410 #define SYS_EVENT_DEF(event_array, event_type, description) \
00411       EVENT_DEF(event_array, stat_system, event_type, description)
00412 
00413 /* This macro is used for assigning state description and state transitions
00414  * to the initialized states in the function "initStates()"
00415  */
00416 #define STATE_DEF(state_array, status_type, state_type, description, transitions, stateLevel) \
00417       state_array[status_type][state_type]->st_description = (char *) description; \
00418       state_array[status_type][state_type]->st_transitions = transitions; \
00419       state_array[status_type][state_type]->st_stateLevel = stateLevel;
00420 /* Same for events description assignment */
00421 #define EVENT_DEF(event_array, status_type, event_type, description) \
00422       event_array[status_type][event_type]->ev_description  = (char *) description;
00423 
00435 transition_t *defineTransitions(status_type_t s_type, int transitionCount, ...);
00436 
00439 /* transitions for the networking entry state: */
00440 #define TRANS_NET_ENTRY \
00441   (defineTransitions(stat_networking, 3, \
00442       ev_net_firstMixInited, st_net_firstMixInit, \
00443       ev_net_middleMixInited, st_net_middleMixInit, \
00444       ev_net_lastMixInited, st_net_lastMixInit))
00445 
00446 /* transitions for st_net_firstMixInit: */
00447 #define TRANS_NET_FIRST_MIX_INIT \
00448   (defineTransitions(stat_networking, 1, \
00449       ev_net_nextConnected, st_net_firstMixConnectedToNext))
00450 
00451 /* transitions for st_net_firstMixConnectedToNext: */
00452 #define TRANS_NET_FIRST_MIX_CONNECTED_TO_NEXT \
00453   (defineTransitions(stat_networking, 2, \
00454       ev_net_keyExchangeNextSuccessful, st_net_firstMixOnline, \
00455       ev_net_nextConnectionClosed, st_net_firstMixInit))
00456 
00457 /* transitions for st_net_firstMixOnline: */
00458 #define TRANS_NET_FIRST_MIX_ONLINE \
00459   (defineTransitions(stat_networking, 1, \
00460       ev_net_nextConnectionClosed, st_net_firstMixInit))
00461 
00462 /* transitions for st_net_middleMixInit: */
00463 #define TRANS_NET_MIDDLE_MIX_INIT \
00464   (defineTransitions(stat_networking, 1, \
00465       ev_net_prevConnected, st_net_middleMixConnectedToPrev))
00466 
00467 /* transitions for st_net_middleMixConnectedToPrev: */
00468 #define TRANS_NET_MIDDLE_MIX_CONNECTED_TO_PREV \
00469   (defineTransitions(stat_networking, 2, \
00470       ev_net_nextConnected, st_net_middleMixConnectedToNext, \
00471       ev_net_prevConnectionClosed, st_net_middleMixInit))
00472 
00473 /* transitions for st_net_middleMixConnectedToNext: */
00474 #define TRANS_NET_MIDDLE_MIX_CONNECTED_TO_NEXT \
00475   (defineTransitions(stat_networking, 4, \
00476       ev_net_keyExchangeNextFailed, st_net_middleMixInit, \
00477       ev_net_keyExchangePrevFailed, st_net_middleMixInit, \
00478       ev_net_keyExchangeNextSuccessful, st_net_middleMixConnectedToNext, \
00479       ev_net_keyExchangePrevSuccessful, st_net_middleMixOnline))
00480 
00481 /* transitions for st_net_middleMixOnline: */
00482 #define TRANS_NET_MIDDLE_MIX_ONLINE \
00483   (defineTransitions(stat_networking, 2, \
00484       ev_net_prevConnectionClosed, st_net_middleMixInit, \
00485       ev_net_nextConnectionClosed, st_net_middleMixInit))
00486 
00487 /* transitions for st_net_lastMixInit: */
00488 #define TRANS_NET_LAST_MIX_INIT \
00489   (defineTransitions(stat_networking, 1, \
00490       ev_net_prevConnected, st_net_lastMixConnectedToPrev))
00491 
00492 /* transitions for st_net_lastMixConnectedToPrev: */
00493 #define TRANS_NET_LAST_MIX_CONNECTED_TO_PREV \
00494   (defineTransitions(stat_networking, 2, \
00495       ev_net_keyExchangePrevFailed, st_net_lastMixInit, \
00496       ev_net_keyExchangePrevSuccessful, st_net_lastMixOnline))
00497 
00498 
00499 /* transitions for st_net_lastMixOnline: */
00500 #define TRANS_NET_LAST_MIX_ONLINE \
00501   (defineTransitions(stat_networking, 1, \
00502       ev_net_prevConnectionClosed, st_net_lastMixInit))
00503 
00504 #ifdef PAYMENT
00505 
00508 /* transitions for st_pay_entry */
00509 #define TRANS_PAY_ENTRY \
00510   (defineTransitions(stat_payment, 1, \
00511       ev_pay_aiInited, st_pay_aiInit))
00512 
00513 /* transitions for st_pay_aiInit */
00514 #define TRANS_PAY_AI_INIT \
00515   (defineTransitions(stat_payment, 4, \
00516       ev_pay_aiShutdown, st_pay_aiShutdown, \
00517       ev_pay_biConnectionSuccess, st_pay_biAvailable, \
00518       ev_pay_biConnectionFailure, st_pay_biUnreachable, \
00519       ev_pay_dbConnectionFailure, st_pay_dbError))
00520 
00521 /* transitions for st_pay_aiShutdown */
00522 #define TRANS_PAY_AI_SHUTDOWN \
00523   (defineTransitions(stat_payment, 1, \
00524       ev_pay_aiInited, st_pay_aiInit))
00525 
00526 /* transitions for st_pay_biAvailable */
00527 #define TRANS_PAY_BI_AVAILABLE \
00528   (defineTransitions(stat_payment, 3, \
00529       ev_pay_aiShutdown, st_pay_aiShutdown, \
00530       ev_pay_biConnectionFailure, st_pay_biUnreachable, \
00531       ev_pay_dbConnectionFailure, st_pay_dbError))
00532 
00533 /* transitions for st_pay_biUnreachable */
00534 #define TRANS_PAY_BI_UNREACHABLE \
00535   (defineTransitions(stat_payment, 4, \
00536       ev_pay_aiShutdown, st_pay_aiShutdown, \
00537       ev_pay_biConnectionSuccess, st_pay_biAvailable, \
00538       ev_pay_biConnectionCriticalSubseqFailures, st_pay_biPermanentlyUnreachable, \
00539       ev_pay_dbConnectionFailure, st_pay_dbErrorBiUnreachable))
00540 
00541 /* transitions for st_pay_biPermanentlyUnreachable */
00542 #define TRANS_PAY_BI_PERMANENTLY_UNREACHABLE \
00543   (defineTransitions(stat_payment, 3, \
00544       ev_pay_aiShutdown, st_pay_aiShutdown, \
00545       ev_pay_biConnectionSuccess, st_pay_biAvailable, \
00546       ev_pay_dbConnectionFailure, st_pay_dbErrorBiPermanentlyUnreachable))
00547 
00548 /* transitions for st_pay_dbError */
00549 #define TRANS_PAY_DB_ERROR \
00550   (defineTransitions(stat_payment, 2, \
00551       ev_pay_aiShutdown, st_pay_aiShutdown, \
00552       ev_pay_dbConnectionSuccess, st_pay_aiInit))
00553 
00554 /* transitions for st_pay_dbErrorBiUnreachable */
00555 #define TRANS_PAY_DB_ERROR_BI_UNREACHABLE \
00556   (defineTransitions(stat_payment, 2, \
00557       ev_pay_aiShutdown, st_pay_aiShutdown, \
00558       ev_pay_dbConnectionSuccess, st_pay_biUnreachable))
00559 
00560 /* transitions for st_pay_dbErrorBiPermanentlyUnreachable */
00561 #define TRANS_PAY_DB_ERROR_BI_PERMANENTLY_UNREACHABLE \
00562   (defineTransitions(stat_payment, 2, \
00563       ev_pay_aiShutdown, st_pay_aiShutdown, \
00564       ev_pay_dbConnectionSuccess, st_pay_biPermanentlyUnreachable))
00565 
00566 #endif /* PAYMENT */
00567 
00570 /* transitions for st_sys_entry */
00571 #define TRANS_SYS_ENTRY \
00572   (defineTransitions(stat_system, 1, \
00573       ev_sys_start, st_sys_initializing))
00574 
00575 /* transitions for st_sys_initializing */
00576 #define TRANS_SYS_INITIALIZING \
00577   (defineTransitions(stat_system, 4, \
00578       ev_sys_enterMainLoop, st_sys_operating, \
00579       ev_sys_sigTerm, st_sys_shuttingDown, \
00580       ev_sys_sigInt, st_sys_shuttingDown, \
00581       ev_sys_sigSegV, st_sys_ShuttingDownAfterSegFault))
00582 
00583 /* transitions for st_sys_operating */
00584 #define TRANS_SYS_OPERATING \
00585   (defineTransitions(stat_system, 4, \
00586       ev_sys_leavingMainLoop, st_sys_restarting, \
00587       ev_sys_sigTerm, st_sys_shuttingDown, \
00588       ev_sys_sigInt, st_sys_shuttingDown, \
00589       ev_sys_sigSegV, st_sys_ShuttingDownAfterSegFault))
00590 
00591 /* transitions for st_sys_restarting */
00592 #define TRANS_SYS_RESTARTING \
00593   (defineTransitions(stat_system, 4, \
00594       ev_sys_enterMainLoop, st_sys_operating, \
00595       ev_sys_sigTerm, st_sys_shuttingDown, \
00596       ev_sys_sigInt, st_sys_shuttingDown, \
00597       ev_sys_sigSegV, st_sys_ShuttingDownAfterSegFault))
00598 
00599 /* transitions for st_sys_shuttingDown */
00600 #define TRANS_SYS_SHUTTING_DOWN \
00601   (defineTransitions(stat_system, 1, \
00602       ev_sys_sigSegV, st_sys_ShuttingDownAfterSegFault))
00603 
00604 /* transitions for st_sys_ShuttingDownAfterSegFault */
00605 #define TRANS_SYS_SHUTTING_DOWN_AFTER_SEG_FAULT \
00606   (defineTransitions(stat_system, 0))
00607 
00608 #endif /* MONITORING_DEFS_H_ */