asterisk源码分析(main函数)
文件:main目录下的asterisk.c文件
1、代码片段:
/* if the progname is rasterisk consider it a remote console */
if (argv[0] && (strstr(argv[0], "rasterisk")) != NULL) {
ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_REMOTE);
}
...
case 'r':
ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_REMOTE);
break;
说明:
在终端运行rasterisk命令,相当于运行asterisk -r,即asterisk的远程连接。
2、代码片段:
if (getenv("HOME"))
snprintf(filename, sizeof(filename), "%s/.asterisk_history", getenv("HOME"));
说明: rasterisk(或者asterisk -r)中运行的命令会记录在用户的home目录下的.asteriskhistory文件中(比如:/root/.asteriskhistory)
asterisk启动参数
代码片段:
case 'B': /* Force black background */
ast_set_flag(&ast_options, AST_OPT_FLAG_FORCE_BLACK_BACKGROUND);
ast_clear_flag(&ast_options, AST_OPT_FLAG_LIGHT_BACKGROUND);
break;
说明: -B 强制以黑色背景运行,相当于将文件/etc/asterisk/asterisk.conf中的forceblackbackground设置为yes
代码片段:
case 'X':
ast_set_flag(&ast_options, AST_OPT_FLAG_EXEC_INCLUDES);
break;
说明: -X 可以在配置文件中配置"#exec "之类的指令(比如:#exec /tmp/shellTest.sh),相当于将在文件/etc/asterisk/asterisk.conf中配置execincludes = yes
代码片段:
case 'C':
ast_copy_string(cfg_paths.config_file, optarg, sizeof(cfg_paths.config_file));
ast_set_flag(&ast_options, AST_OPT_FLAG_OVERRIDE_CONFIG);
break;
说明: -C file 使用file替代/etc/asterisk/asterisk.conf文件初始化程序,这里的file应为绝对路径。
代码片段:
case 'c':
ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_CONSOLE);
break;
说明: -c 以console方式运行,相当于将在文件/etc/asterisk/asterisk.conf中配置console = yes
代码片段:
case 'd':
option_debug++;
ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK);
break;
说明:
-d 或者 -ddd
调试模式,d的个数即为调试级别,比如"-ddd"相当于在文件/etc/asterisk/asterisk.conf中配置debug = 3
代码片段:
case 'e':
if ((sscanf(&optarg[1], "%30ld", &option_minmemfree) != 1) || (option_minmemfree < 0)) {
option_minmemfree = 0;
}
break;
说明:
-e memory
相当于文件/etc/asterisk/asterisk.conf中配置 minmemfree = memory
当系统中可用内存低于设定的memory值时,asterisk停止接收新的呼叫
代码片段:
case 'F':
ast_set_flag(&ast_options, AST_OPT_FLAG_ALWAYS_FORK);
break;
说明:
-F
相当于在文件/etc/asterisk/asterisk.conf中配alwaysfork = yes
代码片段:
case 'f':
ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK);
break;
说明:
-f
相当于在文件/etc/asterisk/asterisk.conf中配nofork = yes
代码片段:
case 'G':
rungroup = ast_strdupa(optarg);
break;
说明:
-G group
调用指定组运行
代码片段:
case 'g':
ast_set_flag(&ast_options, AST_OPT_FLAG_DUMP_CORE);
break;
说明:
-g
故障转储相关
代码片段:
case 'h':
show_cli_help();
exit(0);
说明:
-h
显示帮助信息
代码片段:
case 'I':
ast_set_flag(&ast_options, AST_OPT_FLAG_INTERNAL_TIMING);
break;
说明: -I 如果DAHDI计时器是可用则使内部定时
代码片段:
case 'i':
ast_set_flag(&ast_options, AST_OPT_FLAG_INIT_KEYS);
break;
说明:
-i
在启动时初始化加密密钥
代码片段:
case 'L':
if ((sscanf(optarg, "%30lf", &option_maxload) != 1) || (option_maxload < 0.0)) {
option_maxload = 0.0;
}
break;
说明:
-L <load>
在拒绝新的电话之前限制最大平均负载
代码片段:
case 'M':
if ((sscanf(optarg, "%30d", &option_maxcalls) != 1) || (option_maxcalls < 0)) {
option_maxcalls = 0;
}
break;
说明:
-M <value>
限制电话的最大数量为指定的值
代码片段:
case 'm':
ast_set_flag(&ast_options, AST_OPT_FLAG_MUTE);
break;
说明:
-m
屏蔽在控制台输出
代码片段:
case 'n':
ast_set_flag(&ast_options, AST_OPT_FLAG_NO_COLOR);
break;
说明: -n 关闭彩色输出功能,比如:asterisk -n
代码片段:
case 'p':
ast_set_flag(&ast_options, AST_OPT_FLAG_HIGH_PRIORITY);
break;
说明:
-p
作为伪实时线程运行
代码片段:
case 'q':
ast_set_flag(&ast_options, AST_OPT_FLAG_QUIET);
break;
说明:
-q
安静模式(抑制输出)
代码片段:
case 'R':
ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_REMOTE | AST_OPT_FLAG_RECONNECT);
break;
说明:
-R
连接本机的asterisk服务器,断开后会重新连接
代码片段:
case 'r':
ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK | AST_OPT_FLAG_REMOTE);
break;
说明:
-r
连接本机的asterisk服务器
代码片段:
case 's':
remotesock = ast_strdupa(optarg);
break;
说明:
-s <socket-file>
通过socket连接到asterisk,和r参数一起使用时有效
代码片段:
case 'T':
ast_set_flag(&ast_options, AST_OPT_FLAG_TIMESTAMP);
break;
说明:
-T
在CLI输出中显示时间
代码片段:
case 't':
ast_set_flag(&ast_options, AST_OPT_FLAG_CACHE_RECORD_FILES);
break;
说明: -t Record soundfiles in /var/tmp and move them where they belong after they are done
代码片段:
case 'U':
runuser = ast_strdupa(optarg);
break;
说明:
-U <user>
以用户<user>方式运行
代码片段:
case 'V':
show_version();
exit(0);
说明:
-V
显示版本信息
代码片段:
case 'v':
option_verbose++;
ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK);
break;
说明:
-v
多个v,显示更多信息
代码片段:
case 'W': /* White background */
ast_set_flag(&ast_options, AST_OPT_FLAG_LIGHT_BACKGROUND);
ast_clear_flag(&ast_options, AST_OPT_FLAG_FORCE_BLACK_BACKGROUND);
break;
说明:
-W
调整终端颜色
代码片段:
case 'x':
ast_set_flag(&ast_options, AST_OPT_FLAG_EXEC | AST_OPT_FLAG_NO_COLOR);
xarg = ast_strdupa(optarg);
break;
说明:
-x <cmd>
执行CLI指令,和r参数一起使用,比如:asterisk -rx 'core show channels'
本文github地址:
https://github.com/mike-zhang/mikeBlogEssays/blob/master/2013/20130218_asterisk源码分析(main函数).md
欢迎补充
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)