/
/*
 * wtp_init_machine.def: macro call for generating WTP initiator state 
 * machine. See the architecture document for guidance how to use and update 
 * it.
 *
 * WTPRespMachine data structure includes current state of WTP responder state 
 * machine for a specific transaction. This means all data needed to handle at
 * least two incoming events of a certain transaction. Its fields can be 
 * grouped following way:
 *
 * General:      a) wtp initiator machine state 
 *               b) tidnew flag, telling whether tid is wrapped up
 *
 * Fields telling the service required: 
 *               a) transaction class (is transaction confirmed or not) 
 *               b) user acknowledgement flag (do we wait for response 
 *                  primitive of WTP user (for instance, WSP) or not)
 *
 * Machine identification: address four-tuple and transaction identifier
 *
 * Fields required for reliable transmission: 
 *               a) pointer to the timer of this machine in the timers list
 *               b) counter for retransmissions 
 *               c) flag telling are we resending ack pdu doing tid verifica-
 *                  tion or not
 *               d) packed invoke message, for greater effectivity
 */


#if !defined(MACHINE) 
    #error "Macro MACHINE is missing."
#elif !defined(INTEGER) 
    #error "Macro INTEGER is missing."
#elif !defined(ENUM)  
    #error "Macro ENUM is missing."
#elif !defined(EVENT)  
    #error "Macro EVENT is missing."
#elif !defined(TIMER) 
    #error "Macro TIMER is missing."
#elif !defined(ADDRTUPLE)
    #error "Macro ADDRTUPLE is missing."
#endif

MACHINE(ENUM(state)
        INTEGER(tid)             /* transaction identifier */
        ADDRTUPLE(addr_tuple)
        INTEGER(tidnew)          /* tidnew flag */
        INTEGER(u_ack)           /* user acknowledgement flag */
        EVENT(invoke)            /* invoke datagram for resending */
        TIMER(timer)
        INTEGER(rcr)             /* retransmission counter */
        INTEGER(tidok_sent)      /* are we resending tid verification */
        INTEGER(rid)             /* are we resending invoke */
       )

#undef MACHINE
#undef ENUM
#undef EVENT
#undef INTEGER
#undef ADDRTUPLE
#undef TIMER
