All pastes #17586 Raw Edit

Someone

public text v1 · immutable
#17586 ·published 2005-07-13 01:05 UTC
rendered paste body
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_caller__set_state(that, ICD_CALLER_STATE_BRIDGE_FAILED);
            break;
        }

        break;
    }
    return res;
}