📄 h323f.cpp
字号:
/**
* 终结,回到初始状态
*/
int h323_bidir_voice_state_local_on_hook_event(s_event* psEvent, s_task* psTask)
{
AppTerminateAction( ST_H323_BIDIR_VOICE_STATE );
return null_event;
}
int h323_bidir_voice_state_to_ringing_state(s_event* psEvent, s_task* psTask)
{
return null_event;
}
int h323_bidir_voice_state_to_query_availability_state(s_event* psEvent, s_task*
psTask)
{
return null_event;
}
/**
* 通话过程中呼叫转移,进入calltransfer开始等待按键
*/
int h323_bidir_voice_state_call_transfer_key_event(s_event* psEvent, s_task*
psTask)
{
return null_event;
}
int h323_ringing_state_to_on_hook_state(s_event* psEvent, s_task* psTask)
{
return null_event;
}
int h323_ringing_state_local_on_hook_event(s_event* psEvent, s_task* psTask)
{
AppTerminateAction( ST_H323_RINGING_STATE );
return to_on_hook_state;
}
/**
* 返回忙或进行呼叫转移
*/
int h323_ringing_state_receive_query_availability_event(s_event* psEvent,
s_task* psTask)
{
wp_msg = (WrapperMsg *)psEvent->pMsg;
AppReplyNotAvailOrFwd(wp_msg);
return null_event;
}
/**
* 终结terminate所指通道的通话,若为当前振铃的通话,记录未接来电
*/
int h323_ringing_state_receive_terminate_event(s_event* psEvent, s_task* psTask)
{
wp_msg = (WrapperMsg *)psEvent->pMsg;
if (callIndex != wp_msg->baseInfo.callIndex)
{
return null_event;
}
AppTerminateAction( ST_H323_RINGING_STATE );
/* 设置屏显计时器 */
return to_on_hook_state;
}
/**
* 根据全局量判断当前是CT、callforward还是
* 普通呼叫,发出对应的响应消息,记录
* 已接来电,产生to_wait_for_connect_state
*/
int h323_ringing_state_local_off_hook_event(s_event* psEvent, s_task* psTask)
{
/* WrapperMsg wpmsg;
wpmsg.baseInfo.callIndex = callIndex;
strcpy(wpmsg.baseInfo.localE164Num, "123");
strcpy(wpmsg.baseInfo.display, "fjd");
wpSendConn(&wpmsg);*/
AppSendWrapper( WP_SEND_CONN, callIndex );
return to_wait_for_connect_state;
}
/** Not used
* 清除calltransfer相关全局量
*/
int h323_ringing_state_call_transfer_abandon(s_event* psEvent, s_task* psTask)
{
return null_event;
}
/**
* 若设置CFNR,进行呼叫转移;否则,停止振铃,记录未接来电,产生to_on_hook_state;
*/
int h323_ringing_state_timeout_event(s_event* psEvent, s_task* psTask)
{
return null_event;
}
int h323_ringing_state_to_bidir_voice_state(s_event* psEvent, s_task* psTask)
{
return null_event;
}
int h323_ringing_state_to_wait_for_connect_state(s_event* psEvent, s_task*
psTask)
{
return null_event;
}
int h323_ringing_state_to_dead_end_state(s_event* psEvent, s_task* psTask)
{
return null_event;
}
int AppCalloutTransfer()
{
char lcdmsg[24];
int ip0, ip1, ip2, ip3;
digit_set[num_digits] = 0;
/* 判断输入的IP地址长度是否正确
* 固定为12位: xxx.xxx.xxx.xxx
* 号码不正确则屏显错误,退出处理
*/
if ((num_digits == 0) ||(!gkEnabled && digitCollectAmount == 13 && num_digits < 13)
|| (!gkEnabled && num_digits == 1 && digit_set[0] == '#')
|| (!gkEnabled && digit_set[0] !='*' && digit_set[0] != '#'))
{
/* PreserveLcdMessage = TRUE;
LcdShowMessage(H323_INVALID_NUMBER);
PlayBusyTone(ONE_SEC * 5);
if (muted && mutedByTransfer)
{
ToggleMute();
}
else if (muted)
{
muted = (muted + 1) & 1;
ToggleMute();
}
*/ return to_bidir_voice_state;
}
if (digitCollectAmount == -1 || gkEnabled)
{
TransferIPAddr[0] = 0;
}
else
{
ip3 = (digit_set[10]-'0')*100+(digit_set[11]-'0')*10+(digit_set[12]-'0');
ip2 = (digit_set[7]-'0')*100+(digit_set[8]-'0')*10+(digit_set[9]-'0');
ip1 = (digit_set[4]-'0')*100+(digit_set[5]-'0')*10+(digit_set[6]-'0');
ip0 = (digit_set[1]-'0')*100+(digit_set[2]-'0')*10+(digit_set[3]-'0');
if (ip3 > 255 || ip2 > 255 || ip1 > 255 || ip0 > 255)
{
/* PreserveLcdMessage = TRUE;
LcdShowMessage(H323_INVALID_NUMBER);
PlayBusyTone(ONE_SEC * 5);
if (muted && mutedByTransfer)
{
ToggleMute();
}
else if (muted)
{
muted = (muted + 1) & 1;
ToggleMute();
}*/
return to_bidir_voice_state;
}
TransferIPAddr[4] = 0;
TransferIPAddr[3] = ip3;
TransferIPAddr[2] = ip2;
TransferIPAddr[1] = ip1;
TransferIPAddr[0] = ip0;
sprintf(lcdmsg,"%d.%d.%d.%d",TransferIPAddr[0], TransferIPAddr[1],
TransferIPAddr[2], TransferIPAddr[3]);
/* LcdShowMessage(H323_TRANSFER_NUMBER);
WriteLcd(lcdmsg, 1, 0 ); */
}
/* if (gkEnabled)
H323TRACE("Local e164 = %s, digit_set = %s\n",
localE164Num, digit_set);
else
{
H323TRACE("Local IP = %d.%d.%d.%d\n",
localIPNumber[0], localIPNumber[1],localIPNumber[2],localIPNumber[3]);
H323TRACE("Transfer ip = %d.%d.%d.%d\n",
TransferIPAddr[0],TransferIPAddr[1],TransferIPAddr[2],TransferIPAddr[3]);
}
*/
/* 如果是转接到自己,则不作处理 */
if ((gkEnabled && (strcmp(localE164Num, digit_set) == 0))
|| (!gkEnabled && (localIPNumber[0] == TransferIPAddr[0]
&& localIPNumber[1] == TransferIPAddr[1]
&& localIPNumber[2] == TransferIPAddr[2]
&& localIPNumber[3] == TransferIPAddr[3])))
{
/* ClearLcd();
H323TRACE("Transfer to me\n");
PreserveLcdMessage = FALSE;
menu_event = null_event;
if (muted && mutedByTransfer)
{
ToggleMute();
}
else if (muted)
{
muted = (muted + 1) & 1;
ToggleMute();
}*/
return to_bidir_voice_state;
}
if(AppSendWrapper(WP_INITIATE_CALL_TRANSFER, callIndex) == ERROR)
{
#if 0
tone_playing = receiver_off_hook_tone;
PlayTone( receiver_off_hook_tone );
LcdShowMessage(H323_TRANSFER_FAILED);
menu_event = reset_event;
/* 设置屏显计时器 */
DeleteTimer(&h323_timer);
h323_timer = CreateTimer(ONE_SEC * 5);
if (muted && mutedByTransfer)
{
ToggleMute();
}
else if (muted)
{
muted = (muted + 1) & 1;
ToggleMute();
}
#endif
return to_bidir_voice_state;
}
else
{
/* tone_playing = receiver_off_hook_tone;
PlayTone( receiver_off_hook_tone );
*/
/* 设置等待响应计时器 */
/*h323_timer = THIRTY_SEC;*/
DeleteTimer(&h323_timer);
h323_timer = CreateTimer(CONNECT_TIME+5*ONE_SEC);
return to_await_call_transfer_state;
}
}
/**
* 收集、记录号码
*/
int h323_collect_transfer_digits_state_digit_event(s_event* psEvent, s_task*
psTask)
{
if (num_digits >= MAX_PHONE_NUMBER_LEN)
{
return null_event;
}
msg = (NonWrapperMsg *) psEvent->pMsg;
if (!gkEnabled)
{
if ((digitCollectAmount != -1) && (msg->digit > 9 || num_digits == digitCollectAmount))
return null_event;
if ((digitCollectAmount == -1) && (msg->digit == 10))
return null_event;
}
digit_set[num_digits] = msg->digit+'0';
if (digit_set[num_digits] == '0' + 10)
digit_set[num_digits] = '*';
else if (digit_set[num_digits] == '0' + 11)
digit_set[num_digits] = '#';
digit_set[num_digits+1] = '\0';
DeleteTimer(&h323_timer);
h323_timer = CreateTimer(FIFTEEN_SEC);
num_digits++;
if (!gkEnabled && num_digits == digitCollectAmount/* || (msg->digit == 11)*/)
{
return AppCalloutTransfer();
}
return null_event;
}
/**
* 提供速拨功能:
* 若已输入的号码在电话本的号码编号范围以内,
* 则拨出对应编号的电话号码
*/
int h323_collect_transfer_digits_state_long_digit_event(s_event* psEvent,
s_task* psTask)
{
return null_event;
}
/**
* 返回忙或进行呼叫转移
*/
int h323_collect_transfer_digits_state_receive_query_availability_event(s_event*
psEvent, s_task* psTask)
{
wp_msg = (WrapperMsg *)psEvent->pMsg;
AppReplyNotAvailOrFwd(wp_msg);
return null_event;
}
/**
* 终结terminate所指通道的通话
*/
int h323_collect_transfer_digits_state_receive_terminate_event(s_event* psEvent,
s_task* psTask)
{
wp_msg = (WrapperMsg *) psEvent->pMsg;
if (callIndex != wp_msg->baseInfo.callIndex)
{
return null_event;
}
/* Did we receive a terminate on the existing (first) call? */
if(callIndex == wp_msg->baseInfo.callIndex)
{
AppTerminateAction( ST_H323_COLLECT_TRANSFER_DIGITS_STATE );
return to_dead_end_state;
}
return null_event;
}
/**
* 播放转接音(ringback_tone);
* 发送WP_INITIATE_CALL_TRANSFER;
* 若出错产生to_bidir_voice_state事件
*/
int h323_collect_transfer_digits_state_callout_key_event(s_event* psEvent,
s_task* psTask)
{
return AppCalloutTransfer();
}
/**
* 播放转接音(ringback_tone);
* 发送WP_INITIATE_CALL_TRANSFER;
* 若出错产生to_bidir_voice_state事件
*/
int h323_collect_transfer_digits_state_timeout_event(s_event* psEvent, s_task*
psTask)
{
msg = (NonWrapperMsg *)psEvent->pMsg;
if ((msg->digit != h323_timer) && (msg->digit != call_forward_timer))
return null_event;
/* 计时器清零 */
h323_timer = -1;
starting_transfer = FALSE;
/* if (muted && mutedByTransfer)
{
ToggleMute();
mutedByTransfer = 0;
}*/
return to_bidir_voice_state;
}
/**
* 返回初始状态
*/
int h323_collect_transfer_digits_state_local_on_hook_event(s_event* psEvent,
s_task* psTask)
{
AppTerminateAction( ST_H323_COLLECT_TRANSFER_DIGITS_STATE );
return null_event;
}
/**
* 已输入的号码向前清除一位
*/
int h323_collect_transfer_digits_state_cancel_key_event(s_event* psEvent,
s_task* psTask)
{
digit_set[--num_digits] = '\0';
/*
if (num_digits > LCD_WIDTH)
{
ClearLcd();
WriteLcd(digit_set, 0, 0);
LcdDShowCursor(TRUE);
return null_event;
}*/
/* LcdShowMessage(H323_TRANSFER_NUMBER);
WriteLcd(digit_set, 1, 0);
LcdDShowCursor(TRUE);
*/
if (num_digits == 0)
{
return to_wait_first_digit_state;
}
return null_event;
}
/**
* 清空所有输入的内容,
* 回到wait_first_digit_state状态
*/
int h323_collect_transfer_digits_state_long_cancel_key_event(s_event* psEvent,
s_task* psTask)
{
return null_event;
}
int h323_collect_transfer_digits_state_to_dead_end_state(s_event* psEvent,
s_task* psTask)
{
return null_event;
}
int h323_collect_transfer_digits_state_to_wait_first_digit_state(s_event*
psEvent, s_task* psTask)
{
return null_event;
}
int h323_collect_transfer_digits_state_to_await_call_transfer_state(s_event*
psEvent, s_task* psTask)
{
return null_event;
}
int h323_collect_transfer_digits_state_to_bidir_voice_state(s_event* psEvent,
s_task* psTask)
{
return null_event;
}
/**
* 返回忙或进行呼叫转移
*/
int h323_await_call_transfer_state_receive_query_availability_event(s_event*
psEvent, s_task* psTask)
{
wp_msg = (WrapperMsg *)psEvent->pMsg;
AppReplyNotAvailOrFwd(wp_msg);
return null_event;
}
/**
* call transfer initiate result received
* 修改CT全局量,保持原状态,等待终结
*/
int h323_await_call_transfer_state_ct_init_result_rcvd(s_event* psEvent, s_task*
psTask)
{
wp_msg = (WrapperMsg *)psEvent->pMsg;
if (callIndex != wp_msg->baseInfo.callIndex)
{
return null_event;
}
/* 通知菜单复位 */
/* menu_event = reset_event; */
/* recordCallTime();*/
AppTerminateAction( ST_H323_AWAIT_CALL_TRANSFER_STATE );
/* PlayBusyTone(FIFTEEN_SEC);*/
return to_dead_end_state;
}
/**
* 终结terminate所指通道的通话,产生to_bir_voice_state或to_dead_end_state
*/
int h323_await_call_transfer_state_receive_terminate_event(s_event* psEvent,
s_task* psTask)
{
wp_msg = (WrapperMsg *)psEvent->pMsg;
if (callIndex != wp_msg->baseInfo.callIndex)
{
return null_event;
}
/* 通知菜单复位 */
/* menu_event = reset_event;*/
/* recordCallTime();*/
AppTerminateAction( ST_H323_AWAIT_CALL_TRANSFER_STATE );
/* PlayBusyTone(FIFTEEN_SEC);*/
return to_dead_end_state;
}
/**
* 终止CT,产生to_bidir_voice_state
*/
int h323_await_call_transfer_state_timeout_event(s_event* psEvent, s_task*
psTask)
{
msg = (NonWrapperMsg *)psEvent->pMsg;
if ((msg->digit != h323_timer) && (msg->digit != call_forward_timer))
return null_event;
/* 未进入菜单 */
/* recordCallTime();*/
AppTerminateAction(ST_H323_AWAIT_CALL_TRANSFER_STATE);
/* PlayBusyTone(FIFTEEN_SEC);*/
return to_dead_end_state;
}
/**
* 发送WP_CALL_TRANSFER_ABANDON至“C”;
* terminate“B”
*/
int h323_await_call_transfer_state_local_on_hook_event(s_event* psEvent, s_task*
psTask)
{
/* 设置计时器 */
DeleteTimer(&h323_timer);
h323_timer = CreateTimer(ONE_SEC * 5);
/* recordCallTime();*/
AppTerminateAction( ST_H323_AWAIT_CALL_TRANSFER_STATE );
/* menu_event = reset_event;*/
return null_event;
}
int h323_await_call_transfer_state_to_dead_end_state(s_event* psEvent, s_task*
psTask)
{
return null_event;
}
int h323_await_call_transfer_state_to_bidir_voice_state(s_event* psEvent,
s_task* psTask)
{
return null_event;
}
/*
int copyStrSafely(char *dst, char *src, int len)
{
strncpy(dst, src, len);
dst[len] = '\0';
if (strlen(src) < len)
{
return TRUE;
}
else
{
return FALSE;
}
}
*/
/**********************************************/
/* 等待第一次拨号超时或按拨出键,
* 则直接拨出待机时已输入号码
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -