doubango/trunk/tinySIP/source/smc/tmp/tsip_transac_nist_sm.c

328 lines
12 KiB
C

/*
* ex: set ro:
* DO NOT EDIT.
* generated by smc (http://smc.sourceforge.net/)
* from file : tsip_transac_nist.sm
*/
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO 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 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
*/
/**@file tsip_transac_nist.sm
* @brief SIP Non-INVITE Server Transaction as per RFC 3261 subclause 17.2.2.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#include <assert.h>
#include "tinysip/transactions/tsip_transac_nist.h"
#include "tinysip/smc/tsip_transac_nist_sm.h"
#define getOwner(fsm) \
(fsm)->_owner
#define POPULATE_STATE(state) \
state##_Entry, \
state##_sm_send_1xx, \
state##_sm_send_200_to_699, \
state##_sm_send_response, \
state##_sm_timerJ, \
state##_sm_transportError, \
state##_Default
#define ENTRY_STATE(state) \
if ((state)->Entry != NULL) { \
(state)->Entry(fsm); \
}
#define EXIT_STATE(state)
static void tsip_transac_nistState_sm_send_1xx(struct tsip_transac_nistContext *fsm, const tsip_message_t* msg)
{
getState(fsm)->Default(fsm);
}
static void tsip_transac_nistState_sm_send_200_to_699(struct tsip_transac_nistContext *fsm, const tsip_message_t* msg)
{
getState(fsm)->Default(fsm);
}
static void tsip_transac_nistState_sm_send_response(struct tsip_transac_nistContext *fsm, const tsip_message_t* msg)
{
getState(fsm)->Default(fsm);
}
static void tsip_transac_nistState_sm_timerJ(struct tsip_transac_nistContext *fsm)
{
getState(fsm)->Default(fsm);
}
static void tsip_transac_nistState_sm_transportError(struct tsip_transac_nistContext *fsm)
{
getState(fsm)->Default(fsm);
}
static void tsip_transac_nistState_Default(struct tsip_transac_nistContext *fsm)
{
State_Default(fsm);
}
#define tsip_transac_nist_Trying_sm_send_1xx tsip_transac_nistState_sm_send_1xx
#define tsip_transac_nist_Trying_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699
#define tsip_transac_nist_Trying_sm_send_response tsip_transac_nistState_sm_send_response
#define tsip_transac_nist_Trying_sm_timerJ tsip_transac_nistState_sm_timerJ
#define tsip_transac_nist_Trying_sm_transportError tsip_transac_nistState_sm_transportError
#define tsip_transac_nist_Trying_Default tsip_transac_nistState_Default
#define tsip_transac_nist_Trying_Entry NULL
#define tsip_transac_nist_Trying_Exit NULL
#define tsip_transac_nist_Proceeding_sm_send_1xx tsip_transac_nistState_sm_send_1xx
#define tsip_transac_nist_Proceeding_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699
#define tsip_transac_nist_Proceeding_sm_send_response tsip_transac_nistState_sm_send_response
#define tsip_transac_nist_Proceeding_sm_timerJ tsip_transac_nistState_sm_timerJ
#define tsip_transac_nist_Proceeding_sm_transportError tsip_transac_nistState_sm_transportError
#define tsip_transac_nist_Proceeding_Default tsip_transac_nistState_Default
#define tsip_transac_nist_Proceeding_Entry NULL
#define tsip_transac_nist_Proceeding_Exit NULL
#define tsip_transac_nist_Completed_sm_send_1xx tsip_transac_nistState_sm_send_1xx
#define tsip_transac_nist_Completed_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699
#define tsip_transac_nist_Completed_sm_send_response tsip_transac_nistState_sm_send_response
#define tsip_transac_nist_Completed_sm_timerJ tsip_transac_nistState_sm_timerJ
#define tsip_transac_nist_Completed_sm_transportError tsip_transac_nistState_sm_transportError
#define tsip_transac_nist_Completed_Default tsip_transac_nistState_Default
#define tsip_transac_nist_Completed_Entry NULL
#define tsip_transac_nist_Completed_Exit NULL
#define tsip_transac_nist_Terminated_sm_send_1xx tsip_transac_nistState_sm_send_1xx
#define tsip_transac_nist_Terminated_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699
#define tsip_transac_nist_Terminated_sm_send_response tsip_transac_nistState_sm_send_response
#define tsip_transac_nist_Terminated_sm_timerJ tsip_transac_nistState_sm_timerJ
#define tsip_transac_nist_Terminated_sm_transportError tsip_transac_nistState_sm_transportError
#define tsip_transac_nist_Terminated_Default tsip_transac_nistState_Default
#define tsip_transac_nist_Terminated_Entry NULL
#define tsip_transac_nist_Terminated_Exit NULL
#define tsip_transac_nist_DefaultState_sm_send_1xx tsip_transac_nistState_sm_send_1xx
#define tsip_transac_nist_DefaultState_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699
#define tsip_transac_nist_DefaultState_sm_send_response tsip_transac_nistState_sm_send_response
#define tsip_transac_nist_DefaultState_sm_timerJ tsip_transac_nistState_sm_timerJ
#define tsip_transac_nist_DefaultState_sm_transportError tsip_transac_nistState_sm_transportError
#undef tsip_transac_nist_Trying_sm_transportError
#define tsip_transac_nist_Trying_sm_transportError tsip_transac_nist_DefaultState_sm_transportError
#undef tsip_transac_nist_Proceeding_sm_transportError
#define tsip_transac_nist_Proceeding_sm_transportError tsip_transac_nist_DefaultState_sm_transportError
#undef tsip_transac_nist_Completed_sm_transportError
#define tsip_transac_nist_Completed_sm_transportError tsip_transac_nist_DefaultState_sm_transportError
#undef tsip_transac_nist_Terminated_sm_transportError
#define tsip_transac_nist_Terminated_sm_transportError tsip_transac_nist_DefaultState_sm_transportError
#undef tsip_transac_nist_DefaultState_sm_transportError
static void tsip_transac_nist_DefaultState_sm_transportError(struct tsip_transac_nistContext *fsm)
{
struct tsip_transac_nist* ctxt = getOwner(fsm);
EXIT_STATE(getState(fsm));
clearState(fsm);
tsip_transac_nist_Any_2_Terminated_X_transportError(ctxt);
setState(fsm, &tsip_transac_nist_Terminated);
ENTRY_STATE(getState(fsm));
}
#undef tsip_transac_nist_Trying_Default
#define tsip_transac_nist_Trying_Default tsip_transac_nist_DefaultState_Default
#undef tsip_transac_nist_Proceeding_Default
#define tsip_transac_nist_Proceeding_Default tsip_transac_nist_DefaultState_Default
#undef tsip_transac_nist_Completed_Default
#define tsip_transac_nist_Completed_Default tsip_transac_nist_DefaultState_Default
#undef tsip_transac_nist_Terminated_Default
#define tsip_transac_nist_Terminated_Default tsip_transac_nist_DefaultState_Default
#undef tsip_transac_nist_DefaultState_Default
static void tsip_transac_nist_DefaultState_Default(struct tsip_transac_nistContext *fsm)
{
}
#undef tsip_transac_nist_Trying_sm_send_1xx
static void tsip_transac_nist_Trying_sm_send_1xx(struct tsip_transac_nistContext *fsm, const tsip_message_t* msg)
{
struct tsip_transac_nist* ctxt = getOwner(fsm);
EXIT_STATE(getState(fsm));
clearState(fsm);
tsip_transac_nist_Trying_2_Proceeding_X_send_1xx(ctxt, msg);
setState(fsm, &tsip_transac_nist_Proceeding);
ENTRY_STATE(getState(fsm));
}
#undef tsip_transac_nist_Trying_sm_send_200_to_699
static void tsip_transac_nist_Trying_sm_send_200_to_699(struct tsip_transac_nistContext *fsm, const tsip_message_t* msg)
{
struct tsip_transac_nist* ctxt = getOwner(fsm);
EXIT_STATE(getState(fsm));
clearState(fsm);
tsip_transac_nist_Trying_2_Completed_X_send_200_to_699(ctxt, msg);
setState(fsm, &tsip_transac_nist_Completed);
ENTRY_STATE(getState(fsm));
}
const struct tsip_transac_nistState tsip_transac_nist_Trying = { POPULATE_STATE(tsip_transac_nist_Trying), "tsip_transac_nist_Trying", 0 };
#undef tsip_transac_nist_Proceeding_sm_send_1xx
static void tsip_transac_nist_Proceeding_sm_send_1xx(struct tsip_transac_nistContext *fsm, const tsip_message_t* msg)
{
struct tsip_transac_nist* ctxt = getOwner(fsm);
const struct tsip_transac_nistState* EndStateName = getState(fsm);
clearState(fsm);
tsip_transac_nist_Proceeding_2_Proceeding_X_send_1xx(ctxt, msg);
setState(fsm, EndStateName);
}
#undef tsip_transac_nist_Proceeding_sm_send_200_to_699
static void tsip_transac_nist_Proceeding_sm_send_200_to_699(struct tsip_transac_nistContext *fsm, const tsip_message_t* msg)
{
struct tsip_transac_nist* ctxt = getOwner(fsm);
EXIT_STATE(getState(fsm));
clearState(fsm);
tsip_transac_nist_Proceeding_2_Completed_X_send_200_to_699(ctxt, msg);
setState(fsm, &tsip_transac_nist_Completed);
ENTRY_STATE(getState(fsm));
}
#undef tsip_transac_nist_Proceeding_sm_send_response
static void tsip_transac_nist_Proceeding_sm_send_response(struct tsip_transac_nistContext *fsm, const tsip_message_t* msg)
{
struct tsip_transac_nist* ctxt = getOwner(fsm);
const struct tsip_transac_nistState* EndStateName = getState(fsm);
clearState(fsm);
tsip_transac_nist_Proceeding_2_Proceeding_X_send_response(ctxt, msg);
setState(fsm, EndStateName);
}
const struct tsip_transac_nistState tsip_transac_nist_Proceeding = { POPULATE_STATE(tsip_transac_nist_Proceeding), "tsip_transac_nist_Proceeding", 1 };
#undef tsip_transac_nist_Completed_sm_send_response
static void tsip_transac_nist_Completed_sm_send_response(struct tsip_transac_nistContext *fsm, const tsip_message_t* msg)
{
struct tsip_transac_nist* ctxt = getOwner(fsm);
const struct tsip_transac_nistState* EndStateName = getState(fsm);
clearState(fsm);
tsip_transac_nist_Completed_2_Completed_X_send_response(ctxt, msg);
setState(fsm, EndStateName);
}
#undef tsip_transac_nist_Completed_sm_timerJ
static void tsip_transac_nist_Completed_sm_timerJ(struct tsip_transac_nistContext *fsm)
{
struct tsip_transac_nist* ctxt = getOwner(fsm);
EXIT_STATE(getState(fsm));
clearState(fsm);
tsip_transac_nist_Completed_2_Terminated_X_tirmerJ(ctxt);
setState(fsm, &tsip_transac_nist_Terminated);
ENTRY_STATE(getState(fsm));
}
const struct tsip_transac_nistState tsip_transac_nist_Completed = { POPULATE_STATE(tsip_transac_nist_Completed), "tsip_transac_nist_Completed", 2 };
#undef tsip_transac_nist_Terminated_Entry
void tsip_transac_nist_Terminated_Entry(struct tsip_transac_nistContext *fsm)
{
struct tsip_transac_nist *ctxt = getOwner(fsm);
tsip_transac_nist_OnTerminated(ctxt);
}
const struct tsip_transac_nistState tsip_transac_nist_Terminated = { POPULATE_STATE(tsip_transac_nist_Terminated), "tsip_transac_nist_Terminated", 3 };
void tsip_transac_nistContext_Init(struct tsip_transac_nistContext* fsm, struct tsip_transac_nist* owner)
{
FSM_INIT(fsm, &tsip_transac_nist_Trying);
fsm->_owner = owner;
}
void tsip_transac_nistContext_EnterStartState(struct tsip_transac_nistContext* fsm)
{
ENTRY_STATE(getState(fsm));
}
void tsip_transac_nistContext_sm_send_1xx(struct tsip_transac_nistContext* fsm, const tsip_message_t* msg)
{
const struct tsip_transac_nistState* state = getState(fsm);
assert(state != NULL);
setTransition(fsm, "sm_send_1xx");
state->sm_send_1xx(fsm, msg);
setTransition(fsm, NULL);
}
void tsip_transac_nistContext_sm_send_200_to_699(struct tsip_transac_nistContext* fsm, const tsip_message_t* msg)
{
const struct tsip_transac_nistState* state = getState(fsm);
assert(state != NULL);
setTransition(fsm, "sm_send_200_to_699");
state->sm_send_200_to_699(fsm, msg);
setTransition(fsm, NULL);
}
void tsip_transac_nistContext_sm_send_response(struct tsip_transac_nistContext* fsm, const tsip_message_t* msg)
{
const struct tsip_transac_nistState* state = getState(fsm);
assert(state != NULL);
setTransition(fsm, "sm_send_response");
state->sm_send_response(fsm, msg);
setTransition(fsm, NULL);
}
void tsip_transac_nistContext_sm_timerJ(struct tsip_transac_nistContext* fsm)
{
const struct tsip_transac_nistState* state = getState(fsm);
assert(state != NULL);
setTransition(fsm, "sm_timerJ");
state->sm_timerJ(fsm);
setTransition(fsm, NULL);
}
void tsip_transac_nistContext_sm_transportError(struct tsip_transac_nistContext* fsm)
{
const struct tsip_transac_nistState* state = getState(fsm);
assert(state != NULL);
setTransition(fsm, "sm_transportError");
state->sm_transportError(fsm);
setTransition(fsm, NULL);
}
/*
* Local variables:
* buffer-read-only: t
* End:
*/