init ems server code
This commit is contained in:
758
plat/tcap/src/itcap.c
Normal file
758
plat/tcap/src/itcap.c
Normal file
@@ -0,0 +1,758 @@
|
||||
/* interface c file */
|
||||
/* written by Liu zhiguo 2002-08-16 */
|
||||
/* version 2.0 */
|
||||
/* ----------------------------- */
|
||||
#include "../../sccp/src/include/sccp.h"
|
||||
#include "./include/tcap_public.h"
|
||||
#include "./include/tcap_struct.h"
|
||||
#include "./include/idmanage.h"
|
||||
#include "./include/tcap_m.h"
|
||||
|
||||
/*@ignore@*/
|
||||
static u8 t10ms_flag;
|
||||
static u32 tcap_proc;
|
||||
|
||||
u32 tcap_dlg_h[MAX_DIALOGUEID];
|
||||
u32 tcap_dlg_t[MAX_DIALOGUEID];
|
||||
u32 tcap_dlg_stats[MAX_DIALOGUEID];
|
||||
|
||||
typedef struct id_struct
|
||||
{
|
||||
u32 current_did;
|
||||
u32 count_did;
|
||||
u32 count_did_occupied;
|
||||
u32 count_did_max;
|
||||
u32 count_did_tmp;
|
||||
u8 dialogue_id[MAX_DIALOGUEID];
|
||||
u8 current_iid[MAX_DIALOGUEID];
|
||||
u8 invoke_id[MAX_DIALOGUEID][MAX_INVOKEID];
|
||||
}id_struct;
|
||||
|
||||
extern struct id_struct *ID_ptr;
|
||||
|
||||
void tcap_disp_dlg(struct CSLdlg_struct *dha_ptr,u8 disp_flag)
|
||||
{
|
||||
char temp_buf[1024],temp_data[1024];
|
||||
char info_str[1024];
|
||||
char *cur_time;
|
||||
struct TCUni_struct *uni_ptr;
|
||||
struct TCBegin_struct *begin_ptr;
|
||||
struct TCContinue_struct *con_ptr;
|
||||
struct TCEnd_struct *end_ptr;
|
||||
struct TCUAbort_struct *uabrt_ptr;
|
||||
struct TCPAbort_struct *pabrt_ptr;
|
||||
u8 proto_type;
|
||||
|
||||
if (tcap_ptr->tcap_debug.send_control == 1)
|
||||
return;
|
||||
if (tcap_ptr->tcap_debug.tcu_switch == 0 && dha_ptr->dialogue_id != tcap_ptr->tcap_debug.monitor_did)
|
||||
return;
|
||||
if (disp_flag == 1) // send data to tc-user
|
||||
strcpy(info_str,"Dialogue tcap->tc user, time: ");
|
||||
else
|
||||
strcpy(info_str,"Dialogue tc user->tcap, time: ");
|
||||
cur_time = GetAsciiTime();
|
||||
strcat(info_str,cur_time);
|
||||
strcat(info_str,"\rType: ");
|
||||
if (dha_ptr->message_flag == REQUEST)
|
||||
sprintf(temp_buf,"\tFlag: Request\tDialogue id: %ld\r\n",dha_ptr->dialogue_id);
|
||||
else
|
||||
sprintf(temp_buf,"\tFlag: Indicate\tDialogue id: %ld\r\n",dha_ptr->dialogue_id);
|
||||
if ((dha_ptr->message_type & 0xE0) == ANSI_TAG_CLASS_CONS)
|
||||
proto_type = ANSI_TCAP;
|
||||
else
|
||||
proto_type = ITU_TCAP;
|
||||
switch (dha_ptr->message_type)
|
||||
{
|
||||
case Unidirectional:
|
||||
case Unidirectional_Ansi:
|
||||
if (dha_ptr->message_type == Unidirectional)
|
||||
strcat(info_str,"Unidirectional");
|
||||
else
|
||||
strcat(info_str,"Unidirectional_Ansi");
|
||||
strcat(info_str,temp_buf);
|
||||
uni_ptr = (TCUni_struct *) &dha_ptr->dlg_prim.tc_uni;
|
||||
if (uni_ptr->dialogue_flag == 1)
|
||||
{
|
||||
if (uni_ptr->dlg_data.acn_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,uni_ptr->dlg_data.acn,uni_ptr->dlg_data.acn_len);
|
||||
sprintf(temp_data,"ACN is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (uni_ptr->dlg_data.user_info_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,uni_ptr->dlg_data.user_info,uni_ptr->dlg_data.user_info_len);
|
||||
sprintf(temp_data,"User info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (proto_type)
|
||||
{
|
||||
if (uni_ptr->dlg_data.security_context_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,uni_ptr->dlg_data.security_context,uni_ptr->dlg_data.security_context_len);
|
||||
sprintf(temp_data,"Security context is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (uni_ptr->dlg_data.confidential_info_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,uni_ptr->dlg_data.confidential_info,uni_ptr->dlg_data.confidential_info_len);
|
||||
sprintf(temp_data,"Confidential info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (uni_ptr->component_present != 0)
|
||||
strcat(info_str,"Has component\r\n");
|
||||
strcat(info_str,"\r\n");
|
||||
break;
|
||||
case Begin:
|
||||
case Query_WithPerm_Ansi:
|
||||
case Query_WithoutPerm_Ansi:
|
||||
if (dha_ptr->message_type == Begin)
|
||||
strcat(info_str,"Begin");
|
||||
else if (dha_ptr->message_type == Query_WithPerm_Ansi)
|
||||
strcat(info_str,"Query_WithPerm_Ansi");
|
||||
else
|
||||
strcat(info_str,"Query_WithoutPerm_Ansi");
|
||||
strcat(info_str,temp_buf);
|
||||
begin_ptr = (TCBegin_struct *) &dha_ptr->dlg_prim.tc_begin;
|
||||
if (begin_ptr->dialogue_flag == 1)
|
||||
{
|
||||
if (begin_ptr->dlg_data.acn_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,begin_ptr->dlg_data.acn,begin_ptr->dlg_data.acn_len);
|
||||
sprintf(temp_data,"ACN is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (begin_ptr->dlg_data.user_info_len != 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,begin_ptr->dlg_data.user_info,begin_ptr->dlg_data.user_info_len);
|
||||
sprintf(temp_data,"User info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (proto_type)
|
||||
{
|
||||
if (begin_ptr->dlg_data.security_context_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,begin_ptr->dlg_data.security_context,begin_ptr->dlg_data.security_context_len);
|
||||
sprintf(temp_data,"Security context is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (begin_ptr->dlg_data.confidential_info_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,begin_ptr->dlg_data.confidential_info,begin_ptr->dlg_data.confidential_info_len);
|
||||
sprintf(temp_data,"Confidential info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (begin_ptr->component_present != 0)
|
||||
strcat(info_str,"Has component\r\n");
|
||||
strcat(info_str,"\r\n");
|
||||
break;
|
||||
case Continue:
|
||||
case Conversation_WithPerm_Ansi:
|
||||
case Conversation_WithoutPerm_Ansi:
|
||||
if (dha_ptr->message_type == Continue)
|
||||
strcat(info_str,"Continue");
|
||||
else if (dha_ptr->message_type == Conversation_WithPerm_Ansi)
|
||||
strcat(info_str,"Conversation_WithPerm_Ansi");
|
||||
else
|
||||
strcat(info_str,"Conversation_WithoutPerm_Ansi");
|
||||
strcat(info_str,temp_buf);
|
||||
con_ptr = (TCContinue_struct *) &dha_ptr->dlg_prim.tc_continue;
|
||||
if (con_ptr->dialogue_flag == 1)
|
||||
{
|
||||
if (con_ptr->dlg_data.acn_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,con_ptr->dlg_data.acn,con_ptr->dlg_data.acn_len);
|
||||
sprintf(temp_data,"ACN is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (con_ptr->dlg_data.user_info_len != 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,con_ptr->dlg_data.user_info,con_ptr->dlg_data.user_info_len);
|
||||
sprintf(temp_data,"User info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (proto_type)
|
||||
{
|
||||
if (con_ptr->dlg_data.security_context_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,con_ptr->dlg_data.security_context,con_ptr->dlg_data.security_context_len);
|
||||
sprintf(temp_data,"Security context is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (con_ptr->dlg_data.confidential_info_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,con_ptr->dlg_data.confidential_info,con_ptr->dlg_data.confidential_info_len);
|
||||
sprintf(temp_data,"Confidential info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (con_ptr->component_present != 0)
|
||||
strcat(info_str,"Has component\r\n");
|
||||
strcat(info_str,"\r\n");
|
||||
break;
|
||||
case End:
|
||||
case Response_Ansi:
|
||||
if (dha_ptr->message_type == End)
|
||||
strcat(info_str,"End");
|
||||
else
|
||||
strcat(info_str,"Response");
|
||||
strcat(info_str,temp_buf);
|
||||
end_ptr = (TCEnd_struct *) &dha_ptr->dlg_prim.tc_end;
|
||||
if (end_ptr->dialogue_flag == 1)
|
||||
{
|
||||
if (end_ptr->dlg_data.acn_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,end_ptr->dlg_data.acn,end_ptr->dlg_data.acn_len);
|
||||
sprintf(temp_data,"ACN is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (proto_type)
|
||||
{
|
||||
if (end_ptr->dlg_data.user_info_len != 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,end_ptr->dlg_data.user_info,end_ptr->dlg_data.user_info_len);
|
||||
sprintf(temp_data,"User info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (end_ptr->dlg_data.security_context_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,end_ptr->dlg_data.security_context,end_ptr->dlg_data.security_context_len);
|
||||
sprintf(temp_data,"Security context is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (end_ptr->dlg_data.confidential_info_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,end_ptr->dlg_data.confidential_info,end_ptr->dlg_data.confidential_info_len);
|
||||
sprintf(temp_data,"Confidential info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (end_ptr->component_present != 0)
|
||||
strcat(info_str,"Has component\r\n");
|
||||
strcat(info_str,"\r\n");
|
||||
break;
|
||||
case U_Abort:
|
||||
case U_Abort_Ansi:
|
||||
if (dha_ptr->message_type == U_Abort)
|
||||
strcat(info_str,"U_Abort");
|
||||
else
|
||||
strcat(info_str,"U_Abort_Ansi");
|
||||
strcat(info_str,temp_buf);
|
||||
uabrt_ptr = (TCUAbort_struct *) &dha_ptr->dlg_prim.tc_uabort;
|
||||
if (uabrt_ptr->dialogue_flag == 1)
|
||||
{
|
||||
if (uabrt_ptr->dlg_data.acn_len != 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,uabrt_ptr->dlg_data.acn,uabrt_ptr->dlg_data.acn_len);
|
||||
sprintf(temp_data,"ACN is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (proto_type)
|
||||
{
|
||||
if (uabrt_ptr->dlg_data.user_info_len != 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,uabrt_ptr->dlg_data.user_info,uabrt_ptr->dlg_data.user_info_len);
|
||||
sprintf(temp_data,"User info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (uabrt_ptr->dlg_data.security_context_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,uabrt_ptr->dlg_data.security_context,uabrt_ptr->dlg_data.security_context_len);
|
||||
sprintf(temp_data,"Security context is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
if (uabrt_ptr->dlg_data.confidential_info_len > 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,uabrt_ptr->dlg_data.confidential_info,uabrt_ptr->dlg_data.confidential_info_len);
|
||||
sprintf(temp_data,"Confidential info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!proto_type)
|
||||
{
|
||||
sprintf(temp_buf,"User abort reason: %d\r\n",uabrt_ptr->uabort_reason);
|
||||
strcat(info_str,temp_buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (uabrt_ptr->uabort_info_len != 0)
|
||||
{
|
||||
HexToDisplay(temp_buf,uabrt_ptr->uabort_info,uabrt_ptr->uabort_info_len);
|
||||
sprintf(temp_data,"User abort info is: %s\r\n",temp_buf);
|
||||
strcat(info_str,temp_data);
|
||||
}
|
||||
}
|
||||
strcat(info_str, "\r\n");
|
||||
break;
|
||||
case P_Abort:
|
||||
case P_Abort_Ansi:
|
||||
if (dha_ptr->message_type == P_Abort)
|
||||
strcat(info_str,"P_Abort");
|
||||
else
|
||||
strcat(info_str,"P_Abort_Ansi");
|
||||
strcat(info_str,temp_buf);
|
||||
pabrt_ptr = (TCPAbort_struct *) &dha_ptr->dlg_prim.tc_pabort;
|
||||
sprintf(temp_buf,"Provider abort reason: %d\r\n",pabrt_ptr->pabort_reason);
|
||||
strcat(info_str,temp_buf);
|
||||
strcat(info_str, "\r\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
tcap_send_ascout(info_str);
|
||||
}
|
||||
|
||||
void tcap_disp_cmp(struct CSLcmp_struct *cha_ptr,u8 disp_flag)
|
||||
{
|
||||
int ii=0;
|
||||
char temp_buf[1024];
|
||||
char info_str[1024];
|
||||
char *cur_time;
|
||||
u8 proto_type;
|
||||
struct TCInvoke_struct *invoke_ptr;
|
||||
struct TCResult_struct *result_ptr;
|
||||
struct TCUError_struct *uerror_ptr;
|
||||
struct TCReject_struct *reject_ptr;
|
||||
|
||||
if (tcap_ptr->tcap_debug.send_control == 1)
|
||||
return;
|
||||
if (tcap_ptr->tcap_debug.tcu_switch == 0 && cha_ptr->dialogue_id != tcap_ptr->tcap_debug.monitor_did)
|
||||
return;
|
||||
if (disp_flag == 1) // send data to tc-user
|
||||
strcpy(info_str,"Component tcap->tc user, time: ");
|
||||
else
|
||||
strcpy(info_str,"Component tc user->tcap, time: ");
|
||||
cur_time = GetAsciiTime();
|
||||
strcat(info_str,cur_time);
|
||||
strcat(info_str,"\rType: ");
|
||||
if (cha_ptr->message_flag == REQUEST)
|
||||
sprintf(temp_buf,"\tFlag: Request\tDialogue id: %ld, Invoke id: %d\r\n",cha_ptr->dialogue_id,cha_ptr->invoke_id);
|
||||
else
|
||||
sprintf(temp_buf,"\tFlag: Indicate\tDialogue id: %ld, Invoke id: %d\r\n",cha_ptr->dialogue_id,cha_ptr->invoke_id);
|
||||
if ((cha_ptr->message_type & 0xE0) == ANSI_TAG_CLASS_CONS)
|
||||
proto_type = ANSI_TCAP;
|
||||
else
|
||||
proto_type = ITU_TCAP;
|
||||
switch (cha_ptr->message_type)
|
||||
{
|
||||
case Invoke:
|
||||
case Invoke_L_Ansi:
|
||||
case Invoke_NL_Ansi:
|
||||
if (cha_ptr->message_type == Invoke)
|
||||
strcat(info_str,"Invoke");
|
||||
else if (cha_ptr->message_type == Invoke_L_Ansi)
|
||||
strcat(info_str,"Invoke_L_Ansi");
|
||||
else
|
||||
strcat(info_str,"Invoke_NL_Ansi");
|
||||
strcat(info_str,temp_buf);
|
||||
invoke_ptr = (TCInvoke_struct *) &cha_ptr->cmp_prim.tc_invoke;
|
||||
ii = invoke_ptr->parameter_len;
|
||||
if (cha_ptr->message_type == Invoke)
|
||||
sprintf(temp_buf,"Operation code: %d\tParameter len: %d\r\n",invoke_ptr->operation_code,ii);
|
||||
else
|
||||
sprintf(temp_buf,"Operation family: %d\tOperation code: %d\tParameter len: %d\r\n",invoke_ptr->operation_family,invoke_ptr->operation_code,ii);
|
||||
strcat(info_str,temp_buf);
|
||||
if (ii != 0)
|
||||
{
|
||||
strcat(info_str,"Parameter: ");
|
||||
HexToDisplay(temp_buf,invoke_ptr->parameter,ii);
|
||||
strcat(info_str,temp_buf);
|
||||
strcat(info_str,"\r\n");
|
||||
}
|
||||
strcat(info_str, "\r\n");
|
||||
break;
|
||||
case Result_L:
|
||||
case Result_NL:
|
||||
case Result_L_Ansi:
|
||||
case Result_NL_Ansi:
|
||||
if (cha_ptr->message_type == Result_L)
|
||||
strcat(info_str,"Result_L");
|
||||
else if (cha_ptr->message_type == Result_NL)
|
||||
strcat(info_str,"Result_NL");
|
||||
else if (cha_ptr->message_type == Result_L_Ansi)
|
||||
strcat(info_str,"Result_L_Ansi");
|
||||
else
|
||||
strcat(info_str,"Result_NL_Ansi");
|
||||
strcat(info_str,temp_buf);
|
||||
result_ptr = (TCResult_struct *) &cha_ptr->cmp_prim.tc_result;
|
||||
ii = result_ptr->parameter_len;
|
||||
if (ii != 0)
|
||||
{
|
||||
if ((cha_ptr->message_type == Result_L_Ansi) ||
|
||||
(cha_ptr->message_type == Result_NL_Ansi))
|
||||
sprintf(temp_buf,"Operation family: %d\tOperation code: %d\tParameter len: %d\r\n",result_ptr->operation_family,result_ptr->operation_code,ii);
|
||||
else
|
||||
sprintf(temp_buf,"Operation code: %d\tParameter len: %d\r\n",result_ptr->operation_code,ii);
|
||||
strcat(info_str,temp_buf);
|
||||
strcat(info_str,"Parameter: ");
|
||||
HexToDisplay(temp_buf,result_ptr->parameter,ii);
|
||||
strcat(info_str,temp_buf);
|
||||
strcat(info_str,"\r\n");
|
||||
}
|
||||
strcat(info_str, "\r\n");
|
||||
break;
|
||||
case U_Error:
|
||||
case U_Error_Ansi:
|
||||
if (cha_ptr->message_type == U_Error)
|
||||
strcat(info_str,"U_Error");
|
||||
else
|
||||
strcat(info_str,"U_Error_Ansi");
|
||||
strcat(info_str,temp_buf);
|
||||
uerror_ptr = (TCUError_struct *) &cha_ptr->cmp_prim.tc_uerror;
|
||||
ii = uerror_ptr->parameter_len;
|
||||
sprintf(temp_buf,"Error code: %d\tParameter len: %d\r\n",uerror_ptr->error_code,ii);
|
||||
strcat(info_str,temp_buf);
|
||||
if (ii != 0)
|
||||
{
|
||||
strcat(info_str,"Parameter: ");
|
||||
HexToDisplay(temp_buf,uerror_ptr->parameter,ii);
|
||||
strcat(info_str,temp_buf);
|
||||
strcat(info_str,"\r\n");
|
||||
}
|
||||
strcat(info_str, "\r\n");
|
||||
break;
|
||||
case U_Reject:
|
||||
case L_Reject:
|
||||
case R_Reject:
|
||||
case U_Reject_Ansi:
|
||||
case L_Reject_Ansi:
|
||||
case R_Reject_Ansi:
|
||||
switch (cha_ptr->message_type)
|
||||
{
|
||||
case U_Reject:
|
||||
strcat(info_str,"U_Reject");
|
||||
break;
|
||||
case L_Reject:
|
||||
strcat(info_str,"L_Reject");
|
||||
break;
|
||||
case R_Reject:
|
||||
strcat(info_str,"R_Reject");
|
||||
break;
|
||||
case U_Reject_Ansi:
|
||||
strcat(info_str,"U_Reject_Ansi");
|
||||
break;
|
||||
case L_Reject_Ansi:
|
||||
strcat(info_str,"L_Reject_Ansi");
|
||||
break;
|
||||
case R_Reject_Ansi:
|
||||
strcat(info_str,"R_Reject_Ansi");
|
||||
break;
|
||||
}
|
||||
strcat(info_str,temp_buf);
|
||||
reject_ptr = (TCReject_struct *) &cha_ptr->cmp_prim.tc_reject;
|
||||
sprintf(temp_buf,"Problem type: %d\tProblem code: %d",reject_ptr->problem_type,reject_ptr->problem_code);
|
||||
strcat(info_str,temp_buf);
|
||||
if (proto_type)
|
||||
{
|
||||
ii = reject_ptr->parameter_len;
|
||||
if (ii != 0)
|
||||
{
|
||||
sprintf(temp_buf,"\tParameter len: %d\r\n",ii);
|
||||
strcat(info_str,temp_buf);
|
||||
strcat(info_str,"Parameter: ");
|
||||
HexToDisplay(temp_buf,reject_ptr->parameter,ii);
|
||||
strcat(info_str,temp_buf);
|
||||
}
|
||||
}
|
||||
strcat(info_str,"\r\n\r\n");
|
||||
break;
|
||||
default:
|
||||
if (cha_ptr->message_type == L_Cancel)
|
||||
strcat(info_str,"Local cancel");
|
||||
else if (cha_ptr->message_type == U_Cancel)
|
||||
strcat(info_str,"User cancel");
|
||||
strcat(info_str,temp_buf);
|
||||
strcat(info_str,"\r\n");
|
||||
break;
|
||||
}
|
||||
tcap_send_ascout(info_str);
|
||||
}
|
||||
|
||||
u8 RecvTcapDlg(struct CSLdlg_struct *dha_ptr,u32 dlg_flag) // receive the dialogue portion
|
||||
{
|
||||
struct tcapint_struct *int_ptr;
|
||||
u8 ii;
|
||||
|
||||
if (dlg_flag >= (tcap_ptr->grantdid))
|
||||
return 0;
|
||||
int_ptr = (tcapint_struct *) &tcap_ptr->tcapint_data[dlg_flag];
|
||||
ii = int_ptr->dlgrecv_tail;
|
||||
if (ii == int_ptr->dlgrecv_head)
|
||||
return 0;
|
||||
memcpy(dha_ptr,&int_ptr->dlg_recv[ii],sizeof(CSLdlg_struct));
|
||||
int_ptr->dlgrecv_tail = (ii + 1) % MAX_TSL_BUF;
|
||||
tcap_disp_dlg(dha_ptr,1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 RecvTcapCmp(struct CSLcmp_struct *cha_ptr,u32 dlg_flag) // receive the component portion
|
||||
{
|
||||
struct tcapint_struct *int_ptr;
|
||||
u8 ii;
|
||||
struct tcapdebug_struct *debug_ptr = (tcapdebug_struct *) &tcap_ptr->tcap_debug;
|
||||
|
||||
if (dlg_flag >= (tcap_ptr->grantdid))
|
||||
{
|
||||
debug_ptr->watch_dog[247]++;
|
||||
return 0;
|
||||
}
|
||||
int_ptr = (tcapint_struct *) &tcap_ptr->tcapint_data[dlg_flag];
|
||||
ii = int_ptr->cmprecv_tail;
|
||||
if (ii == int_ptr->cmprecv_head)
|
||||
return 0;
|
||||
memcpy(cha_ptr,&int_ptr->cmp_recv[ii],sizeof(CSLcmp_struct));
|
||||
int_ptr->cmprecv_tail = (ii + 1) % MAX_CSL_BUF;
|
||||
tcap_disp_cmp(cha_ptr,1);
|
||||
debug_ptr->watch_dog[246]++;
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 SendTcapDlg(struct CSLdlg_struct *dha_ptr) // send the dialogue portion
|
||||
{
|
||||
struct tcapint_struct *int_ptr;
|
||||
u32 dlg_flag;
|
||||
u8 ii;
|
||||
char info_str[1024];
|
||||
struct tcapdebug_struct *debug_ptr = (tcapdebug_struct *) &tcap_ptr->tcap_debug;
|
||||
|
||||
dlg_flag = dha_ptr->dialogue_id;
|
||||
if (dlg_flag >= (tcap_ptr->grantdid))
|
||||
{
|
||||
debug_ptr->watch_dog[194]++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int_ptr = (tcapint_struct *) &tcap_ptr->tcapint_data[dlg_flag];
|
||||
ii = int_ptr->dlgsend_head;
|
||||
|
||||
if (tcap_dlg_h[dlg_flag] != int_ptr->dlgsend_head)
|
||||
{
|
||||
debug_ptr->watch_dog[192] ++;
|
||||
//printf("h: %d-%d\n", tcap_dlg_h[dlg_flag], int_ptr->dlgsend_head);
|
||||
}
|
||||
|
||||
if (((ii + 1) % MAX_TSL_BUF) == int_ptr->dlgsend_tail) // buffer is full
|
||||
{
|
||||
tcap_send_error("TCAP error. TCU to TCAP buffer is full");
|
||||
debug_ptr->watch_dog[193]++;
|
||||
return 0;
|
||||
}
|
||||
memcpy(&int_ptr->dlg_send[ii],dha_ptr,sizeof(CSLdlg_struct));
|
||||
int_ptr->dlgsend_head = (ii + 1) % MAX_TSL_BUF;
|
||||
|
||||
tcap_dlg_h[dlg_flag] = int_ptr->dlgsend_head;
|
||||
|
||||
switch (dha_ptr->message_type)
|
||||
{
|
||||
case U_Abort:
|
||||
case U_Abort_Ansi:
|
||||
if (tcap_ptr->tcap_debug.error_switch)
|
||||
{
|
||||
if (dha_ptr->message_type == U_Abort)
|
||||
sprintf(info_str,"CSL warning. Receive U_Abort from TC-user. Did: %ld",dlg_flag);
|
||||
else
|
||||
sprintf(info_str,"CSL warning. Receive U_Abort_Ansi from TC-user. Did: %ld",dlg_flag);
|
||||
tcap_send_error(info_str);
|
||||
}
|
||||
break;
|
||||
case P_Abort:
|
||||
case P_Abort_Ansi:
|
||||
if (tcap_ptr->tcap_debug.error_switch)
|
||||
{
|
||||
if (dha_ptr->message_type == P_Abort)
|
||||
sprintf(info_str,"CSL warning. Receive P_Abort from TC-user. Did: %ld",dlg_flag);
|
||||
else
|
||||
sprintf(info_str,"CSL warning. Receive P_Abort_Ansi from TC-user. Did: %ld",dlg_flag);
|
||||
tcap_send_error(info_str);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
tcap_disp_dlg(dha_ptr,2);
|
||||
if (dha_ptr->message_type == Begin)
|
||||
{
|
||||
if (ID_ptr->dialogue_id[dlg_flag] == 0)
|
||||
debug_ptr->watch_dog[183]++;
|
||||
if (++tcap_dlg_stats[dlg_flag] > 1)
|
||||
debug_ptr->watch_dog[182]++;
|
||||
debug_ptr->watch_dog[196]++;
|
||||
}
|
||||
debug_ptr->watch_dog[195]++;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
u8 SendTcapCmp(struct CSLcmp_struct *cha_ptr) // send the component portion
|
||||
{
|
||||
struct tcapint_struct *int_ptr;
|
||||
u32 dlg_flag;
|
||||
u8 inv_flag;
|
||||
u8 ii,jj,kk;
|
||||
struct tcapdebug_struct *debug_ptr = (tcapdebug_struct *) &tcap_ptr->tcap_debug;
|
||||
|
||||
dlg_flag = cha_ptr->dialogue_id;
|
||||
inv_flag = cha_ptr->invoke_id;
|
||||
if (dlg_flag >= (tcap_ptr->grantdid))
|
||||
{
|
||||
debug_ptr->watch_dog[253]++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//add by daniel on 2006-06-19, to release invoke id propery, if the component is not invoke, then the iid will be released
|
||||
if ((cha_ptr->message_type != Invoke ) &&
|
||||
(cha_ptr->message_type != Result_NL))
|
||||
{
|
||||
free_iid(dlg_flag,inv_flag);
|
||||
//tcap_send_ascout("sendTcapCmp free_iid\r\n");
|
||||
}
|
||||
//add by daniel on 2006-06-19, to release invoke id propery, if the component is not invoke, then the iid will be released
|
||||
|
||||
|
||||
int_ptr = (tcapint_struct *) &tcap_ptr->tcapint_data[dlg_flag];
|
||||
tcap_disp_cmp(cha_ptr,2);
|
||||
if (cha_ptr->message_type == U_Cancel)
|
||||
{
|
||||
ii = int_ptr->cmpsend_tail;
|
||||
while (ii != int_ptr->cmpsend_head) // search any INV component for this DID and TID
|
||||
{
|
||||
if (int_ptr->cmp_send[ii].invoke_id == inv_flag) // has data which is not sent out
|
||||
{
|
||||
jj = ii;
|
||||
kk = (ii + 1) % MAX_CSL_BUF;
|
||||
while (kk != int_ptr->cmpsend_head)
|
||||
{
|
||||
memcpy(&int_ptr->cmp_send[jj],&int_ptr->cmp_send[kk],sizeof(CSLcmp_struct));
|
||||
jj = (jj + 1) % MAX_CSL_BUF;
|
||||
kk = (kk + 1) % MAX_CSL_BUF;
|
||||
}
|
||||
if (int_ptr->cmpsend_head == 0)
|
||||
int_ptr->cmpsend_head = MAX_CSL_BUF - 1;
|
||||
else
|
||||
int_ptr->cmpsend_head -= 1;
|
||||
if (int_ptr->cmpsend_head == ii)
|
||||
{
|
||||
write_ism(cha_ptr);
|
||||
debug_ptr->watch_dog[238]++;
|
||||
debug_ptr->watch_dog[255]++;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
ii = (ii + 1) % MAX_CSL_BUF;
|
||||
debug_ptr->watch_dog[235]++;
|
||||
}
|
||||
write_ism(cha_ptr);
|
||||
debug_ptr->watch_dog[240]++;
|
||||
debug_ptr->watch_dog[255]++;
|
||||
return 1;
|
||||
}
|
||||
ii = int_ptr->cmpsend_head;
|
||||
if (((ii + 1) % MAX_CSL_BUF) == int_ptr->cmpsend_tail) // buffer full
|
||||
{
|
||||
tcap_send_alarm(3,1);
|
||||
tcap_send_error("CSL warning. ISM buffer is full");
|
||||
debug_ptr->watch_dog[254]++;
|
||||
return 0;
|
||||
}
|
||||
memcpy(&int_ptr->cmp_send[ii],cha_ptr,sizeof(CSLcmp_struct));
|
||||
int_ptr->cmpsend_head = (ii + 1) % MAX_CSL_BUF;
|
||||
if ((cha_ptr->message_type == U_Reject) ||
|
||||
(cha_ptr->message_type == U_Reject_Ansi) ||
|
||||
(cha_ptr->message_type == Invoke) ||
|
||||
(cha_ptr->message_type == Invoke_L_Ansi) ||
|
||||
(cha_ptr->message_type == Invoke_NL_Ansi))
|
||||
{
|
||||
debug_ptr->watch_dog[239]++;
|
||||
write_ism(cha_ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_ptr->watch_dog[237]++;
|
||||
if (cha_ptr->message_type != Result_L)
|
||||
{
|
||||
debug_ptr->watch_dog[236]++;
|
||||
// printf("tcap: %d\n", cha_ptr->message_type);
|
||||
}
|
||||
}
|
||||
debug_ptr->watch_dog[255]++;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void tcap_fsm(void) // TCAP state machine
|
||||
{
|
||||
register u32 proc;
|
||||
struct tcapdebug_struct *debug_ptr = (tcapdebug_struct *) &tcap_ptr->tcap_debug;
|
||||
|
||||
// write_paralport(TCAP_LED_CODE,1);
|
||||
t10ms_flag ++;
|
||||
if (t10ms_flag >= 2) // 20ms circle
|
||||
{
|
||||
t10ms_flag = 0;
|
||||
tcap_monitor();
|
||||
}
|
||||
for (proc = 0;proc < 64;proc++)
|
||||
tco_program();
|
||||
for (proc = 0;proc < (tcap_ptr->grantdid)/2;proc ++)
|
||||
{
|
||||
ism_program(tcap_proc);
|
||||
tsm_program(tcap_proc);
|
||||
if (tcap_proc != 0)
|
||||
{
|
||||
if (check_did(tcap_proc) || !xapp_check_did(tcap_proc))
|
||||
ID_ptr->count_did_tmp++;
|
||||
}
|
||||
if (tcap_proc == (tcap_ptr->grantdid - 1))
|
||||
{
|
||||
if ((ID_ptr->count_did_occupied = ID_ptr->count_did_tmp) > ID_ptr->count_did_max)
|
||||
ID_ptr->count_did_max = ID_ptr->count_did_occupied;
|
||||
ID_ptr->count_did_tmp = 0;
|
||||
memcpy(&debug_ptr->watch_dog[160], (BYTE *) &ID_ptr->count_did, sizeof(u32));
|
||||
memcpy(&debug_ptr->watch_dog[164], (BYTE *) &ID_ptr->count_did_occupied, sizeof(u32));
|
||||
memcpy(&debug_ptr->watch_dog[168], (BYTE *) &ID_ptr->count_did_max, sizeof(u32));
|
||||
}
|
||||
tcap_proc = (tcap_proc + 1) % (tcap_ptr->grantdid);
|
||||
}
|
||||
// write_paralport(TCAP_LED_CODE,0);
|
||||
}
|
||||
|
||||
int itcap_reg_ssn(u8 ssn)
|
||||
{
|
||||
return register_ssn(ssn,0);
|
||||
}
|
||||
|
||||
int tcap_get_grantdid()
|
||||
{
|
||||
return ((tcap_ptr->grantdid>MAX_DIALOGUEID) \
|
||||
? MAX_DIALOGUEID: tcap_ptr->grantdid);
|
||||
}
|
||||
|
||||
void tcap_init(int didgrant,DWORD localip,DWORD peerip) // init TCAP system
|
||||
{
|
||||
printf("Tcap init start!\n");
|
||||
if( didgrant <= 0 || didgrant > MAX_DIALOGUEID)
|
||||
{
|
||||
printf( "unexpect tcap did grant number!\r\n");
|
||||
exit(0);
|
||||
}
|
||||
init_id(didgrant);
|
||||
tcapvm_init(localip,peerip);
|
||||
tcap_ptr->grantdid = didgrant;
|
||||
init_m();
|
||||
t10ms_flag = 0;
|
||||
tcap_proc = 0;
|
||||
|
||||
memset(tcap_dlg_h, 0, sizeof(u32) * MAX_DIALOGUEID);
|
||||
memset(tcap_dlg_t, 0, sizeof(u32) * MAX_DIALOGUEID);
|
||||
memset(tcap_dlg_stats, 0, sizeof(u32) * MAX_DIALOGUEID);
|
||||
|
||||
printf("Tcap init complete!\n");
|
||||
}
|
||||
/*@end@*/
|
||||
Reference in New Issue
Block a user