- 浏览: 205949 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
Kesin97:
不错 很有用。选择性锁也不太影响性能。
sqlserver的updlock锁 (转) -
fox-idea:
学习
用PC作数据库服务器的容灾问题 -
xwei78:
话说这个下载地址不太好找啊,我去oracle网站转了好一会才找 ...
oracle10g官方客户端配置
在www.asterisk.org上可以获得asterisk 1.4和asterisk 1.2.18两个版本。前一个是for 2.6内核,后一个是for 2.4内核。
我在Ubuntu 6.06上编译和运行了asterisk 1.4。在RH9上编译和运行了asterisk 1.2。
使用”asterisk –vvvc”命令启动了Asterisk 1.2.18后,出现了
Asterisk Ready.
*CLI>
的提示界面。这是Asterisk的console界面。当在*CLI提示符后面使用”dial”命令后,asterisk开始播放一系列的语音。Dial命令是如何工作的,在asterisk内部,dial命令的运行流程是怎样的一个过程?经过二周的断断续续的对源代码的阅读,大致了解了一些信息,特在此记录。记录的过程也可以帮助我整理一下思路。
在asterisk中,有三个重要的逻辑实体。它们完成管理员设定的各项电话功能。这三个实体是:PBX,Channel,Application。
当一个呼叫业务启动后,就会有一个PBX线程被启动,它掌控着这个呼叫业务,直到呼叫业务的结束。
Channel是完成呼叫业务基本功能的实体。这些基本功能包括:二次拨号(send_digit),挂机(hangup),摘机(answer)等。Channel有很多种:H.323,OSS,SIP,ZAP,ALSA,IAX等。每个channnel实体的代码对应于一个名为chan_xxx.c的源代码文件。比如OSS就对应于chan_oss.c。每个Channel实体被编译为.so文件,成为linux的共享对象(Shared Object)。当asterisk系统启动时,系统根据配置有选择的装入这些共享对象(类似于WINDOWS下的动态链接库)。
Application是对一个呼叫业务进行操作的动作。我觉得叫Action比较好,不清楚为什么叫application,也许我还没有了解更深入吧。这些动作有:拨号(dial),echo,answer,wait,playback等。每个application实体的代码对应于一个名为app_xxx.c的源代码文件。比如wait就对应于app_wait.c。Application类似channel也被编译成为.so。
上面介绍了三个完成asterisk系统各项电话功能的实体,下面介始asterisk系统的几个基本的配置文件。
目前,我只理解了一小部分的配置文件。对于channel,每个channel都有自已的配置文件。同样对于OSS,配置文件是oss.conf。另一个重要的配置文件是extension.conf。它确定了asterisk系统的dial plan。
下面从asterisk系统的main()开始,介绍PBX,Channel,Appliction这三者是如何关联到了一起。
Asterisk.c中的main()是系统的开始入口函数。在2363行,main()调用了load_modules()来装载各个模块(也就是共享对象)。Asterisk会装载channel oss模块,我们转到chan_oss.c文件中的load_modules()函数。在这个函数里,
首先,cfg = ast_config_load(config);装入了oss.conf文件的内容;
其次,ast_channel_register(&oss_tech);将channel的各项基本功能注册到了系统中。oss_tech是一个struct ast_channel_tech结构。它记录了channel oss完成基本功能的各个函数地址。每个channel都是这样注册到系统中的。
最后,ast_cli_register_multiple()将channel oss支持的CLI命令及其对应的回调函数注册到系统中。
这样,一个channel实体被装载了。
回到启动asterisk后的console界面上来。在提示符*CLI>后,输入dial,将听到声卡发出的声音。这个命令是如何被执行的呢?
由于channel oss将自己支持的命令在被装载时,通过ast_cli_register_multiple()注册到了系统中,因此,在系统的*CLI>提示后输入了dial后,系统在注册信息找到了channel oss支持dial这个命令,并确定了chan_oss.c中的console_dial()函数是这个命令的回调函数,这个回调函数被调用。
在console_dial()中,oss_new()被调用是最关键的地方。oss_new()的作用在doc\channel.txt中有说明。事实上,channel.txt中对channel的作用有更清晰的说明。回到oss_new上,oss_new分配了一个新的struct ast_channel c。这个c的exten在ast_channel_alloc()里被缺省赋值为”s”,这一点还是很重要的。然后,oss_new调用了ast_pbx_start()启动了一个PBX线程。这个线程在其生命期里负责处理这个channel的事件。这个线程是pbx.c中的__ast_pbx_run ()。在__ast_pbx_run()里,pbx线程通过ast_exists_extension()和ast_spawn_extension()确定了呼叫的业务流程。
业务流程是由dial plan确定的。Dial plan在extension.conf中配置。对于oss的dial(这是一个呼出),业务流程是如何确定的呢?
在oss.conf中,配置了这个channel的context和extension。对于channel oss ,它的context是local。对于context and extension这两个概念在asterisk handbook中有说明。有了channel oss的contest and extension,pbx线程从extension.conf中去寻找。在extension.conf中,对于oss 的context是这样配置的:
[local]
ignorepat => 9
include => default
include => parkedcalls
……
[default]
include => demo
[demo]
exten => s,1,Wait,1 ; Wait a second, just for fun
exten => s,n,Answer ; Answer the line
exten => s,n,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds
exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds
exten => s,n(restart),BackGround(demo-congrats) ; Play a congratulatory message
exten => s,n(instruct),BackGround(demo-instruct) ; Play some instructions
exten => s,n,WaitExten ; Wait for an extension to be dialed.
从这个配置上就可以看到,dial命令就对应于一个voice menu。当context为local时,执行demo这个context。Channel oss的extension缺省为”s”。因此,dial plan为先等待1秒,然后,应答它,通过BackGround应用,播放demo-congrats语音文件
发表评论
-
linux fsck命令参数及用法详解 转
2012-04-26 15:22 872命令 :fsck ... -
linux dd命令参数及用法详解 转
2012-04-26 15:21 1262linux dd 命令 使用详解 dd 的主 ... -
Linux TCP 连接数修改
2012-03-19 17:18 808一、 文件数限制修改 ... -
linux系统调优 转
2011-03-08 17:28 763大多数 Linux 发布版都定 ... -
asterisk视频 转
2010-10-27 10:51 914多人视频跟asterisk没多大关系,Asterisk 仅仅是 ... -
linux的strace命令(详解)
2010-10-20 10:13 685本文详细讲述linux下的st ... -
linux 守护进程 转
2010-10-08 10:52 733守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控 ... -
学习perl中的基础 转
2010-07-30 14:02 920先来一个例子吧 #!/usr/bin/perl use ... -
linux服务介绍
2010-07-24 09:40 795NetworkManager 0:off 1:off ... -
Linux快速入门之命令
2010-07-08 15:02 7371.# 表示权限用户(如:root),$ 表示普通用户 开机 ... -
Linux网络编程入门 --转
2010-06-01 10:53 1053(一)Linux网络编程--网络知识介绍 客户端和服务端 ... -
Windows下C语言网络编程快速入门(转)
2010-03-01 10:13 1298C语言的学习,一般的方式是,先学C,然后是C++,最好还 ... -
OSIP协议栈使用入门(续一:纯协议栈逻辑分析)(转)
2010-02-03 08:54 3794很长时间之前,简单 ... -
oSIP协议栈(及eXoSIP,Ortp等)使用入门(转)
2010-02-03 08:52 4321一直没空仔细研究下oSIP,最近看到其版本已经到了3.x版 ... -
VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
2009-12-21 22:23 5680VC9编译的程序在没有装过VC9(确切的说是.Net Fr ... -
soft phone develop
2009-12-20 11:01 980一 服务器端软件 1. Aste ... -
Asterisk内核框架
2009-12-16 16:31 1990Asterisk内核框架(转帖 ... -
vim简单配置 备忘
2009-12-09 12:57 7471 set nocompatible 2 set numb ... -
笔记uuu
2009-12-03 17:30 0一、最小化安装linux1.在 ... -
CentOS安装crontab及使用方法
2009-12-03 15:31 2457安装crontab:[root@CentOS ~]# yum ...
相关推荐
包含:asterisk.18.11.1源码包,及其所需库的源码包libedit openssl jansson libuuid sqlite3,安装方法详见:https://blog.csdn.net/CSDN_DTEO/article/details/124051280 以下是文件目录: asterisk-18-current....
Asterisk是一款开源的PBX(Private Branch Exchange)软件,它允许用户在IP网络上建立电话通信系统。作为Linux环境下的通信平台,Asterisk提供了丰富的功能,包括语音通话、会议、语音邮件、传真等。以下是一些核心...
7. **源码分析**:对于标签中的“源码”,意味着你可能需要查看Asterisk-java的源代码来了解其工作原理或进行定制开发。通过阅读源代码,你可以理解其内部的工作流程,学习如何更好地利用API,甚至贡献代码到开源...
文件"Asterisk.NET.1.6.3.1"可能是这个库的安装包或源码压缩文件,包含了必要的DLL文件和可能的示例代码,帮助开发者快速集成和测试Asterisk.NET的功能。在使用前,你需要将其解压,并根据项目需求引用相关的库文件...
3. **获取Asterisk源码** 访问Asterisk官方网站下载1.8版本的源码包。或者,如果你的Linux发行版有Asterisk 1.8的官方仓库,可以使用包管理器安装。例如,在Ubuntu上,`sudo apt-get install asterisk`可能已经包含...
- **下载源码**:获取到asterisk-16.19.0的压缩包并解压。 - **配置**:运行`./configure`脚本来检查系统环境并生成Makefile。 - **编译**:执行`make`命令编译源代码。 - **安装**:使用`sudo make install`将...
"pbx.rar_asterisk_pbx spo_pbx 源码" 提供的是与Asterisk PBX相关的源代码,对于理解Asterisk的工作原理、自定义功能或开发新的通信解决方案具有重要意义。 Asterisk PBX主要由以下几个关键部分组成: 1. **拨号...
在安装完所有必要的依赖之后,进入Asterisk源码目录,执行以下命令来配置编译选项: ```bash cd /usr/src/asterisk-15-current ./configure ``` 如果一切正常,你会看到一些确认信息,表示配置成功。接下来,执行...
1. `gcc3.x`:C语言编译器,用于编译Asterisk源码。 2. `bison`:用于解析`extensions.conf`文件中的表达式,它作为`yacc`的替代品,同时也服务于Asterisk的CLI(命令行界面)。 3. `OpenSSL`:提供加密功能,对VoIP...
标题中的“asterisk-java-1.0.0-m2-sources.zip_asterisk”表明这是一个关于Asterisk-Java的源码包,版本号为1.0.0-m2,主要用于与Asterisk的集成。 描述中提到的“java程序实现asterisk的AGI接口”,意味着这个库...
Asterisk是一个开源的IP电话系统,用于搭建VoIP服务器,提供电话呼叫、语音邮件、会议等通信功能。以下是对Asterisk学习日志中提到的一些关键知识点的详细解释: 1. **Asterisk调试与日志记录**: 在学习Asterisk...
总结,Asterisk的安装过程包括更新系统,安装依赖,下载并编译Asterisk源码,配置系统用户和权限,以及启动和管理服务。这只是一个基础安装,实际部署时可能需要根据具体需求进行更复杂的配置和优化。记住,持续学习...
- 使用源码编译安装:适用于高级用户,可以根据需要选择模块。 - 使用预编译包安装:适用于大多数用户,方便快捷。 - 安装必备依赖库:确保所有必需的库都已安装。 3. **配置步骤**: - **SIP 配置**:设置 SIP...
2. **解压源码**:使用`tar -zxvf asterisk-1.8.32.3.tar.gz`命令解压缩文件。 3. **配置编译**:进入解压后的目录,运行`./configure`进行配置,根据需要指定安装路径和选择特性。 4. **编译和安装**:执行`make`...
在描述中提到的“asterisk-addons是asterisk的一款插件安装源码”,这意味着这个压缩包 `asterisk-addons-1.6.2.3` 包含了 Asterisk-addons 版本为1.6.2.3的源代码。源代码的提供允许开发者深入理解其工作原理,进行...
2. **获取源码包**:从官方网站下载 Asterisk 1.8 的源码包。 3. **编译与安装**:按照官方文档的步骤进行编译和安装。 4. **配置基本参数**:设置网络参数、时区、语言等基本信息。 5. **配置功能模块**:根据需求...
总之,Asterisk 1.6是构建先进电话系统的强大工具,其开放源码的特性、丰富的功能集和广泛的社区支持,使其成为企业通信解决方案的首选。无论是小型办公室还是大型企业,Asterisk都能提供高效、经济且可定制的通信...
### Asterisk安装详解 #### 一、概述 Asterisk是一款功能强大的开源PBX系统,它支持多种语音通信协议,并且能够提供丰富的电话管理功能。本文档将详细介绍如何在Linux CentOS 5.0环境下安装Asterisk 1.6.1.20版本...
3. **编译源码**:下载Asterisk源码并进行编译。 4. **配置参数**:编辑配置文件以适应特定的需求。 5. **测试连接**:完成安装后进行基本的通话测试。 #### 五、Asterisk与其他技术的结合 - **与VoIP的融合**:...
后续步骤包括安装编译工具、获取Asterisk源码、编译和安装、配置 Asterisk、启动服务以及进行测试。请注意,Asterisk 的安装和配置可能涉及复杂的网络设置和定制化需求,所以务必仔细阅读官方文档和社区资源以确保...