#include <stdio.h>
#include <stdlib.h>
#include <esl.h>
#include <signal.h>
#include <getopt.h>
static void _sleep_ns(int secs, long nsecs) {
#ifndef WIN32
if (nsecs > 999999999) {
secs += nsecs/1000000000;
nsecs = nsecs % 1000000000;
}
{
struct timespec ts = { secs, nsecs };
nanosleep(&ts, NULL);
}
#else
Sleep(secs*1000 + nsecs/1000000);
#endif
}
static void sleep_ns(long nsecs) { _sleep_ns(0, nsecs); }
static void sleep_ms(int msecs) { sleep_ns(msecs*1000000); }
static void sleep_s(int secs) { _sleep_ns(secs, 0); }
static void *msg_thread_run(esl_thread_t *me, void *obj);
static esl_mutex_t *MUTEX = NULL;
static int thread_running = 0, thread_up = 0, check_up = 0;
int main()
{
char cmd_str[2048] = "";
esl_handle_t handle = {{0}};
esl_global_set_default_logger(ESL_LOG_LEVEL_DEBUG);
memset(&handle, 0, sizeof(handle));
if (esl_connect_timeout(&handle, "10.0.8.10", 8021, "", "ClueCon", 3000)) {
esl_global_set_default_logger(7);
esl_log(ESL_LOG_ERROR, "Error Connecting [%s]\n", handle.err);
return -1;
}
esl_mutex_create(&MUTEX);
if (esl_thread_create_detached(msg_thread_run, &handle) != ESL_SUCCESS) {
esl_log(ESL_LOG_ERROR, "Error starting thread!\n");
esl_disconnect(&handle);
return 0;
}
esl_events(&handle, ESL_EVENT_TYPE_PLAIN, "CHANNEL_ANSWER");
esl_events(&handle, ESL_EVENT_TYPE_PLAIN, "CHANNEL_HANGUP_COMPLETE");
snprintf(cmd_str, sizeof(cmd_str), "api version\n\n");
esl_send_recv(&handle, cmd_str);
if (handle.last_sr_event && handle.last_sr_event->body) {
esl_log(ESL_LOG_INFO, "%s\n", handle.last_sr_event->body);
}
snprintf(cmd_str, sizeof(cmd_str), "api originate user/1000 &echo\n\n");
esl_send_recv(&handle, cmd_str);
if (handle.last_sr_event && handle.last_sr_event->body) {
esl_log(ESL_LOG_INFO, "%s\n", handle.last_sr_event->body);
}
while(handle.connected)
{
sleep_ms(10);
}
esl_disconnect(&handle);
do {
esl_mutex_lock(MUTEX);
check_up = thread_up;
esl_mutex_unlock(MUTEX);
sleep_ms(10);
} while (check_up > 0);
esl_mutex_destroy(&MUTEX);
}
static void *msg_thread_run(esl_thread_t *me, void *obj)
{
esl_handle_t *handle = (esl_handle_t *) obj;
thread_running = 1;
esl_mutex_lock(MUTEX);
thread_up = 1;
esl_mutex_unlock(MUTEX);
while(thread_running && handle->connected) {
int aok = 1;
esl_status_t status;
esl_mutex_lock(MUTEX);
status = esl_recv_event_timed(handle, 10, 1, NULL);
esl_mutex_unlock(MUTEX);
if (status == ESL_BREAK) {
sleep_ms(1);
} else if (status == ESL_FAIL) {
esl_log(ESL_LOG_WARNING, "Disconnected.\n");
thread_running = 0;
} else if (status == ESL_SUCCESS) {
esl_log(ESL_LOG_INFO, "coming event_body:%xs\n", handle->last_event);
if (handle->last_event->body) {
esl_log(ESL_LOG_INFO, "event_body:%s\n", handle->last_event->body);
}
}
}
esl_mutex_lock(MUTEX);
thread_up = 0;
esl_mutex_unlock(MUTEX);
thread_running = 0;
esl_log(ESL_LOG_DEBUG, "Thread Done\n");
}
没有合适的资源?快使用搜索试试~ 我知道了~
C语言ESL连接FreeSwitch
共3个文件
makefile:1个
esl_test:1个
c:1个
需积分: 42 7 下载量 191 浏览量
2022-07-23
08:42:04
上传
评论 1
收藏 84KB ZIP 举报
温馨提示
C语言下使用ESL连接FreeSwitch的demo,详细说明见:https://blog.csdn.net/xxm524/article/details/125840597
资源详情
资源评论
资源推荐
收起资源包目录
esl_test.zip (3个子文件)
esl_test
test.c 3KB
Makefile 550B
esl_test 218KB
共 3 条
- 1
一马途追
- 粉丝: 6264
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0