Where’s mod_spdiermonkey source in Freeswitch-1.2.7?

Freeswitch Pizza voice 예제를 Test하려고 spidermonkey 모듈을 찾았다.

사용한 Freeswitch 버전은 1.2.7 버전. 이 글을 쓰는 시점에서 git 으로 다운받으로 최신의 버전이다.

 

그런데, 소스를 아무리 뒤져봐도 mod_spidermonkey 컴파일을 할 수가 없었다.(디렉토리/Makefile 분석 등등..)

아예 소스 자체가 없는 것으로 보아 배포판 버전에 빠져있는 듯 하다.

 

Freeswitch IRC 에 문의를 해보니 spidermonkey 배포 누락에 관한 이야기는 듣지 못하고 대안으로 mod_v8 를 사용하라고 한다.

흐음…

[Freeswitch] modules.conf.xml

Freeswitch 에서 사용하는 Module On/Off 를 설정하는 파일.

fs_cli 로 접속하여 load 명령어로도 On/Off 가 가능하지만, Freeswitch 재 시작 후, 매번 load 명령어를 날려줘야만 하는 불편함이 있다.

이럴 경우, modules.conf.xml 파일에 Freeswitch 시작시 자동 load module을 설정해 놓으면 편리하다.

pchero@MyDebian:/usr/local/freeswitch/conf/autoload_configs$ cat modules.conf.xml 
<configuration name="modules.conf" description="Modules">
  <modules>
    
    <!-- Loggers (I'd load these first) -->
    <load module="mod_console"/>
    <load module="mod_logfile"/>
    <!-- <load module="mod_syslog"/> -->

    <!--<load module="mod_yaml"/>-->

    <!-- Multi-Faceted -->
    <!-- mod_enum is a dialplan interface, an application interface and an api command interface -->
    <load module="mod_enum"/>

    <!-- XML Interfaces -->
    <!-- <load module="mod_xml_rpc"/> -->
    <!-- <load module="mod_xml_curl"/> -->
    <!-- <load module="mod_xml_cdr"/> -->
    <!-- <load module="mod_xml_scgi"/> -->

    <!-- Event Handlers -->
    <load module="mod_cdr_csv"/>
    <!-- <load module="mod_cdr_sqlite"/> -->
    <!-- <load module="mod_event_multicast"/> -->
    <load module="mod_event_socket"/>
    <!-- <load module="mod_event_zmq"/> -->
    <!-- <load module="mod_zeroconf"/> -->
    <!-- <load module="mod_erlang_event"/> -->
    <!-- <load module="mod_snmp"/> -->

    <!-- Directory Interfaces -->
    <!-- <load module="mod_ldap"/> -->

    <!-- Endpoints -->
    <!-- <load module="mod_dingaling"/> -->
    <!-- <load module="mod_portaudio"/> -->
    <!-- <load module="mod_alsa"/> -->
    <load module="mod_sofia"/>
    <load module="mod_loopback"/>
    <!-- <load module="mod_woomera"/> -->
    <!-- <load module="mod_freetdm"/> -->
    <!-- <load module="mod_openzap"/> -->
    <!-- <load module="mod_unicall"/> -->
    <!-- <load module="mod_skinny"/> -->
    <!-- <load module="mod_khomp"/>   -->
    <!-- <load module="mod_rtmp"/>   -->

    <!-- Applications -->
    <load module="mod_commands"/>
    <load module="mod_conference"/>
    <!-- <load module="mod_curl"/> -->
    <load module="mod_db"/>
    <load module="mod_dptools"/>
    <load module="mod_expr"/>
    <load module="mod_fifo"/>
    <load module="mod_hash"/>
    <load module="mod_voicemail"/>
    <!--<load module="mod_directory"/>-->
    <!--<load module="mod_distributor"/>-->
    <!--<load module="mod_lcr"/>-->
    <load module="mod_esf"/>
    <load module="mod_fsv"/>
    <load module="mod_cluechoo"/>
    <load module="mod_valet_parking"/>
    <!--<load module="mod_fsk"/>-->
    <!--<load module="mod_spy"/>-->
    <!--<load module="mod_random"/>-->
    <load module="mod_httapi"/>
    <!--<load module="mod_translate"/>-->

    <!-- SNOM Module -->
    <!--<load module="mod_snom"/>-->

    <!-- This one only works on Linux for now -->
    <!--<load module="mod_ladspa"/>-->

    <!-- Dialplan Interfaces -->
    <!-- <load module="mod_dialplan_directory"/> -->
    <load module="mod_dialplan_xml"/>
    <load module="mod_dialplan_asterisk"/>

    <!-- Codec Interfaces -->
    <load module="mod_spandsp"/>
    <load module="mod_g723_1"/>
    <load module="mod_g729"/>
    <load module="mod_amr"/>
    <!--<load module="mod_ilbc"/>-->
    <load module="mod_h26x"/>
    <load module="mod_vp8"/>
    <load module="mod_b64"/>
    <!--<load module="mod_siren"/>-->
    <!--<load module="mod_isac"/>-->
    <!--<load module="mod_celt"/>-->
    <!--<load module="mod_opus"/>-->

    <!-- File Format Interfaces -->
    <load module="mod_sndfile"/>
    <load module="mod_native_file"/>
    <!-- <load module="mod_shell_stream"/> -->
    <!--For icecast/mp3 streams/files-->
    <!--<load module="mod_shout"/>-->
    <!--For local streams (play all the files in a directory)-->
    <load module="mod_local_stream"/>
    <load module="mod_tone_stream"/>

    <!-- Timers -->
    <!-- <load module="mod_timerfd"/> -->
    <!-- <load module="mod_posix_timer"/> -->

    <!-- Languages -->
    <!-- <load module="mod_spidermonkey"/> -->
    <load module="mod_v8"/>
    <!-- <load module="mod_perl"/> -->
    <load module="mod_python"/>
    <!-- <load module="mod_java"/> -->
    <load module="mod_lua"/>

    <!-- ASR /TTS -->
    <!-- <load module="mod_flite"/> -->
    <!-- <load module="mod_pocketsphinx"/> -->
    <!-- <load module="mod_cepstral"/> -->
    <!-- <load module="mod_tts_commandline"/> -->
    <!-- <load module="mod_rss"/> -->
    
    <!-- Say -->
    <load module="mod_say_en"/>
    <!-- <load module="mod_say_ru"/> -->
    <!-- <load module="mod_say_zh"/> -->
    <!-- <load module="mod_say_sv"/> -->

    <!-- Third party modules -->
    <!--<load module="mod_nibblebill"/>-->
    <!--<load module="mod_callcenter"/>-->

  </modules>
</configuration>

 

[Freeswitch] fs_cli/event_socket.conf.xml

Freeswitch에서 asterisk -r 과 같은 Command line interpreter 역할을 하는 것이 fs_cli  이다.

기본적으로 Freeswitch 를 설치하게 되면 fs_cli 도 같이 사용할 수 있도록 설정되어 있다. 그러나, 보안상의 이유로 이 기능을 On/Off 해야 하는 경우가 생긴다.

이 경우, Freeswitch Server 에서 fs_cli 지원 모듈을 On/Off 해주면 된다.

modules.conf.xml 파일에서 mod_event_socket 모듈을 load/unload 하게 되면 fs_cli 기능을 On/Off 할 수 있다.

<configuration name="modules.conf" description="Modules">
  <modules>

    <!-- Loggers (I'd load these first) -->
    <load module="mod_console"/>
    <load module="mod_logfile"/>
    <!-- <load module="mod_syslog"/> -->

    <!--<load module="mod_yaml"/>-->

    <!-- Multi-Faceted -->
    <!-- mod_enum is a dialplan interface, an application interface and an api command interface -->
    <load module="mod_enum"/>

    <!-- XML Interfaces -->
    <!-- <load module="mod_xml_rpc"/> -->
    <!-- <load module="mod_xml_curl"/> -->
    <!-- <load module="mod_xml_cdr"/> -->
    <!-- <load module="mod_xml_scgi"/> -->

    <!-- Event Handlers -->
    <load module="mod_cdr_csv"/>
    <!-- <load module="mod_cdr_sqlite"/> -->
    <!-- <load module="mod_event_multicast"/> -->
    <load module="mod_event_socket"/>
    <!-- <load module="mod_event_zmq"/> -->

기본적으로 Freeswitch 를 설치하게 되면 fs_cli 도 같이 사용할 수 있도록 설정되어 있다. 그러나, 보안상의 이유로 이 기능을 On/Off 해야 하는 경우가 생긴다.
이 경우, Freeswitch Server 에서 fs_cli 지원 모듈을 On/Off 해주면 된다.

그리고, fs_cli 의 접속 권한과 같은 부분들을 관리 하고자 한다면 event_socket.conf.xml 파일을 수정하면 된다.

pchero@MyDebian:/usr/local/freeswitch/conf/autoload_configs$ cat event_socket.conf.xml

<configuration name="event_socket.conf" description="Socket Client">
  <settings>
    <param name="nat-map" value="false"/>
    <!--<param name="listen-ip" value="127.0.0.1"/>-->
    <param name="listen-ip" value="0.0.0.0"/>
    <param name="listen-port" value="8021"/>
    <param name="password" value="ClueCon"/>
    <param name="apply-inbound-acl" value="local_net"/>
    <!--<param name="apply-inbound-acl" value="lan"/>-->
    <!--<param name="stop-on-bind-error" value="true"/>-->
  </settings>
</configuration>

[Asterisk] Checking available SIP port.

Asterisk Test Server 를 구축해 놓고, 정상적으로 포트가 열렸는지(방화벽..)를 확인하는 작업을 진행하고 있었다.

이상하게.. 어디에 문제가 있는 정확히는 알 수는 없었지만 정상적인 작동이 되지 않았다.

방화벽 문제로 판단을 하고 하나씩 하나씩 iptables 옵션을 확인해가며 방화벽들을 내리고 있었다.

 

하나씩 방화벽을 내릴 때마다 정상적으로 작동이 되는지(즉, 해당 포트로 Ping 이 나가는지)를 확인하기 위해 한번씩 telnet 을 이용하여 해당 포트(5060-sip)로 접속을 시도하였다.

 

한참을 그렇게 작업을 진행하던 중, 방화벽을 잠시 전부 꺼두었다는 이야기가 들려와 다시한번 telnet 으로 해당포트에 접속을 시도하였다.

결과는 실패였다.

 

아직 방화벽이 안내려간거 같다고 하니, 다른쪽에서는 Test Server가 정상적으로 작동을 한다고 한다.

헛?? 설마??

 

동작 테스트를 해보니 정상적으로 작동을 한다..

무슨 일일까?

 

문제는 내 Test 방법에 있었다.

나는 줄곧 telnet 으로 해당 포트를 두드렸던것..

 

하지만 Telnet 은 기본적으로 TCP 를 이용하여 접속을 시도한다…..

UDP 로 확인해야 하는데.. 계속해서 TCP 로 확인을 시도했던것…

 

기억하자. Asterisk 에서 SIP 통신 연결을 확인하기 위해서는 Telnet 으로는 불가능하다는 것을..

MyDebian*CLI> sip show peers
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      
test01/test01             192.168.200.1                            D  Yes        Yes            5060     OK (32 ms)                                   
test02/test02             192.168.200.1                            D  Yes        Yes            5060     OK (31 ms)                                   
test03/test03             192.168.200.1                            D  Yes        Yes            5060     OK (32 ms)                                   
voicemail_trunk-01        192.168.200.10                              Auto (No)  No          A  5080     OK (1 ms)                                    
4 sip peers [Monitored: 4 online, 0 offline Unmonitored: 0 online, 0 offline]