pbx.c主要实现了builtin applications,也就是内置的应用,比如最常见的Answer,Hangup, Background,Wait等等。
在/main/asterisk.c中有一段代码调用load_pbx()负责加载builtin applications。
这个load_pbx()函数就是实现在pbx.c中,它的主要任务是遍历全局数组builtins中每个application信息,调用ast_register_application()注册application的各自入口函数。
比如Hangup应用的入口函数就是pbx_builtin_hangup()
00364 { "Hangup", pbx_builtin_hangup,
00365 "Hang up the calling channel",
00366 " Hangup([causecode]): This application will hang up the calling channel.\n"
00367 "If a causecode is given the channel's hangup cause will be set to the given\n"
00368 "value.\n"
00369 },
下面我们分析一下pbx_builtin_hangup()函数,这个函数查看参数data调用ast_str2cause()获取挂断码,如果没有获取到,则设置chan->hangupcause为
AST_CAUSE_NORMAL_CLEARING,也就是0。
看看pbx_exec()函数,这个函数是所有application被调用的入口处。它首先保存channel的两个变量,appl和data,分别表示正在调用的application名和参数。然后调用app->execute(c, data)进入真正的处理,完后恢复appl和data的值,有点像堆栈的管理
00507
00508
00509
00510 int pbx_exec(struct ast_channel *c,
00511 struct ast_app *app,
00512 void *data)
00513 {
00514 int res;
00515
00516 const char *saved_c_appl;
00517 const char *saved_c_data;
00518
00519 if (c->cdr && !ast_check_hangup(c))
00520 ast_cdr_setapp(c->cdr, app->name, data);
00521
00522
00523 saved_c_appl= c->appl;
00524 saved_c_data= c->data;
00525
00526 c->appl = app->name;
00527 c->data = data;
00528
00529 if (app->module) {
00530
00531 }
00532 res = app->execute(c, data);
00533 if (app->module) {
00534
00535 }
00536
00537 c->appl = saved_c_appl;
00538 c->data = saved_c_data;
00539 return res;
00540 }
分享到:
相关推荐
"pbx.rar_asterisk_pbx spo_pbx 源码" 提供的是与Asterisk PBX相关的源代码,对于理解Asterisk的工作原理、自定义功能或开发新的通信解决方案具有重要意义。 Asterisk PBX主要由以下几个关键部分组成: 1. **拨号...
Asterisk是一款开源的PBX(Private Branch Exchange)软件,它允许用户在IP网络上建立电话通信系统。作为Linux环境下的通信平台,Asterisk提供了丰富的功能,包括语音通话、会议、语音邮件、传真等。以下是一些核心...
标题中的"asterisk-1.8.32.3.tar.gz"是指Asterisk的一个特定版本——1.8.32.3,这是一个源代码压缩包,适用于Linux操作系统。通过下载此资源并进行编译安装,用户可以在自己的服务器上搭建功能丰富的电话系统。 ...
Asterisk是一款开源的IP电话系统软件,广泛用于构建VoIP网络基础设施,如PBX(Private Branch Exchange)、软交换和VoIP网关。这个压缩包"Asterisk-1.8.8.0.tar.gz"包含了Asterisk 1.8.8.0版本的源代码,供开发者和...
asterisk 代码分析, sip_chan
总结起来,Asterisk.NET 1.6.3.1是.NET开发者构建VoIP应用的强大工具,它简化了与Asterisk PBX的交互,并提供了丰富的功能集,使得开发者能够快速构建出功能丰富的通信解决方案。通过深入学习和实践,开发者可以掌握...
Asterisk是一款开源的IP电话系统,用于构建VoIP(Voice over ...学习和掌握Asterisk涉及到深入理解VoIP技术、网络协议以及编程接口。通过不断实践和学习,你可以创建出功能丰富的通信解决方案,适应各种业务场景。
ASTERISK 14是 Asterisk VoIP 电话系统的第14个主要版本,这是一个开源的IP电话系统,广泛用于构建PBX(Private Branch Exchange)系统。Asterisk提供了丰富的功能,包括语音通话、会议、语音邮件等,并支持多种编码...
通过这种格式,我们可以将Asterisk源代码及其相关文件打包成一个易于管理和传输的单一文件。在解压后,我们得到的将是名为“asterisk-1.8.10.1”的完整目录结构,包含了编译和运行Asterisk所需的所有文件。 ...
本文将深入剖析Asterisk的核心概念,包括通道(Channel)、呼叫情景(Call Scenario)、桥接通道(Bridging Channels)以及植入通道(Masquerading Channels),并通过具体代码实例来解释这些概念的应用。...
Asterisk系统的安装与配置 Asterisk是开源的通讯服务器软件,提供了丰富的通讯功能,包括语音、视频、即时消息等。下面是Asterisk系统的安装与配置指南。 一、安装DAHDI DAHDI是Asterisk管理硬件的插件(中间件)...
包含:asterisk.18.11.1源码...asterisk-18-current.tar.gz libedit_3.1-20210910.orig.tar.gz openssl-1.1.1.tar.gz jansson-2.11.tar.gz sqlite-autoconf-3380200.tar.gz pjproject-2.10.tar.gz libuuid-1.0.3.tar.gz
Asterisk是一个开源的PBX(Private Branch Exchange)系统,允许您创建一个功能强大的电话交换系统。安装Asterisk非常简单,只需下载相应的安装包并按照指令進行安装。 下载并编译OH323.SO模块 下一步,我们需要...
Asterisk 是一个开源的、基于 Unix 的PBX 电话系统,具有强大的呼叫处理能力和灵活的配置能力。本文档将指导您安装和配置 Asterisk,以便您快速上手使用这个强大的通信系统。 安装所需套件 在安装 Asterisk 之前,...
Asterisk是一款开源的IP电话系统,用于搭建VoIP服务器,支持多种通信协议,如SIP、IAX等。...不过,Asterisk的功能非常丰富,涉及PBX、IVR、会议、录音等多个方面,深入学习和配置需要更多实践和研究。
本文将深入探讨如何利用开源软件Asterisk和一些可能已经拥有的硬件来构建一个功能齐全、成本低廉的PBX系统。 #### 一、什么是PBX? PBX是一种内部电话网络,可以连接到公共电话网络,并允许组织内的电话进行内部...
带有Asterisk PBX的最小Docker镜像 该映像基于Alpine Linux映像,该映像仅为5MB映像,并且包含 。 该图像的latest标签(基于Alpine linux)的总大小为: 对于debian-stretch-slim-15-current 。 自定义UID / GID ...
Asterisk是一个开源的IP电话系统,用于构建VoIP网络基础设施。它支持多种编解码技术,其中G.729和G.723是两种常用的语音编码标准,尤其适用于压缩语音数据以减少带宽需求。在Asterisk系统中安装这两个编解码模块,...
asterisk-16.0.0.jar 呼叫中心的jar包 基于asteriter
Asterisk 是一个开源的 PBX(Private Branch Exchange)系统,可以实现电话交换和语音网关的功能。在传统的 Asterisk 配置中,配置文件都是存储在文件系统中的,但是随着系统的复杂度和规模的增加,配置文件的管理和...