Tous les collages #17583 Brut Modifier

Miscellany

public text v1 · immuable
#17583 ·publié 2005-07-12 23:51 UTC
corps du collage affiché
int icd_bridge_wait_ack(icd_caller * that)
{
    struct ast_channel *chan = (ast_channel *) icd_caller__get_channel(that);
    //int max_wait_ack = 10;      /* TBD stick this in the agent config */
    int max_wait_ack = icd_caller__get_timeout(that);
    int result = 0;
    int res = 0;
    time_t start_time;
    time_t now;

    if (icd_debug) ast_log(LOG_DEBUG, "ICD Agent waiting for acknowledgment is ID  %d\n", icd_caller__get_id(that));

    time(&start_time);
    for (;;) {
        /* This is the wait loop for agents that requirement an acknowledgement  b4 we bridge the call */
        for (;;) {
            if (!(icd_caller__get_state(that) == ICD_CALLER_STATE_GET_CHANNELS_AND_BRIDGE)) {
                result = -1;
                break;
            }
            /* Wait a second before checking again */
            res = ast_waitfordigit(chan, 1000);

            if (res) {
                break;
            }

            time(&now);
            if ((now - start_time) > max_wait_ack){
                result = -1;
                break;
            }
        }
        if (result < 0) {
            icd_caller__set_state(that, ICD_CALLER_STATE_BRIDGE_FAILED);
            break;
        }
        /* If they hungup, return immediately */
        if (res < 0) {
            icd_bridge__safe_hangup(that);
            icd_caller__set_state(that, ICD_CALLER_STATE_CALL_END);
            break;
        }
        /* ok we got some type of dtmf, ok to bridge */
        break;
    }
    return res;
}