zoukankan      html  css  js  c++  java
  • 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

    欢迎补充

  • E-Mail : Mike_Zhang@live.com
  • 转载请注明出处,谢谢!
查看全文
  • 相关阅读:
    【转】Windows Socket网络编程(二)套接字编程原理
    获取本地IP地址,并在IP CONTROL控件中显示出来
    PAT 1021 Deepest Root[并查集、dfs][难]
    1025 PAT Ranking[排序][一般]
    PAT 1028 List Sorting[排序][一般]
    PAT 1023 Have Fun with Numbers[大数乘法][一般]
    PAT 1026 Table Tennis[比较难]
    Andrew NgML第十章应用机器学习的建议
    PAT 1020 Tree Traversals[二叉树遍历]
    PAT 1022 Digital Library[map使用]
  • 原文地址:https://www.cnblogs.com/MikeZhang/p/asteriskMainFunc_20130514.html
  • Copyright © 2011-2022 走看看