/*********************************************************************
 *                
 * Filename:      iriap_event.h
 * Version:       
 * Description:   
 * Status:        Experimental.
 * Author:        Dag Brattli <dagb@cs.uit.no>
 * Created at:    Mon Aug  4 20:40:53 1997
 * Modified at:   Fri Sep  4 13:19:28 1998
 * Modified by:   Dag Brattli <dagb@cs.uit.no>
 * 
 *     Copyright (c) 1998 Dag Brattli <dagb@cs.uit.no>, All Rights Reserved.
 *     
 *     This program is free software; you can redistribute it and/or 
 *     modify it under the terms of the GNU General Public License as 
 *     published by the Free Software Foundation; either version 2 of 
 *     the License, or (at your option) any later version.
 *
 *     Neither Dag Brattli nor University of Tromsų admit liability nor
 *     provide warranty for any of this software. This material is 
 *     provided "AS-IS" and at no charge.
 *
 ********************************************************************/

#ifndef IRIAP_FSM_H
#define IRIAP_FSM_H

/* Forward because of circular include dependecies */
struct iriap_cb;

/* IrIAP states */
typedef enum {
	/* Client */
	S_DISCONNECT,
	S_CONNECTING,
	S_CALL,

	/* S-Call */
	S_MAKE_CALL,
	S_CALLING,
	S_OUTSTANDING,
	S_REPLYING,
	S_WAIT_FOR_CALL,
	S_WAIT_ACTIVE,

	/* Server */
	R_DISCONNECT,
	R_CALL,
	
	/* R-Connect */
	R_WAITING,
	R_WAIT_ACTIVE,
	R_RECEIVING,
	R_EXECUTE,
	R_RETURNING,
} IRIAP_STATE;

typedef enum {
	IAP_CALL_REQUEST,
	IAP_CALL_REQUEST_GVBC,
	IAP_CALL_RESPONSE,
	IAP_RECV_F_LST,
	IAP_LM_DISCONNECT_INDICATION,
	IAP_LM_CONNECT_INDICATION,
	IAP_LM_CONNECT_CONFIRM,
} IRIAP_EVENT;

void iriap_next_client_state   ( struct iriap_cb *self, IRIAP_STATE state);
void iriap_next_call_state     ( struct iriap_cb *self, IRIAP_STATE state);
void iriap_next_server_state   ( struct iriap_cb *self, IRIAP_STATE state);
void iriap_next_r_connect_state( struct iriap_cb *self, IRIAP_STATE state);


void iriap_do_client_event( struct iriap_cb *self, IRIAP_EVENT event, 
			    struct sk_buff *skb);
void iriap_do_call_event  ( struct iriap_cb *self, IRIAP_EVENT event, 
			    struct sk_buff *skb);

void iriap_do_server_event   ( struct iriap_cb *self, IRIAP_EVENT event, 
			       struct sk_buff *skb);
void iriap_do_r_connect_event( struct iriap_cb *self, IRIAP_EVENT event, 
			       struct sk_buff *skb);

#endif
