h323.cpp

来自「基于h323协议的软phone」· C++ 代码 · 共 816 行 · 第 1/3 页

CPP
816
字号
/************************************************************************
 *
 *    Version %I%
 *
 *       Copyright (C) 2002 By BEP Corporation.
 * This Document Contains Proprietary Information Of BEP Corporation.
 * No Distribution Is Granted Except With Written Permission From
 * BEP Corporation.
 *************************************************************************/
/*
 **
 ** MODULE: h323.c
 **
 ** PURPOSE:
 **
 ** LIMITATIONS:
 **
 ** DATE CREATED: 09-27-2004
 **
 ** AUTHOR(S): aoto created
 **
 ** MODIFICATIONS:
 **     userId                  Date            Description
 **
 ** QA Status:
 **      status                   Date             Owner
 **
 */
#include "stdafx.h"
#include "myphone.h"
#include "myphoneDlg.h"

#include "h323.h"

s_state_machine* get_h323()
{
    s_state_machine* pSM = (s_state_machine* )malloc(sizeof(s_state_machine));
    pSM->iSize = 10;
    pSM->iState = ST_H323_ON_HOOK_STATE;
    pSM->pState = (s_state* )malloc(sizeof(s_state)*pSM->iSize);

    pSM->pState[ST_H323_ON_HOOK_STATE].iSize = 11;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck = (s_event_ack*)malloc(sizeof(s_event_ack)*
        11);

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 0].iEvent =
        local_off_hook_event;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 0].iState =
        ST_H323_WAIT_FIRST_DIGIT_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 0].funcAck =
        &h323_on_hook_state_local_off_hook_event;

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 1].iEvent =
        receive_query_availability_event;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 1].iState =
        ST_H323_RINGING_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 1].funcAck =
        &h323_on_hook_state_receive_query_availability_event;

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 2].iEvent = to_ringing_state;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 2].iState =
        ST_H323_RINGING_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 2].funcAck =
        &h323_on_hook_state_to_ringing_state;

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 3].iEvent = callout_key_event;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 3].iState =
        ST_H323_ON_HOOK_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 3].funcAck =
        &h323_on_hook_state_callout_key_event;

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 4].iEvent = long_digit_event;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 4].iState =
        ST_H323_ON_HOOK_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 4].funcAck =
        &h323_on_hook_state_long_digit_event;

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 5].iEvent =
        local_on_hook_event;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 5].iState =
        ST_H323_ON_HOOK_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 5].funcAck =
        &h323_on_hook_state_local_on_hook_event;

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 6].iEvent =
        receive_terminate_event;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 6].iState =
        ST_H323_ON_HOOK_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 6].funcAck =
        &h323_on_hook_state_receive_terminate_event;

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 7].iEvent = timeout_event;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 7].iState =
        ST_H323_ON_HOOK_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 7].funcAck =
        &h323_on_hook_state_timeout_event;

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 8].iEvent =
        to_wait_for_connect_state;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 8].iState =
        ST_H323_WAIT_FOR_CONNECT_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 8].funcAck =
        &h323_on_hook_state_to_wait_for_connect_state;

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 9].iEvent =
        to_query_availability_state;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 9].iState =
        ST_H323_QUERY_AVAILABILITY_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 9].funcAck =
        &h323_on_hook_state_to_query_availability_state;

    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 10].iEvent =
        to_dead_end_state;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 10].iState =
        ST_H323_DEAD_END_STATE;
    pSM->pState[ST_H323_ON_HOOK_STATE].pEventAck[ 10].funcAck =
        &h323_on_hook_state_to_dead_end_state;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].iSize = 13;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck = (s_event_ack* )malloc(sizeof(
        s_event_ack)* 13);

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 0].iEvent =
        receive_query_availability_event;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 0].iState =
        ST_H323_WAIT_FIRST_DIGIT_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 0].funcAck =
        &h323_wait_first_digit_state_receive_query_availability_event;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 1].iEvent =
        receive_terminate_event;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 1].iState =
        ST_H323_WAIT_FIRST_DIGIT_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 1].funcAck =
        &h323_wait_first_digit_state_receive_terminate_event;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 2].iEvent =
        digit_event;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 2].iState =
        ST_H323_WAIT_FIRST_DIGIT_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 2].funcAck =
        &h323_wait_first_digit_state_digit_event;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 3].iEvent =
        timeout_event;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 3].iState =
        ST_H323_WAIT_FIRST_DIGIT_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 3].funcAck =
        &h323_wait_first_digit_state_timeout_event;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 4].iEvent =
        callout_key_event;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 4].iState =
        ST_H323_WAIT_FIRST_DIGIT_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 4].funcAck =
        &h323_wait_first_digit_state_callout_key_event;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 5].iEvent =
        cancel_key_event;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 5].iState =
        ST_H323_WAIT_FIRST_DIGIT_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 5].funcAck =
        &h323_wait_first_digit_state_cancel_key_event;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 6].iEvent =
        speed_dial_key_event;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 6].iState =
        ST_H323_WAIT_FIRST_DIGIT_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 6].funcAck =
        &h323_wait_first_digit_state_speed_dial_key_event;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 7].iEvent =
        local_on_hook_event;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 7].iState =
        ST_H323_ON_HOOK_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 7].funcAck =
        &h323_wait_first_digit_state_local_on_hook_event;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 8].iEvent =
        to_dead_end_state;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 8].iState =
        ST_H323_DEAD_END_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 8].funcAck =
        &h323_wait_first_digit_state_to_dead_end_state;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 9].iEvent =
        to_collect_digits_state;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 9].iState =
        ST_H323_COLLECT_DIGITS_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 9].funcAck =
        &h323_wait_first_digit_state_to_collect_digits_state;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 10].iEvent =
        to_collect_transfer_digits_state;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 10].iState =
        ST_H323_COLLECT_TRANSFER_DIGITS_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 10].funcAck =
        &h323_wait_first_digit_state_to_collect_transfer_digits_state;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 11].iEvent =
        to_bidir_voice_state;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 11].iState =
        ST_H323_BIDIR_VOICE_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 11].funcAck =
        &h323_wait_first_digit_state_to_bidir_voice_state;

    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 12].iEvent =
        to_query_availability_state;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 12].iState =
        ST_H323_QUERY_AVAILABILITY_STATE;
    pSM->pState[ST_H323_WAIT_FIRST_DIGIT_STATE].pEventAck[ 12].funcAck =
        &h323_wait_first_digit_state_to_query_availability_state;

    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].iSize = 13;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck = (s_event_ack*)malloc(sizeof(
        s_event_ack)* 13);

    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 0].iEvent =
        digit_event;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 0].iState =
        ST_H323_COLLECT_DIGITS_STATE;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 0].funcAck =
        &h323_collect_digits_state_digit_event;

    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 1].iEvent =
        receive_query_availability_event;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 1].iState =
        ST_H323_COLLECT_DIGITS_STATE;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 1].funcAck =
        &h323_collect_digits_state_receive_query_availability_event;

    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 2].iEvent =
        receive_terminate_event;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 2].iState =
        ST_H323_COLLECT_DIGITS_STATE;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 2].funcAck =
        &h323_collect_digits_state_receive_terminate_event;

    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 3].iEvent =
        cancel_key_event;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 3].iState =
        ST_H323_COLLECT_DIGITS_STATE;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 3].funcAck =
        &h323_collect_digits_state_cancel_key_event;

    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 4].iEvent =
        long_digit_event;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 4].iState =
        ST_H323_COLLECT_DIGITS_STATE;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 4].funcAck =
        &h323_collect_digits_state_long_digit_event;

    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 5].iEvent =
        timeout_event;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 5].iState =
        ST_H323_COLLECT_DIGITS_STATE;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 5].funcAck =
        &h323_collect_digits_state_timeout_event;

    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 6].iEvent =
        callout_key_event;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 6].iState =
        ST_H323_QUERY_AVAILABILITY_STATE;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 6].funcAck =
        &h323_collect_digits_state_callout_key_event;

    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 7].iEvent =
        to_query_availability_state;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 7].iState =
        ST_H323_QUERY_AVAILABILITY_STATE;
    pSM->pState[ST_H323_COLLECT_DIGITS_STATE].pEventAck[ 7].funcAck =
        &h323_collect_digits_state_to_query_availability_state;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?