Skip to content

Instantly share code, notes, and snippets.

@theKashey
Last active May 12, 2018 04:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save theKashey/93f10d036961f4bd7dd728153bc4bea9 to your computer and use it in GitHub Desktop.
Save theKashey/93f10d036961f4bd7dd728153bc4bea9 to your computer and use it in GitHub Desktop.
EDSS(Q.931 line), xState, 2005 year. C + Lua => C
#include "stdafx.h"
#include "l2_lapd.h"
@require "mpx.lua"
@include "../siglib/sys_signals.hh"
#include "../siglib/release_types.h"
//lua function RR(a)return a;end;
//lua function CL(a)return a;end;
#define CS_CALL_CLEAR 0
static LPCSTR EDSS_TIMER_NAME[]=
{
"T301",
"T302",
"T303",
"T304",
"T305",
"T306",
"T308",
"T309",
"T310",
"T313",
"T314",
"T316",
"T317",
"T318",
"T319",
"T321",
"T322"
};
static WORD EDSS_TIMER_INFO[]=
{
(1),// EDSS_T301
(15),// EDSS_T302
(30),// EDSS_T303
(15),// EDSS_T304
(4),// EDSS_T305
(30),// EDSS_T306
(4),// EDSS_T308
(90),// EDSS_T309
(20),// EDSS_T310
(4),// EDSS_T313
(4),// EDSS_T314
(120),// EDSS_T316
(90),// EDSS_T317
(4),// EDSS_T318
(4),// EDSS_T319
(30),// EDSS_T321
(4),// EDSS_T322
};
#define EDT_SET2CP T0+0
#define EDSS_RELTIMER T1
#define EDSS_T303 T0+2
#define EDSS_T304 T0+3
#define EDSS_T305 T0+4
#define EDSS_T306 T0+5
#define EDSS_T308 T0+6
#define EDSS_T309 T0+7
#define EDSS_T310 T0+8
#define EDSS_T313 T0+9
#define EDSS_T314 T0+10
#define EDSS_T316 T0+11
#define EDSS_T317 T0+12
#define EDSS_T318 T0+13
#define EDSS_T319 T0+14
#define EDSS_T321 T0+15
#define EDSS_T322 T0+16
@BEGIN_DECLARE_PROCESS(EDSS_LINE,"EDSS LINE")
@FIELD(WORD,CallID ,"CallID")
@FIELD(WORD,Orginate ,"Orginate")
@FIELD(PWORD,TimerTimeOut,"Timers timeout")
@FIELD(char,Calling[0xFF],"Call number")
@FIELD(char,Called[0xFF] ,"Self number")
@FIELD(BYTE,BChannel ,"Used bchannel");
@FIELD(WORD,AdTalking ,"SipAD i am talking with");
@FIELD(WORD,DAdTalking ,"SipAD i am talking with");
@FIELD(BYTE,LinkedWith ,"Have sip twin");
@FIELD(struct CF_Connect, ConnectData," holds connect data");
@FIELD(WORD,BreakOnSetup,"break on setup(due to lo channels)");
@FIELD(enum CF_ReleaseType,BREAK_REASON,"reason break");
@FIELD(WORD,TractReady,"is voicetract ready");
@FIELD(WORD,VoiceConnected,"is voice on");
@FIELD(WORD,TONP,"TractOnEvent bitmask");
@FIELD(WORD,EnableDTMF,"Enable DTMF on request");
@FIELD(time_t,StartTime,"TalkStartTime");
@FIELD(WORD,DelayAlertTimer,"Delay alert timer");
@END_DECLARE_PROCESS()
@BEGIN_CONTEXT_TRACE()
LPCSTR oREMOTE="REMOTE";
LPCSTR oTHIS ="THIS";
@XML_TRACE("CallID","%s|%d",(@THIS()->Orginate?oREMOTE:oTHIS),@THIS()->CallID);
@XML_TRACE("Calling","%s",@THIS()->Calling);
@XML_TRACE("Called","%s",@THIS()->Called);
@XML_TRACE("BChannel","%d",@THIS()->BChannel);
@XML_TRACE("AdTalking","%d",@THIS()->AdTalking);
@XML_TRACE("BreakOnSetup","%d",@THIS()->BreakOnSetup);
@XML_TRACE("VConn","%d",@THIS()->VoiceConnected);
@XML_TRACE("TractReady","%d",@THIS()->TractReady);
PrintAddr(siptmpBuf, @THIS()->ConnectData.Addr);
@XML_TRACE("connect addr", "%s:%d", siptmpBuf, @THIS()->ConnectData.Port)
@XML_TRACE("LinkedWith","%d",@THIS()->LinkedWith);
@END_CONTEXT_TRACE()
@BEGIN_DECLARE_STATES()
// General states
@DEFINE_STATE(EMPTY ,"empty")
@DEFINE_STATE(LOCKED ,"LOCKED");
@DEFINE_STATE(S_U0,"UO Idle State")
@DEFINE_STATE(S_U1,"U1 Call initiated")
@DEFINE_STATE(S_U2,"U2 Overlap sending")
@DEFINE_STATE(S_U3,"U3 Outgoing call proceeding")
@DEFINE_STATE(S_U4,"U4 Call delivered")
@DEFINE_STATE(S_U5,"U5 Call present")
@DEFINE_STATE(S_U6,"U6 BAD STATE")
@DEFINE_STATE(S_U7,"U7 Call resived")
@DEFINE_STATE(S_U8,"U8 Connect request")
@DEFINE_STATE(S_U9,"U9 Incoming Call Proceeding")
@DEFINE_STATE(S_S1O,"U10 Active")
@DEFINE_STATE(S_U11,"U11 Disconnect Request")
@DEFINE_STATE(S_U12,"U12 Disconnect Indication")
@DEFINE_STATE(S_U13,"U13")
@DEFINE_STATE(S_U14,"U14")
@DEFINE_STATE(S_U15,"U15 Suspend Request")
@DEFINE_STATE(S_U16,"U16")
@DEFINE_STATE(S_U17,"U17 Resume Request")
@DEFINE_STATE(S_U18,"U18")
@DEFINE_STATE(S_U19,"U19 Release Request")
@DEFINE_STATE(S_U2O,"U2O")
@DEFINE_STATE(S_U21,"U21")
@DEFINE_STATE(S_U22,"U22 Call Abort")
@DEFINE_STATE(S_U23,"U23")
@DEFINE_STATE(S_U24,"U24")
@DEFINE_STATE(S_U25,"U25 Overlap Receiving")
@END_DECLARE_STATES()
static void ClearThisLine(BOOL WithTimers)
{
if(WithTimers)
@RESET_ALL_TIMERS();
@THIS()->TimerTimeOut=EDSS_TIMER_INFO;
@THIS()->LinkedWith=0;
@THIS()->AdTalking=@THIS()->DAdTalking;
strcpy(@THIS()->Called ,"-");
strcpy(@THIS()->Calling,"-");
@THIS()->ConnectData.Port=0;
if(shedule_pCurBaseContext)
@SET_STATE(EMPTY);
@THIS()->BREAK_REASON=Release_Normal;
}
#define TUA_PROCEDING 1
#define TUA_ALLERTING 2
#define TUA_PROGRESS 4
@BEGIN_CALL_CONTEXT()
switch(@CODE())
{
case GET_TRACTFLAG:
*((long*)@PBUF()) = @THIS()->TONP;
return ERROR_noError;
case SET_TRACTFLAG:
@THIS()->TONP = (WORD) *((long*)@PBUF());
return ERROR_noError;
case GET_LineStatState:
if(@GET_STATE()!=@STATE(EMPTY))
{
*((long*)@PBUF())=@THIS()->Orginate?3:2;
if(@GET_STATE()==@STATE(S_S1O))*((long*)@PBUF())=4;
}
else *((long*)@PBUF())=1;
//printf("GET_LineStatState\n");
return ERROR_noError;
case GET_LineStatInCallerID:
strcpy((LPSTR)@PBUF(),@THIS()->Calling);
return ERROR_noError;
case GET_LineStatOutCallerID:
strcpy((LPSTR)@PBUF(),@THIS()->Called);
//printf("GET_LineStatOutCallerID\n");
return ERROR_noError;
case GET_LineStatTimeStart:
{
time_t cur_t;
struct tm* tt;
time(&cur_t);
cur_t-=@THIS()->StartTime;
tt = localtime(&cur_t);
sprintf((LPSTR)@PBUF(), "%.2d:%.2d:%.2d", tt->tm_hour, tt->tm_min, tt->tm_sec);
return ERROR_noError;
}
}
return ERROR_noSuchName;
@END_CALL_CONTEXT()
@BEGIN_INIT_CONTEXT()
@THIS()->EnableDTMF=1;
@THIS()->DAdTalking=5;
@THIS()->TONP=TUA_ALLERTING;
ClearThisLine(FALSE);
@SET_STATE(EMPTY);
@THIS()->DelayAlertTimer=0;
@END_INIT_CONTEXT()
static void FLOWMESSAGE(struct EDSS_MESSAGE *Sig);
static void SendLayerMessage(struct EDSS_MESSAGE *Message);
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_RESTART,LOCKED)
{
#define IS_REQ (@PEVENT()->Message->Request)
#define RMSG (@PEVENT()->Message)
#define GET_MIE(a) (GET_MESSAGE_IE(@PEVENT()->Message,a))
#define OUTMESSAGE(m,a) struct EDSS_MESSAGE m;ConstructMessage(&m,@THIS()->CallID,@THIS()->Orginate,a,@THIS())
}
@END_DECLARE_SIGNAL_ACTION()
@include "ed_line_sys.cc";
static void OnRestartCondition(const struct ED_SIG_MESSAGE *Sig,struct EDSS_MESSAGE *m)
{
WORD RII;
RII=DECODE__EDSS_IE_CODE_RESTART_INDICATOR(GET_MESSAGE_IE(Sig->Message,EDSS_IE_CODE_RESTART_INDICATOR));
{
@SIGNAL(ED_BCHAN_CTL,bcl);
bcl->From =0xFF;
bcl->Use =0;
if(RII==RII_ALL || RII==RII_SINGLE)
{
bcl->BChanID =0xFF;
@SEND(bcl);
}
else
{
struct EDSS_IE_DEF *IE=0;
while(IE=GET_MESSAGE_IE_EX(Sig->Message,EDSS_IE_CODE_RESTART_INDICATOR,IE))
{
if(m)
APPENDM(m,IE);
bcl->BChanID =DECODE__EDSS_IE_CODE_CHANEL_ID(IE);
@SEND(bcl);
}
}
}
}
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_RESTART)
@NEED_ACTION()
if(IS_REQ)
{
SendLayerMessage(RMSG);
}
else
{
OUTMESSAGE(m,EDSS_MSG_CODE_RESTART_ACK);
//first - ask same
APPENDM(&m,GET_MIE(EDSS_IE_CODE_RESTART_INDICATOR));
OnRestartCondition(@PEVENT(),&m);
//n send
FLOWMESSAGE(&m);
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_RESTART_ACK)
if(IS_REQ)
SendLayerMessage(RMSG);
else
//SEND_Release(0);
{
OnRestartCondition(@PEVENT(),0);
}
KILLSELF();
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(KL_START)
ClearThisLine(TRUE);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(KL_STOP)
ClearThisLine(TRUE);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_SETUP,S_U0)
if(IS_REQ)
{
SendLayerMessage(RMSG);
StartTimer(EDSS_T303);
@SET_STATE(S_U1);
}
else
{
//Indication(EDSS_SETUP_IND,@PEVENT());
OnSetupLine(@PEVENT());
//StartTimer(EDSS_T303);
@SET_STATE(S_U1);
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_SETUP)
@TRACE_OFF_FLAG()
@TRACE("GOT SECOND SETUP.. ignore")
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_DISCONNECT)
UpBreak();
if(IS_REQ)
{
SendLayerMessage(RMSG);
@SET_STATE(S_U11);
StartTimer(EDSS_T305);
}
else
{
ReleaseLink(CS_CALL_CLEAR);
@SET_STATE(S_U12);
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_STATUS)
if(@THIS()->CallID)SEND_ReleaseCmp();
KILLSELF();
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_RELEASE)
UpBreak();
if(IS_REQ)
{
SendLayerMessage(RMSG);
StopTimer(EDSS_T305);
StartTimer(EDSS_T308);
@SET_STATE(S_U19);
}
else
{
SEND_ReleaseCmp();
KILLSELF();
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSS_T305) // WHERE WAS NO ASK FOR DISCONNECT
if(@GET_STATE()==@STATE(S_U11))
{
ReleaseLink(0);
/*OUTMESSAGE(m,EDSS_MSG_CODE_CALL_PROCEEDING);
APPENDM(&m,CONSTRUCT__EDSS_IE_CODE_CHANEL_ID(@THIS()->BChannel));
INJECT(&m);
*/
}
else
{
@TRACE("T305(DISC) ENDS IN WRONG STATE.AND HOW IT HAPENDS?");
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSS_T308)// WHERE WAS NO ASK FOR RELEASE
if(@GET_STATE()==@STATE(S_U19))
{
SEND_ReleaseCmp();
KILLSELF();
}
else
{
@TRACE("T308(RELEASE) ENDS IN WRONG STATE.AND HOW IT HAPENDS?");
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_RELEASE_COMPLETE)
@SET_TIMER(EDSS_RELTIMER,0)
if(IS_REQ)
{
SendLayerMessage(RMSG);
}
else
{
}
KILLSELF();
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_SETUP,LOCKED)
@THIS()->AdTalking=@AD();
@THIS()->LinkedWith=1;
if(@THIS()->BreakOnSetup)
{
KILLSELF();
return;
}
@SET_STATE(S_U0);
{
// Запрашиваем преобразование номера
@SIGNAL(RT_REPLACE_RQ, rq);
rq->Hook = 100;
strcpy(rq->Set, @PEVENT()->To);
strcpy(@THIS()->Calling, @PEVENT()->To);
@NEXT_SYNC()
}
SetupLine(@PEVENT()->From,@THIS()->Calling,1);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(RT_REPLACED)
strcpy(@THIS()->Calling, @PEVENT()->Set);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(RT_NOTRESOLVED)
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(RT_NOTCOMPLETED)
StopTimer(EDT_SET2CP);
OUTMESSAGE(m,EDSS_MSG_CODE_SETUP_ACK);
//APPENDM(&m,CONSTRUCT__EDSS_IE_CODE_CHANEL_ID(@THIS()->BChannel));
FLOWMESSAGE(&m);
//StopTimer(EDSS_T304);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_SETUP)
@THIS()->AdTalking=@AD();
@THIS()->LinkedWith=1;
@TRACE("EDL:line%d got CF_SETUP not in LOCKED state",@CONTEXT());
KILLSELF();
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSS_RELTIMER)//,LOCKED)
SEND_ReleaseCmp();
KILLSELF();
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_RELEASE)
@TRACE("incoming release");
LineBreakRelease();
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_TRYNING)
OUTMESSAGE(m,EDSS_MSG_CODE_CALL_PROCEEDING);
APPENDM(&m,CONSTRUCT__EDSS_IE_CODE_CHANEL_ID(@THIS()->BChannel));
FLOWMESSAGE(&m);
StopTimer(EDSS_T304);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_COMPLETED)
OUTMESSAGE(m,EDSS_MSG_CODE_CALL_PROCEEDING);
APPENDM(&m,CONSTRUCT__EDSS_IE_CODE_CHANEL_ID(@THIS()->BChannel));
FLOWMESSAGE(&m);
StopTimer(EDSS_T304);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_NOTCOMPLETED)
OUTMESSAGE(m,EDSS_MSG_CODE_SETUP_ACK);
SendLayerMessage(&m);
if(@THIS()->EnableDTMF)
ToneCTL(EDT_DTMF_ON);
StartTimer(EDSS_T304);
@SET_STATE(S_U2);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSS_T304) // dial time ends. no number assepted
@TRACE("dial time ends. no number assepted");
KILLSELF();
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_SETUP_ACK)
@SIGNAL(CF_NOTCOMPLETED,nc);
@SEND(nc,@THIS()->AdTalking)
@SET_STATE(S_U2);
//ToneCTL(EDT_DTMF_ON);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_PROGRESS)
@SIGNAL(CF_PROGRESS,nc);
@SEND(nc,@THIS()->AdTalking)
TryUpTransfer(TUA_PROGRESS);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_INFORMATION)
struct EDSS_IE_DEF *CN=GET_MESSAGE_IE(@PEVENT()->Message,EDSS_IE_CODE_CALLED_PARTY_NUM);
if(CN)
{
LPCSTR To;
@SIGNAL(CF_DIGITS,dg);
To =DECODE__EDSS_IE_CODE_CALLED_PARTY_NUM(CN);
strcpy(dg->Set,To);
@SEND(dg,@THIS()->AdTalking);
RestartTimer(EDSS_T304);
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_DIGITS)
if(@AD()==8)
{
@SIGNAL(CF_DIGITS,dg);
memcpy(dg,@PEVENT(),sizeof(*dg));
@SEND(dg,@THIS()->AdTalking);
return;
}
if(strlen(@PEVENT()->Set)==1 && *(@PEVENT()->Set)=='#')
{
}
else
{
OUTMESSAGE(m,EDSS_MSG_CODE_INFORMATION);
strcat(@THIS()->Calling,@PEVENT()->Set);
APPENDM(&m,CONSTRUCT__EDSS_IE_CODE_CALLED_PARTY_NUM(@PEVENT()->Set));
SendLayerMessage(&m);
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_QUEUED)
OUTMESSAGE(m,EDSS_MSG_CODE_ALERTING);
SendLayerMessage(&m);
TryUpTransfer(TUA_ALLERTING);
ToneCTL(EDT_TONE_QUE);
@SET_STATE(S_U4);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_RINGING)
OUTMESSAGE(m,EDSS_MSG_CODE_ALERTING);
SendLayerMessage(&m);
TryUpTransfer(TUA_ALLERTING);
ToneCTL(EDT_TONE_RNG);
StopTimer(EDSS_T304);
@SET_STATE(S_U4);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_PROGRESS)
OUTMESSAGE(m,EDSS_MSG_CODE_PROGRESS);
SendLayerMessage(&m);
TryUpTransfer(TUA_PROGRESS);
StopTimer(EDSS_T304);
//ToneCTL(EDT_TONE_RNG);
//SET_STATE(S_U4);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_ANSWER)
OUTMESSAGE(m,EDSS_MSG_CODE_CONNECT);
SendLayerMessage(&m);
StopTimer(EDSS_T304);
@SET_STATE(S_S1O);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_ALERTING)
@SIGNAL(CF_RINGING,cfs);
@SEND(cfs,@THIS()->AdTalking);
TRYCHANGECHANNEL(@PEVENT());
TryUpTransfer(TUA_ALLERTING);
@SET_STATE(S_U4);
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_CONNECT)
{
@SIGNAL(CF_ANSWER,cfs);
@SEND(cfs,@THIS()->AdTalking);
}
TRYCHANGECHANNEL(@PEVENT());
{
OUTMESSAGE(m,EDSS_MSG_CODE_CONNECT_ACK);
SendLayerMessage(&m);
}
@THIS()->TractReady=TRUE;
SetUpTransfer();
ToneCTL(EDT_TONE_OFF);
@SET_STATE(S_S1O);
time(&(@THIS()->StartTime));
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_CONNECT_ACK)
@SIGNAL(CF_ANSWER,cfs);
@SEND(cfs,@THIS()->AdTalking);
@THIS()->TractReady=TRUE;
TRYCHANGECHANNEL(@PEVENT());
SetUpTransfer();
ToneCTL(EDT_TONE_OFF);
@SET_STATE(S_S1O);
time(&(@THIS()->StartTime));
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_CALL_PROCEEDING)
if(IS_REQ)
SendLayerMessage(RMSG);
else
{
@SIGNAL(CF_TRYNING,cfs);
@SEND(cfs,@THIS()->AdTalking);
@SET_STATE(S_U3);
TRYCHANGECHANNEL(@PEVENT());
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(ED_BCHAN_USE)
@THIS()->BChannel=@PEVENT()->BChanID;
@TRACE("EDL:line%d use channel %d",@CONTEXT(),@THIS()->BChannel);
SetUpTransfer();
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_CONNECT)
//control channel
@SIGNAL(CF_ECHO_ON, echo_on)
@SIGNAL(CF_ECHO_OFF, echo_off)
memcpy(&@THIS()->ConnectData,@PEVENT(),sizeof(@THIS()->ConnectData));
@TRACE("connect info set to line");
SetUpTransfer();
if(@PEVENT()->Codec!=G711a)
{ @SEND(echo_on) }
else if(@PEVENT()->Echo)
{ @SEND(echo_on) }
else
{ @SEND(echo_off) }
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_HOLD)
if(@THIS()->BChannel)
{
@SIGNAL(CF_HOLD,cpc);
@NEXT_CONTEXT(@THIS()->BChannel)
@SEND(cpc,8);
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(CF_UNHOLD)
if(@THIS()->BChannel)
{
@SIGNAL(CF_UNHOLD,cpc);
@NEXT_CONTEXT(@THIS()->BChannel)
@SEND(cpc,8);
}
@END_DECLARE_SIGNAL_ACTION()
@BEGIN_DECLARE_SIGNAL_ACTION(EDSIG_SUSPEND)
OUTMESSAGE(m,EDSIG_SUSPEND_REJ);
SendLayerMessage(&m);
@END_DECLARE_SIGNAL_ACTION()
#include "stdafx.h"
#include "l2_lapd.h"
#include "../siglib/sys_signals.h" // auto include
#include "../siglib/release_types.h"
//lua function RR(a)return a;end;
//lua function CL(a)return a;end;
#define CS_CALL_CLEAR 0
static LPCSTR EDSS_TIMER_NAME[]=
{
"T301",
"T302",
"T303",
"T304",
"T305",
"T306",
"T308",
"T309",
"T310",
"T313",
"T314",
"T316",
"T317",
"T318",
"T319",
"T321",
"T322"
};
static WORD EDSS_TIMER_INFO[]=
{
(1),// EDSS_T301
(15),// EDSS_T302
(30),// EDSS_T303
(15),// EDSS_T304
(4),// EDSS_T305
(30),// EDSS_T306
(4),// EDSS_T308
(90),// EDSS_T309
(20),// EDSS_T310
(4),// EDSS_T313
(4),// EDSS_T314
(120),// EDSS_T316
(90),// EDSS_T317
(4),// EDSS_T318
(4),// EDSS_T319
(30),// EDSS_T321
(4),// EDSS_T322
};
#define EDT_SET2CP T0+0
#define EDSS_RELTIMER T1
#define EDSS_T303 T0+2
#define EDSS_T304 T0+3
#define EDSS_T305 T0+4
#define EDSS_T306 T0+5
#define EDSS_T308 T0+6
#define EDSS_T309 T0+7
#define EDSS_T310 T0+8
#define EDSS_T313 T0+9
#define EDSS_T314 T0+10
#define EDSS_T316 T0+11
#define EDSS_T317 T0+12
#define EDSS_T318 T0+13
#define EDSS_T319 T0+14
#define EDSS_T321 T0+15
#define EDSS_T322 T0+16
struct EDSS_LINE__ContextType
{
WORD CallID; // CallID
WORD Orginate; // Orginate
PWORD TimerTimeOut; // Timers timeout
char Calling[0xFF]; // Call number
char Called[0xFF]; // Self number
BYTE BChannel; // Used bchannel;
WORD AdTalking; // SipAD i am talking with;
WORD DAdTalking; // SipAD i am talking with;
BYTE LinkedWith; // Have sip twin;
struct CF_Connect ConnectData; // holds connect data;
WORD BreakOnSetup; // break on setup(due to lo channels);
enum CF_ReleaseType BREAK_REASON; // reason break;
WORD TractReady; // is voicetract ready;
WORD VoiceConnected; // is voice on;
WORD TONP; // TractOnEvent bitmask;
WORD EnableDTMF; // Enable DTMF on request;
time_t StartTime; // TalkStartTime;
WORD DelayAlertTimer; // Delay alert timer;
};
#define ThisProcess ((struct EDSS_LINE__ContextType*)(pContext->pContext))
#define This ((struct EDSS_LINE__ContextType*)shedule_pCurContext)
WORD PrintContext__EDSS_LINE(struct AU_BaseContext* pContext, char* pOut, size_t BufLen)
{ size_t offset=0;
LPCSTR oREMOTE="REMOTE";
LPCSTR oTHIS ="THIS";
{sprintf(pOut+offset, "<CallID data=\"%s|%d\"%s", ThisProcess->Orginate?oREMOTE:oTHIS, ThisProcess->CallID, "/>\r\n");
offset+=strlen(pOut+offset);};
{sprintf(pOut+offset, "<Calling data=\"%s\"%s", ThisProcess->Calling, "/>\r\n");
offset+=strlen(pOut+offset);};
{sprintf(pOut+offset, "<Called data=\"%s\"%s", ThisProcess->Called, "/>\r\n");
offset+=strlen(pOut+offset);};
{sprintf(pOut+offset, "<BChannel data=\"%d\"%s", ThisProcess->BChannel, "/>\r\n");
offset+=strlen(pOut+offset);};
{sprintf(pOut+offset, "<AdTalking data=\"%d\"%s", ThisProcess->AdTalking, "/>\r\n");
offset+=strlen(pOut+offset);};
{sprintf(pOut+offset, "<BreakOnSetup data=\"%d\"%s", ThisProcess->BreakOnSetup, "/>\r\n");
offset+=strlen(pOut+offset);};
{sprintf(pOut+offset, "<VConn data=\"%d\"%s", ThisProcess->VoiceConnected, "/>\r\n");
offset+=strlen(pOut+offset);};
{sprintf(pOut+offset, "<TractReady data=\"%d\"%s", ThisProcess->TractReady, "/>\r\n");
offset+=strlen(pOut+offset);};
PrintAddr(siptmpBuf, ThisProcess->ConnectData.Addr);
{sprintf(pOut+offset, "<connect addr data=\"%s:%d\"%s", siptmpBuf, ThisProcess->ConnectData.Port, "/>\r\n");
offset+=strlen(pOut+offset);}
{sprintf(pOut+offset, "<LinkedWith data=\"%d\"%s", ThisProcess->LinkedWith, "/>\r\n");
offset+=strlen(pOut+offset);};
return (WORD)strlen(pOut);
}
// -- States for EDSS_LINE --
// General states
;
enum EDSS_LINE__StatesEnum
{
EDSS_LINE_State_EMPTY = 0, // empty
EDSS_LINE_State_LOCKED = 1, // LOCKED
EDSS_LINE_State_S_U0 = 2, // UO Idle State
EDSS_LINE_State_S_U1 = 3, // U1 Call initiated
EDSS_LINE_State_S_U2 = 4, // U2 Overlap sending
EDSS_LINE_State_S_U3 = 5, // U3 Outgoing call proceeding
EDSS_LINE_State_S_U4 = 6, // U4 Call delivered
EDSS_LINE_State_S_U5 = 7, // U5 Call present
EDSS_LINE_State_S_U6 = 8, // U6 BAD STATE
EDSS_LINE_State_S_U7 = 9, // U7 Call resived
EDSS_LINE_State_S_U8 = 10, // U8 Connect request
EDSS_LINE_State_S_U9 = 11, // U9 Incoming Call Proceeding
EDSS_LINE_State_S_S1O = 12, // U10 Active
EDSS_LINE_State_S_U11 = 13, // U11 Disconnect Request
EDSS_LINE_State_S_U12 = 14, // U12 Disconnect Indication
EDSS_LINE_State_S_U13 = 15, // U13
EDSS_LINE_State_S_U14 = 16, // U14
EDSS_LINE_State_S_U15 = 17, // U15 Suspend Request
EDSS_LINE_State_S_U16 = 18, // U16
EDSS_LINE_State_S_U17 = 19, // U17 Resume Request
EDSS_LINE_State_S_U18 = 20, // U18
EDSS_LINE_State_S_U19 = 21, // U19 Release Request
EDSS_LINE_State_S_U2O = 22, // U2O
EDSS_LINE_State_S_U21 = 23, // U21
EDSS_LINE_State_S_U22 = 24, // U22 Call Abort
EDSS_LINE_State_S_U23 = 25, // U23
EDSS_LINE_State_S_U24 = 26, // U24
EDSS_LINE_State_S_U25 = 27, // U25 Overlap Receiving
};
static struct _AU_StateInfo StatesNames__EDSS_LINE[] =
{
{"EMPTY", "empty"},
{"LOCKED", "LOCKED"},
{"S_U0", "UO Idle State"},
{"S_U1", "U1 Call initiated"},
{"S_U2", "U2 Overlap sending"},
{"S_U3", "U3 Outgoing call proceeding"},
{"S_U4", "U4 Call delivered"},
{"S_U5", "U5 Call present"},
{"S_U6", "U6 BAD STATE"},
{"S_U7", "U7 Call resived"},
{"S_U8", "U8 Connect request"},
{"S_U9", "U9 Incoming Call Proceeding"},
{"S_S1O", "U10 Active"},
{"S_U11", "U11 Disconnect Request"},
{"S_U12", "U12 Disconnect Indication"},
{"S_U13", "U13"},
{"S_U14", "U14"},
{"S_U15", "U15 Suspend Request"},
{"S_U16", "U16"},
{"S_U17", "U17 Resume Request"},
{"S_U18", "U18"},
{"S_U19", "U19 Release Request"},
{"S_U2O", "U2O"},
{"S_U21", "U21"},
{"S_U22", "U22 Call Abort"},
{"S_U23", "U23"},
{"S_U24", "U24"},
{"S_U25", "U25 Overlap Receiving"},
{NULL, NULL}
};
static void ClearThisLine(BOOL WithTimers)
{
if(WithTimers)
BreakEventAllTimersByContext(shedule_pCurBaseContext, shedule_pCurrentProcess->ID, shedule_nContext);;
This->TimerTimeOut=EDSS_TIMER_INFO;
This->LinkedWith=0;
This->AdTalking=This->DAdTalking;
strcpy(This->Called ,"-");
strcpy(This->Calling,"-");
This->ConnectData.Port=0;
if(shedule_pCurBaseContext)
{shedule_pCurBaseContext->State=EDSS_LINE_State_EMPTY;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
This->BREAK_REASON=Release_Normal;
}
#define TUA_PROCEDING 1
#define TUA_ALLERTING 2
#define TUA_PROGRESS 4
int EDSS_LINE__CallContext(struct AU_Process* pCurProcess, struct AU_BaseContext* pContext, WORD nContext, DWORD Code, void* pOut, size_t BufLen)
{
switch(Code)
{
case GET_TRACTFLAG:
*((long*)pOut) = ThisProcess->TONP;
return ERROR_noError;
case SET_TRACTFLAG:
ThisProcess->TONP = (WORD) *((long*)pOut);
return ERROR_noError;
case GET_LineStatState:
if(pContext->State!=EDSS_LINE_State_EMPTY)
{
*((long*)pOut)=ThisProcess->Orginate?3:2;
if(pContext->State==EDSS_LINE_State_S_S1O)*((long*)pOut)=4;
}
else *((long*)pOut)=1;
//printf("GET_LineStatState\n");
return ERROR_noError;
case GET_LineStatInCallerID:
strcpy((LPSTR)pOut,ThisProcess->Calling);
return ERROR_noError;
case GET_LineStatOutCallerID:
strcpy((LPSTR)pOut,ThisProcess->Called);
//printf("GET_LineStatOutCallerID\n");
return ERROR_noError;
case GET_LineStatTimeStart:
{
time_t cur_t;
struct tm* tt;
time(&cur_t);
cur_t-=ThisProcess->StartTime;
tt = localtime(&cur_t);
sprintf((LPSTR)pOut, "%.2d:%.2d:%.2d", tt->tm_hour, tt->tm_min, tt->tm_sec);
return ERROR_noError;
}
}
return ERROR_noSuchName;
}
void EDSS_LINE__InitContext(WORD nContext, struct AU_BaseContext* pContext)
{
ThisProcess->EnableDTMF=1;
ThisProcess->DAdTalking=5;
ThisProcess->TONP=TUA_ALLERTING;
ClearThisLine(FALSE);
pContext->State=EDSS_LINE_State_EMPTY;;
ThisProcess->DelayAlertTimer=0;
}
static void FLOWMESSAGE(struct EDSS_MESSAGE *Sig);
static void SendLayerMessage(struct EDSS_MESSAGE *Message);
void EDSS_LINE__OnSignal__EDSIG_RESTART__InState__LOCKED(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
{
#define IS_REQ (pSignal->Message->Request)
#define RMSG (pSignal->Message)
#define GET_MIE(a) (GET_MESSAGE_IE(pSignal->Message,a))
#define OUTMESSAGE(m,a) struct EDSS_MESSAGE m;ConstructMessage(&m,This->CallID,This->Orginate,a,This)
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
#include "ed_line_sys.c" // auto include
static void OnRestartCondition(const struct ED_SIG_MESSAGE *Sig,struct EDSS_MESSAGE *m)
{
WORD RII;
RII=DECODE__EDSS_IE_CODE_RESTART_INDICATOR(GET_MESSAGE_IE(Sig->Message,EDSS_IE_CODE_RESTART_INDICATOR));
{
struct sED_BCHANCTL a1066_buffer_bcl; struct sED_BCHANCTL* bcl = &a1066_buffer_bcl;;
bcl->From =0xFF;
bcl->Use =0;
if(RII==RII_ALL || RII==RII_SINGLE)
{
bcl->BChanID =0xFF;
_sfSendSignal(ED_BCHAN_CTL, FALSE, sizeof(struct sED_BCHANCTL), (char*)(bcl));;
}
else
{
struct EDSS_IE_DEF *IE=0;
while(IE=GET_MESSAGE_IE_EX(Sig->Message,EDSS_IE_CODE_RESTART_INDICATOR,IE))
{
if(m)
APPENDM(m,IE);
bcl->BChanID =DECODE__EDSS_IE_CODE_CHANEL_ID(IE);
_sfSendSignal(ED_BCHAN_CTL, FALSE, sizeof(struct sED_BCHANCTL), (char*)(bcl));;
}
}
}
}
void EDSS_LINE__OnSignal__EDSIG_RESTART__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
if(IS_REQ)
{
SendLayerMessage(RMSG);
}
else
{
OUTMESSAGE(m,EDSS_MSG_CODE_RESTART_ACK);
//first - ask same
APPENDM(&m,GET_MIE(EDSS_IE_CODE_RESTART_INDICATOR));
OnRestartCondition(pSignal,&m);
//n send
FLOWMESSAGE(&m);
}
}
void EDSS_LINE__OnSignal__EDSIG_RESTART_ACK__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
if(IS_REQ)
SendLayerMessage(RMSG);
else
//SEND_Release(0);
{
OnRestartCondition(pSignal,0);
}
KILLSELF();
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__KL_START__Default()
{
ClearThisLine(TRUE);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__KL_STOP__Default()
{
ClearThisLine(TRUE);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_SETUP__InState__S_U0(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
if(IS_REQ)
{
SendLayerMessage(RMSG);
StartTimer(EDSS_T303);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U1;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
}
else
{
//Indication(EDSS_SETUP_IND,pSignal);
OnSetupLine(pSignal);
//StartTimer(EDSS_T303);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U1;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_SETUP__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
if(shedule_pCurBaseContext->TraceCnt){_XML_Trace(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, TraceBuffer);sprintf(TraceBuffer+(WORD)strlen(TraceBuffer), "GOT SECOND SETUP.. ignore%s\r\n", "</text>\r\n</hint>\r\n"); TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_DISCONNECT__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
UpBreak();
if(IS_REQ)
{
SendLayerMessage(RMSG);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U11;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
StartTimer(EDSS_T305);
}
else
{
ReleaseLink(CS_CALL_CLEAR);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U12;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_STATUS__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
if(This->CallID)SEND_ReleaseCmp();
KILLSELF();
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_RELEASE__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
UpBreak();
if(IS_REQ)
{
SendLayerMessage(RMSG);
StopTimer(EDSS_T305);
StartTimer(EDSS_T308);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U19;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
}
else
{
SEND_ReleaseCmp();
KILLSELF();
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSS_T305__Default(const * pSignal, WORD SignalLen)
{
// WHERE WAS NO ASK FOR DISCONNECT
if(shedule_pCurBaseContext->State==EDSS_LINE_State_S_U11)
{
ReleaseLink(0);
/*OUTMESSAGE(m,EDSS_MSG_CODE_CALL_PROCEEDING);
APPENDM(&m,CONSTRUCT__EDSS_IE_CODE_CHANEL_ID(This->BChannel));
INJECT(&m);
*/
}
else
{
if(shedule_pCurBaseContext->TraceCnt){_XML_Trace(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, TraceBuffer);sprintf(TraceBuffer+(WORD)strlen(TraceBuffer), "T305(DISC) ENDS IN WRONG STATE.AND HOW IT HAPENDS?%s\r\n", "</text>\r\n</hint>\r\n"); TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));};
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSS_T308__Default(const * pSignal, WORD SignalLen)
{
// WHERE WAS NO ASK FOR RELEASE
if(shedule_pCurBaseContext->State==EDSS_LINE_State_S_U19)
{
SEND_ReleaseCmp();
KILLSELF();
}
else
{
if(shedule_pCurBaseContext->TraceCnt){_XML_Trace(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, TraceBuffer);sprintf(TraceBuffer+(WORD)strlen(TraceBuffer), "T308(RELEASE) ENDS IN WRONG STATE.AND HOW IT HAPENDS?%s\r\n", "</text>\r\n</hint>\r\n"); TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));};
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_RELEASE_COMPLETE__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
SetEventTimer(shedule_pCurBaseContext, shedule_pCurrentProcess->ID, shedule_nContext, EDSS_RELTIMER-T0, 0, FALSE, TRUE);
if(IS_REQ)
{
SendLayerMessage(RMSG);
}
else
{
}
KILLSELF();
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_SETUP__InState__LOCKED(const struct CF_Setup* pSignal, WORD SignalLen)
{
This->AdTalking=shedule_pEvent->AdapterNo;
This->LinkedWith=1;
if(This->BreakOnSetup)
{
KILLSELF();
return;
}
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U0;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
{
// Запрашиваем преобразование номера
struct RT_DestinationRq a1066_buffer_rq; struct RT_DestinationRq* rq = &a1066_buffer_rq;;
rq->Hook = 100;
strcpy(rq->Set, pSignal->To);
strcpy(This->Calling, pSignal->To);
sSyncSignalFlag = TRUE;
}
SetupLine(pSignal->From,This->Calling,1);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__RT_REPLACED__Default(const struct RT_DestinationRq* pSignal, WORD SignalLen)
{
strcpy(This->Calling, pSignal->Set);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__RT_NOTRESOLVED__Default(const struct RT_DestinationNotResolved* pSignal, WORD SignalLen)
{
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__RT_NOTCOMPLETED__Default(const struct RT_DestinationNotResolved* pSignal, WORD SignalLen)
{
StopTimer(EDT_SET2CP);
OUTMESSAGE(m,EDSS_MSG_CODE_SETUP_ACK);
//APPENDM(&m,CONSTRUCT__EDSS_IE_CODE_CHANEL_ID(This->BChannel));
FLOWMESSAGE(&m);
//StopTimer(EDSS_T304);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_SETUP__Default(const struct CF_Setup* pSignal, WORD SignalLen)
{
This->AdTalking=shedule_pEvent->AdapterNo;
This->LinkedWith=1;
if(shedule_pCurBaseContext->TraceCnt){_XML_Trace(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, TraceBuffer);sprintf(TraceBuffer+(WORD)strlen(TraceBuffer), "EDL:line%d got CF_SETUP not in LOCKED state%s\r\n", shedule_nContext, "</text>\r\n</hint>\r\n"); TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));};
KILLSELF();
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSS_RELTIMER__Default(const * pSignal, WORD SignalLen)
{
//,LOCKED)
SEND_ReleaseCmp();
KILLSELF();
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_RELEASE__Default(const struct CF_Release* pSignal, WORD SignalLen)
{
if(shedule_pCurBaseContext->TraceCnt){_XML_Trace(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, TraceBuffer);sprintf(TraceBuffer+(WORD)strlen(TraceBuffer), "incoming release%s\r\n", "</text>\r\n</hint>\r\n"); TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));};
LineBreakRelease();
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_TRYNING__Default()
{
OUTMESSAGE(m,EDSS_MSG_CODE_CALL_PROCEEDING);
APPENDM(&m,CONSTRUCT__EDSS_IE_CODE_CHANEL_ID(This->BChannel));
FLOWMESSAGE(&m);
StopTimer(EDSS_T304);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_COMPLETED__Default(const struct CF_Completed* pSignal, WORD SignalLen)
{
OUTMESSAGE(m,EDSS_MSG_CODE_CALL_PROCEEDING);
APPENDM(&m,CONSTRUCT__EDSS_IE_CODE_CHANEL_ID(This->BChannel));
FLOWMESSAGE(&m);
StopTimer(EDSS_T304);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_NOTCOMPLETED__Default()
{
OUTMESSAGE(m,EDSS_MSG_CODE_SETUP_ACK);
SendLayerMessage(&m);
if(This->EnableDTMF)
ToneCTL(EDT_DTMF_ON);
StartTimer(EDSS_T304);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U2;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSS_T304__Default(const * pSignal, WORD SignalLen)
{
// dial time ends. no number assepted
if(shedule_pCurBaseContext->TraceCnt){_XML_Trace(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, TraceBuffer);sprintf(TraceBuffer+(WORD)strlen(TraceBuffer), "dial time ends. no number assepted%s\r\n", "</text>\r\n</hint>\r\n"); TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));};
KILLSELF();
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_SETUP_ACK__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
// Signal CF_NOTCOMPLETED nc;
_sfSendSignalTo(CF_NOTCOMPLETED, FALSE, 0, NULL,This->AdTalking);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U2;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
//ToneCTL(EDT_DTMF_ON);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_PROGRESS__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
// Signal CF_PROGRESS nc;
_sfSendSignalTo(CF_PROGRESS, FALSE, 0, NULL,This->AdTalking);
TryUpTransfer(TUA_PROGRESS);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_INFORMATION__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
struct EDSS_IE_DEF *CN=GET_MESSAGE_IE(pSignal->Message,EDSS_IE_CODE_CALLED_PARTY_NUM);
if(CN)
{
LPCSTR To;
struct CF_Digits a1066_buffer_dg; struct CF_Digits* dg = &a1066_buffer_dg;;
To =DECODE__EDSS_IE_CODE_CALLED_PARTY_NUM(CN);
strcpy(dg->Set,To);
_sfSendSignalTo(CF_DIGITS, FALSE, sizeof(struct CF_Digits), (char*)(dg), This->AdTalking);;
RestartTimer(EDSS_T304);
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_DIGITS__Default(const struct CF_Digits* pSignal, WORD SignalLen)
{
if(shedule_pEvent->AdapterNo==8)
{
struct CF_Digits a1066_buffer_dg; struct CF_Digits* dg = &a1066_buffer_dg;;
memcpy(dg,pSignal,sizeof(*dg));
_sfSendSignalTo(CF_DIGITS, FALSE, sizeof(struct CF_Digits), (char*)(dg), This->AdTalking);;
return;
}
if(strlen(pSignal->Set)==1 && *(pSignal->Set)=='#')
{
}
else
{
OUTMESSAGE(m,EDSS_MSG_CODE_INFORMATION);
strcat(This->Calling,pSignal->Set);
APPENDM(&m,CONSTRUCT__EDSS_IE_CODE_CALLED_PARTY_NUM(pSignal->Set));
SendLayerMessage(&m);
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_QUEUED__Default()
{
OUTMESSAGE(m,EDSS_MSG_CODE_ALERTING);
SendLayerMessage(&m);
TryUpTransfer(TUA_ALLERTING);
ToneCTL(EDT_TONE_QUE);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U4;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_RINGING__Default()
{
OUTMESSAGE(m,EDSS_MSG_CODE_ALERTING);
SendLayerMessage(&m);
TryUpTransfer(TUA_ALLERTING);
ToneCTL(EDT_TONE_RNG);
StopTimer(EDSS_T304);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U4;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_PROGRESS__Default()
{
OUTMESSAGE(m,EDSS_MSG_CODE_PROGRESS);
SendLayerMessage(&m);
TryUpTransfer(TUA_PROGRESS);
StopTimer(EDSS_T304);
//ToneCTL(EDT_TONE_RNG);
//SET_STATE(S_U4);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_ANSWER__Default()
{
OUTMESSAGE(m,EDSS_MSG_CODE_CONNECT);
SendLayerMessage(&m);
StopTimer(EDSS_T304);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_S1O;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_ALERTING__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
// Signal CF_RINGING cfs;
_sfSendSignalTo(CF_RINGING, FALSE, 0, NULL,This->AdTalking);;
TRYCHANGECHANNEL(pSignal);
TryUpTransfer(TUA_ALLERTING);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U4;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_CONNECT__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
{
// Signal CF_ANSWER cfs;
_sfSendSignalTo(CF_ANSWER, FALSE, 0, NULL,This->AdTalking);;
}
TRYCHANGECHANNEL(pSignal);
{
OUTMESSAGE(m,EDSS_MSG_CODE_CONNECT_ACK);
SendLayerMessage(&m);
}
This->TractReady=TRUE;
SetUpTransfer();
ToneCTL(EDT_TONE_OFF);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_S1O;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
time(&(This->StartTime));
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_CONNECT_ACK__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
// Signal CF_ANSWER cfs;
_sfSendSignalTo(CF_ANSWER, FALSE, 0, NULL,This->AdTalking);;
This->TractReady=TRUE;
TRYCHANGECHANNEL(pSignal);
SetUpTransfer();
ToneCTL(EDT_TONE_OFF);
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_S1O;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
time(&(This->StartTime));
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_CALL_PROCEEDING__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
if(IS_REQ)
SendLayerMessage(RMSG);
else
{
// Signal CF_TRYNING cfs;
_sfSendSignalTo(CF_TRYNING, FALSE, 0, NULL,This->AdTalking);;
{shedule_pCurBaseContext->State=EDSS_LINE_State_S_U3;if(shedule_pCurBaseContext->TraceCnt){_XML_TraceState(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pName, StatesNames__EDSS_LINE[shedule_pCurBaseContext->State].pDescription, TraceBuffer);TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));}};
TRYCHANGECHANNEL(pSignal);
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__ED_BCHAN_USE__Default(const struct sED_BCHANCTL* pSignal, WORD SignalLen)
{
This->BChannel=pSignal->BChanID;
if(shedule_pCurBaseContext->TraceCnt){_XML_Trace(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, TraceBuffer);sprintf(TraceBuffer+(WORD)strlen(TraceBuffer), "EDL:line%d use channel %d%s\r\n", shedule_nContext, This->BChannel, "</text>\r\n</hint>\r\n"); TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));};
SetUpTransfer();
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_CONNECT__Default(const struct CF_Connect* pSignal, WORD SignalLen)
{
//control channel
// Signal CF_ECHO_ON echo_on
// Signal CF_ECHO_OFF echo_off
memcpy(&This->ConnectData,pSignal,sizeof(This->ConnectData));
if(shedule_pCurBaseContext->TraceCnt){_XML_Trace(shedule_pCurrentProcess, shedule_pCurBaseContext, shedule_nContext, TraceBuffer);sprintf(TraceBuffer+(WORD)strlen(TraceBuffer), "connect info set to line%s\r\n", "</text>\r\n</hint>\r\n"); TraceMessage(shedule_pCurrentProcess, shedule_nContext, TraceBuffer, (WORD)strlen(TraceBuffer));};
SetUpTransfer();
if(pSignal->Codec!=G711a)
{ _sfSendSignal(CF_ECHO_ON, FALSE, 0, NULL); }
else if(pSignal->Echo)
{ _sfSendSignal(CF_ECHO_ON, FALSE, 0, NULL); }
else
{ _sfSendSignal(CF_ECHO_OFF, FALSE, 0, NULL); }
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_HOLD__Default()
{
if(This->BChannel)
{
// Signal CF_HOLD cpc;
snContext = SheduleSendContext; SheduleSendContext = This->BChannel;
_sfSendSignalTo(CF_HOLD, FALSE, 0, NULL,8); SheduleSendContext = snContext;;
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__CF_UNHOLD__Default()
{
if(This->BChannel)
{
// Signal CF_UNHOLD cpc;
snContext = SheduleSendContext; SheduleSendContext = This->BChannel;
_sfSendSignalTo(CF_UNHOLD, FALSE, 0, NULL,8); SheduleSendContext = snContext;;
}
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
void EDSS_LINE__OnSignal__EDSIG_SUSPEND__Default(const struct ED_SIG_MESSAGE* pSignal, WORD SignalLen)
{
OUTMESSAGE(m,EDSIG_SUSPEND_REJ);
SendLayerMessage(&m);
shedule_pCurBaseContext->ActivityFlag = TRUE;
}
// ***** SUPER_FINISH(cc) ***** Root file="ed_line"
// ***** DECLARE_PROCESS
static char sEDSS_LINE__XMLSignalMap[] =
"<signalmap>\r\n\
<signal id=KL_STOP>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=ED_ORGINATE>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=RT_NOTRESOLVED>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDT_SET2CP>\r\n\
<state id=S_U1/>\r\n\
<state id=/>\r\n\
</signal>\r\n\
<signal id=RT_NOTCOMPLETED>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_ALERTING>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_INFORMATION>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_CONNECT_ACK>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=CF_RINGING>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=CF_ANSWER>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_RELEASE_COMPLETE>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=ED_LOCKLINK>\r\n\
<state id=EMPTY/>\r\n\
</signal>\r\n\
<signal id=EDSIG_STATUS>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_RELEASE>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=CF_NOTCOMPLETED>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=CF_COMPLETED>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_SETUP>\r\n\
<state id=S_U0/>\r\n\
<state id=/>\r\n\
</signal>\r\n\
<signal id=CF_CONNECT>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSS_RELTIMER>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_SETUP_ACK>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=ED_CONNECT>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_DISCONNECT>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_PROGRESS>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_SUSPEND>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSS_T304>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSS_T308>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=KL_START>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=CF_DIGITS>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_RESTART_ACK>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=TF>\r\n\
<state id=LOCKED/>\r\n\
</signal>\r\n\
<signal id=CF_SETUP>\r\n\
<state id=LOCKED/>\r\n\
<state id=/>\r\n\
</signal>\r\n\
<signal id=CF_HOLD>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=CF_TRYNING>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_RESTART>\r\n\
<state id=LOCKED/>\r\n\
<state id=/>\r\n\
</signal>\r\n\
<signal id=ED_NEW>\r\n\
<state id=LOCKED/>\r\n\
<state id=EMPTY/>\r\n\
</signal>\r\n\
<signal id=CF_RELEASE>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=RT_REPLACED>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_CONNECT>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=CF_PROGRESS>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=CF_UNHOLD>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSIG_CALL_PROCEEDING>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=ED_BCHAN_USE>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=CF_QUEUED>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
<signal id=EDSS_T305>\r\n\
<state id=""/>\r\n\
</signal>\r\n\
</signalmap>";
const char* get_EDSS_LINE__XMLSignalMap() {return sEDSS_LINE__XMLSignalMap;}
void EDSS_LINE__ProcessEvents(const struct AU_Event* pEvent)
{
shedule_pEvent = (struct AU_Event*)pEvent;
snContext = SheduleSendContext;
sSyncSignalFlag = FALSE;
shedule_pCurBaseContext->ActivityFlag = FALSE;
switch(pEvent->Code)
{
case KL_STOP:
switch(shedule_pCurBaseContext->State)
{
default:
EDSS_LINE__OnSignal__KL_STOP__Default();
}
break;
case ED_ORGINATE:
EDSS_LINE__OnSignal__ED_ORGINATE__Default((const struct sED_LINEID*)(pEvent->pData), pEvent->DataLen);
break;
case RT_NOTRESOLVED:
EDSS_LINE__OnSignal__RT_NOTRESOLVED__Default((const struct RT_DestinationNotResolved*)(pEvent->pData), pEvent->DataLen);
break;
case EDT_SET2CP:
switch(shedule_pCurBaseContext->State)
{
case EDSS_LINE_State_S_U1:
EDSS_LINE__OnSignal__EDT_SET2CP__InState__S_U1((const *)(pEvent->pData), pEvent->DataLen);
break;
default:
EDSS_LINE__OnSignal__EDT_SET2CP__Default((const *)(pEvent->pData), pEvent->DataLen);
}
break;
case RT_NOTCOMPLETED:
EDSS_LINE__OnSignal__RT_NOTCOMPLETED__Default((const struct RT_DestinationNotResolved*)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_ALERTING:
EDSS_LINE__OnSignal__EDSIG_ALERTING__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_INFORMATION:
EDSS_LINE__OnSignal__EDSIG_INFORMATION__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_CONNECT_ACK:
EDSS_LINE__OnSignal__EDSIG_CONNECT_ACK__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case CF_RINGING:
switch(shedule_pCurBaseContext->State)
{
default:
EDSS_LINE__OnSignal__CF_RINGING__Default();
}
break;
case CF_ANSWER:
switch(shedule_pCurBaseContext->State)
{
default:
EDSS_LINE__OnSignal__CF_ANSWER__Default();
}
break;
case EDSIG_RELEASE_COMPLETE:
EDSS_LINE__OnSignal__EDSIG_RELEASE_COMPLETE__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case ED_LOCKLINK:
switch(shedule_pCurBaseContext->State)
{
case EDSS_LINE_State_EMPTY:
EDSS_LINE__OnSignal__ED_LOCKLINK__InState__EMPTY((const struct sED_LINEID*)(pEvent->pData), pEvent->DataLen);
break;
}
break;
case EDSIG_STATUS:
EDSS_LINE__OnSignal__EDSIG_STATUS__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_RELEASE:
EDSS_LINE__OnSignal__EDSIG_RELEASE__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case CF_NOTCOMPLETED:
switch(shedule_pCurBaseContext->State)
{
default:
EDSS_LINE__OnSignal__CF_NOTCOMPLETED__Default();
}
break;
case CF_COMPLETED:
EDSS_LINE__OnSignal__CF_COMPLETED__Default((const struct CF_Completed*)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_SETUP:
switch(shedule_pCurBaseContext->State)
{
case EDSS_LINE_State_S_U0:
EDSS_LINE__OnSignal__EDSIG_SETUP__InState__S_U0((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
default:
EDSS_LINE__OnSignal__EDSIG_SETUP__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
}
break;
case CF_CONNECT:
EDSS_LINE__OnSignal__CF_CONNECT__Default((const struct CF_Connect*)(pEvent->pData), pEvent->DataLen);
break;
case EDSS_RELTIMER:
EDSS_LINE__OnSignal__EDSS_RELTIMER__Default((const *)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_SETUP_ACK:
EDSS_LINE__OnSignal__EDSIG_SETUP_ACK__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case ED_CONNECT:
EDSS_LINE__OnSignal__ED_CONNECT__Default((const struct CF_Connect*)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_DISCONNECT:
EDSS_LINE__OnSignal__EDSIG_DISCONNECT__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_PROGRESS:
EDSS_LINE__OnSignal__EDSIG_PROGRESS__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_SUSPEND:
EDSS_LINE__OnSignal__EDSIG_SUSPEND__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case EDSS_T304:
EDSS_LINE__OnSignal__EDSS_T304__Default((const *)(pEvent->pData), pEvent->DataLen);
break;
case EDSS_T308:
EDSS_LINE__OnSignal__EDSS_T308__Default((const *)(pEvent->pData), pEvent->DataLen);
break;
case KL_START:
switch(shedule_pCurBaseContext->State)
{
default:
EDSS_LINE__OnSignal__KL_START__Default();
}
break;
case CF_DIGITS:
EDSS_LINE__OnSignal__CF_DIGITS__Default((const struct CF_Digits*)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_RESTART_ACK:
EDSS_LINE__OnSignal__EDSIG_RESTART_ACK__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case TF:
switch(shedule_pCurBaseContext->State)
{
case EDSS_LINE_State_LOCKED:
EDSS_LINE__OnSignal__TF__InState__LOCKED();
break;
}
break;
case CF_SETUP:
switch(shedule_pCurBaseContext->State)
{
case EDSS_LINE_State_LOCKED:
EDSS_LINE__OnSignal__CF_SETUP__InState__LOCKED((const struct CF_Setup*)(pEvent->pData), pEvent->DataLen);
break;
default:
EDSS_LINE__OnSignal__CF_SETUP__Default((const struct CF_Setup*)(pEvent->pData), pEvent->DataLen);
}
break;
case CF_HOLD:
switch(shedule_pCurBaseContext->State)
{
default:
EDSS_LINE__OnSignal__CF_HOLD__Default();
}
break;
case CF_TRYNING:
switch(shedule_pCurBaseContext->State)
{
default:
EDSS_LINE__OnSignal__CF_TRYNING__Default();
}
break;
case EDSIG_RESTART:
switch(shedule_pCurBaseContext->State)
{
case EDSS_LINE_State_LOCKED:
EDSS_LINE__OnSignal__EDSIG_RESTART__InState__LOCKED((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
default:
EDSS_LINE__OnSignal__EDSIG_RESTART__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
}
break;
case ED_NEW:
switch(shedule_pCurBaseContext->State)
{
case EDSS_LINE_State_LOCKED: case EDSS_LINE_State_EMPTY:
EDSS_LINE__OnSignal__ED_NEW__In__LOCKED_EMPTY((const struct sED_LINEID*)(pEvent->pData), pEvent->DataLen);
break;
}
break;
case CF_RELEASE:
EDSS_LINE__OnSignal__CF_RELEASE__Default((const struct CF_Release*)(pEvent->pData), pEvent->DataLen);
break;
case RT_REPLACED:
EDSS_LINE__OnSignal__RT_REPLACED__Default((const struct RT_DestinationRq*)(pEvent->pData), pEvent->DataLen);
break;
case EDSIG_CONNECT:
EDSS_LINE__OnSignal__EDSIG_CONNECT__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case CF_PROGRESS:
switch(shedule_pCurBaseContext->State)
{
default:
EDSS_LINE__OnSignal__CF_PROGRESS__Default();
}
break;
case CF_UNHOLD:
switch(shedule_pCurBaseContext->State)
{
default:
EDSS_LINE__OnSignal__CF_UNHOLD__Default();
}
break;
case EDSIG_CALL_PROCEEDING:
EDSS_LINE__OnSignal__EDSIG_CALL_PROCEEDING__Default((const struct ED_SIG_MESSAGE*)(pEvent->pData), pEvent->DataLen);
break;
case ED_BCHAN_USE:
EDSS_LINE__OnSignal__ED_BCHAN_USE__Default((const struct sED_BCHANCTL*)(pEvent->pData), pEvent->DataLen);
break;
case CF_QUEUED:
switch(shedule_pCurBaseContext->State)
{
default:
EDSS_LINE__OnSignal__CF_QUEUED__Default();
}
break;
case EDSS_T305:
EDSS_LINE__OnSignal__EDSS_T305__Default((const *)(pEvent->pData), pEvent->DataLen);
break;
default:
{
sprintf(pErrorString, "Signal not processed! Process:%s Context:%d Signal:%d Len:%d From:%d Route:%d", shedule_pCurrentProcess->Name, shedule_nContext, pEvent->Code, pEvent->DataLen, pEvent->From, pEvent->Route);
ErrorStack_Push(pErrorString);
}
}
if(!shedule_pCurBaseContext->ActivityFlag)
{
char tmp[100];
PrintSignalCode(pEvent->Code, tmp);
sprintf(pErrorString, "Activity flag filed! Process:%s Context:%d Signal:%d(%s)", shedule_pCurrentProcess->Name, shedule_nContext, pEvent->Code, tmp);
ErrorStack_Push(pErrorString);
}
}
BOOL EDSS_LINE__TuneContext(struct AU_BaseContext* pContext, WORD nContext, const char* pParam, const char* pParamValue);
BOOL EDSS_LINE__TraceContext(struct AU_BaseContext* pContext, WORD nContext, char* pOut, size_t OutLen);
const char* get_EDSS_LINE__XMLClassInfo();
const char* get_EDSS_LINE__XMLSignalMap();
void RegisterProcess__EDSS_LINEClass(struct AU_ProcessTemplate* pClass)
{
sprintf(pClass->Description, "EDSS LINE");
pClass->pInitFunc = EDSS_LINE__InitContext;
pClass->pTuneFunc = EDSS_LINE__TuneContext;
pClass->pTraceFunc = EDSS_LINE__TraceContext;
pClass->pEventFunc = EDSS_LINE__ProcessEvents;
pClass->pBaseInfoFunc = get_EDSS_LINE__XMLClassInfo;
pClass->pSignalMapFunc = get_EDSS_LINE__XMLSignalMap;
pClass->pCallFunc = EDSS_LINE__CallContext;
pClass->ExtContextSize = sizeof(struct EDSS_LINE__ContextType);
}
BOOL EDSS_LINE__TraceContext(struct AU_BaseContext* pBaseContext, WORD nContext, char* pOut, size_t OutLen)
{
size_t offset;
offset = _XML_TraceContext(shedule_pCurrentProcess, pBaseContext, nContext, StatesNames__EDSS_LINE[pBaseContext->State].pName, StatesNames__EDSS_LINE[pBaseContext->State].pDescription, pOut);
PrintContext__EDSS_LINE(pBaseContext, pOut+offset, OutLen);
offset+=strlen(pOut+offset);
sprintf(pOut+offset, "</params>\r\n</context>");
return TRUE;
}
BOOL EDSS_LINE__TuneContext(struct AU_BaseContext* pContext, WORD nContext, const char* pParam, const char* pParamValue)
{
return FALSE;
}
static char EDSS_LINE_XMLClassInfo[] =
"<class name=EDSS_LINE info=\"EDSS LINE\">\r\n\
<states>\r\n\
<state id=S_U14>U14</state>\r\n\
<state id=LOCKED>LOCKED</state>\r\n\
<state id=S_U25>U25 Overlap Receiving</state>\r\n\
<state id=S_U24>U24</state>\r\n\
<state id=S_U15>U15 Suspend Request</state>\r\n\
<state id=S_U23>U23</state>\r\n\
<state id=S_U6>U6 BAD STATE</state>\r\n\
<state id=S_U16>U16</state>\r\n\
<state id=S_U0>UO Idle State</state>\r\n\
<state id=S_U19>U19 Release Request</state>\r\n\
<state id=S_U22>U22 Call Abort</state>\r\n\
<state id=S_U18>U18</state>\r\n\
<state id=S_U11>U11 Disconnect Request</state>\r\n\
<state id=S_U5>U5 Call present</state>\r\n\
<state id=S_U12>U12 Disconnect Indication</state>\r\n\
<state id=S_U21>U21</state>\r\n\
<state id=S_U17>U17 Resume Request</state>\r\n\
<state id=S_U1>U1 Call initiated</state>\r\n\
<state id=S_U9>U9 Incoming Call Proceeding</state>\r\n\
<state id=S_U13>U13</state>\r\n\
<state id=EMPTY>empty</state>\r\n\
<state id=S_S1O>U10 Active</state>\r\n\
<state id=S_U2>U2 Overlap sending</state>\r\n\
<state id=S_U3>U3 Outgoing call proceeding</state>\r\n\
<state id=S_U4>U4 Call delivered</state>\r\n\
<state id=S_U7>U7 Call resived</state>\r\n\
<state id=S_U8>U8 Connect request</state>\r\n\
<state id=S_U2O>U2O</state>\r\n\
</states>\r\n\
<tunes>\r\n\
</tunes>\r\n\
<signal_map>\r\n\
</signal_map>\r\n\
</class>\r\n";
const char* get_EDSS_LINE__XMLClassInfo() {return EDSS_LINE_XMLClassInfo;}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment