FreeSWITCH中文网,电话机器人开发网 ,微信订阅号:

FreeSWITCH及VOIP,Openser,电话机器人等产品中文技术资讯、交流、沟通、培训、咨询、服务一体化网络。QQ群:293697898

FreeSWITCH的ESL消息接口


tags:FreeSWITCH ESL SOCKET 创建时间:2015-11-22 20:48:25

```c

ESL_DECLARE(esl_status_t) esl_send(esl_handle_t handle, const char cmd) { const char *e = cmd + strlen(cmd) -1;

if (!handle || !handle->connected || handle->sock == ESL_SOCK_INVALID) {
    return ESL_FAIL;
}

esl_log(ESL_LOG_DEBUG, "SEND\n%s\n", cmd);

if (send(handle->sock, cmd, strlen(cmd), 0) != (int)strlen(cmd)) {
    handle->connected = 0;
    if (!(strerror_r(handle->errnum, handle->err, sizeof(handle->err))))
        *(handle->err)=0;
    return ESL_FAIL;
}

if (!(*e == '\n' && *(e-1) == '\n')) {
    if (send(handle->sock, "\n\n", 2, 0) != 2) {
        handle->connected = 0;
        if (!(strerror_r(handle->errnum, handle->err, sizeof(handle->err))))
            *(handle->err)=0;
        return ESL_FAIL;
    }
}

return ESL_SUCCESS;

}

ESL_DECLARE(esl_status_t) esl_send_recv_timed(esl_handle_t handle, const char cmd, uint32_t ms) { const char *hval; esl_status_t status;

if (!handle || !handle->connected || handle->sock == ESL_SOCK_INVALID) {
    return ESL_FAIL;
}

esl_mutex_lock(handle->mutex);


if (!handle->connected || handle->sock == ESL_SOCK_INVALID) {
    handle->connected = 0;
    esl_mutex_unlock(handle->mutex);
    return ESL_FAIL;
}

esl_event_safe_destroy(&handle->last_sr_event);

*handle->last_sr_reply = '\0';

if ((status = esl_send(handle, cmd))) {
    esl_mutex_unlock(handle->mutex);
    return status;
}

recv:

esl_event_safe_destroy(&handle->last_sr_event);

*handle->last_sr_reply = '\0';

status = esl_recv_event_timed(handle, ms, 0, &handle->last_sr_event);

if (handle->last_sr_event) {
    char *ct = esl_event_get_header(handle->last_sr_event,"content-type");

    if (strcasecmp(ct, "api/response") && strcasecmp(ct, "command/reply")) {
        esl_event_t *ep;

        for(ep = handle->race_event; ep && ep->next; ep = ep->next);

        if (ep) {
            ep->next = handle->last_sr_event;
        } else {
            handle->race_event = handle->last_sr_event;
        }

        handle->last_sr_event = NULL;

        esl_mutex_unlock(handle->mutex);
        esl_mutex_lock(handle->mutex);

        if (!handle->connected || handle->sock == ESL_SOCK_INVALID) {
            handle->connected = 0;
            esl_mutex_unlock(handle->mutex);
            return ESL_FAIL;
        }

        goto recv;
    }

    if (handle->last_sr_event) {
        hval = esl_event_get_header(handle->last_sr_event, "reply-text");

        if (!esl_strlen_zero(hval)) {
            strncpy(handle->last_sr_reply, hval, sizeof(handle->last_sr_reply));
        }       
    }
}

esl_mutex_unlock(handle->mutex);

return status;

} ```



上海老李,QQ:1354608370,FreeSWITCH QQ群: