This question is a bit broad, but I&#39;ll add some info that I hope is useful.<br><br>When mod_voicemail.c is first loaded (or when it is re-loaded) then it will read from voicemail.conf.xml to get its base configuration. That configuration file defines voicemail &quot;profiles&quot; that can be used. The example configuration provides a &quot;default&quot; profile that defines things like the menu keys, skip greeting key, operator extension, etc. This &quot;default&quot; value corresponds to this line from conf/dialplan/default.xml where the Local_Extension sends a call to voicemail:<br>
<br><span style="font-family:courier new,monospace"> &lt;action application=&quot;bridge&quot; data=&quot;loopback/app=voicemail:default ${domain_name} ${dialed_extension}&quot;/&gt;</span><br><br>You could define other profiles if you so desire and then give them other names.<br>
<br>The sounds.xml and tts.xml files both accomplish the same thing: they define phrase macros that get played while a caller is connected to voicemail. The sounds.xml file uses the pre-recorded sound files to stitch together phrases whereas tts.xml uses a text-to-speech engine to accomplish the same purpose. There really is no reason to use tts.xml unless you need a voice or language where recordings are not available but for which you do have a TTS engine.<br>
<br>The best way to see what&#39;s happening with mod_voicemail is to watch the console debug log while you dial in and check your voicemail. The console log will display what&#39;s going on. You&#39;ll notice that by far you see things like &quot;switch_ivr_play_say.c&quot; and &quot;switch_rtp.c&quot;. Consider this snippet of me logging in to mailbox 1001:<br>
<br><font size="1"><span style="font-family:courier new,monospace">2012-11-20 12:09:05.286038 [DEBUG] switch_rtp.c:3606 Correct ip/port confirmed.<br>EXECUTE sofia/internal/<a href="mailto:1001@10.15.64.229">1001@10.15.64.229</a> voicemail(check default 10.15.64.229)<br>
2012-11-20 12:09:06.206030 [DEBUG] switch_ivr_play_say.c:67 No language specified - Using [en]<br>2012-11-20 12:09:06.446031 [DEBUG] switch_ivr_play_say.c:67 No language specified - Using [en]<br>2012-11-20 12:09:06.446031 [DEBUG] switch_ivr_play_say.c:244 Handle play-file:[voicemail/vm-enter_id.wav] (en:en)<br>
2012-11-20 12:09:06.446031 [DEBUG] switch_ivr_play_say.c:1309 Codec Activated L16@16000hz 1 channels 20ms<br>2012-11-20 12:09:08.406030 [DEBUG] switch_ivr_play_say.c:1682 done playing file /usr/local/freeswitch/sounds/en/us/callie/voicemail/vm-enter_id.wav<br>
2012-11-20 12:09:08.526030 [DEBUG] switch_ivr_play_say.c:244 Handle say:[#] (en:en)<br>2012-11-20 12:09:08.526030 [DEBUG] switch_ivr_play_say.c:1309 Codec Activated L16@16000hz 1 channels 20ms<br>2012-11-20 12:09:09.186029 [DEBUG] switch_ivr_play_say.c:1682 done playing file file_string://ascii/35.wav<br>
2012-11-20 12:09:09.366029 [DEBUG] switch_rtp.c:3809 RTP RECV DTMF 1:1440<br>2012-11-20 12:09:09.786028 [DEBUG] switch_rtp.c:3809 RTP RECV DTMF 0:1120<br>2012-11-20 12:09:09.986027 [DEBUG] switch_rtp.c:3809 RTP RECV DTMF 0:1120<br>
2012-11-20 12:09:10.526029 [DEBUG] switch_rtp.c:3809 RTP RECV DTMF 1:1280<br>2012-11-20 12:09:11.166034 [DEBUG] switch_rtp.c:3809 RTP RECV DTMF #:1040<br>2012-11-20 12:09:11.166034 [DEBUG] switch_ivr_play_say.c:67 No language specified - Using [en]<br>
2012-11-20 12:09:11.166034 [DEBUG] switch_ivr_play_say.c:244 Handle play-file:[voicemail/vm-enter_pass.wav] (en:en)<br>2012-11-20 12:09:11.166034 [DEBUG] switch_ivr_play_say.c:1309 Codec Activated L16@16000hz 1 channels 20ms<br>
2012-11-20 12:09:13.106029 [DEBUG] switch_ivr_play_say.c:1682 done playing file /usr/local/freeswitch/sounds/en/us/callie/voicemail/vm-enter_pass.wav<br>2012-11-20 12:09:13.226027 [DEBUG] switch_ivr_play_say.c:244 Handle say:[#] (en:en)<br>
2012-11-20 12:09:13.226027 [DEBUG] switch_ivr_play_say.c:1309 Codec Activated L16@16000hz 1 channels 20ms<br>2012-11-20 12:09:13.886031 [DEBUG] switch_ivr_play_say.c:1682 done playing file file_string://ascii/35.wav<br>2012-11-20 12:09:14.086030 [DEBUG] switch_rtp.c:3809 RTP RECV DTMF 1:1280<br>
2012-11-20 12:09:14.586029 [DEBUG] switch_rtp.c:3809 RTP RECV DTMF 0:1280<br>2012-11-20 12:09:14.746031 [DEBUG] switch_rtp.c:3809 RTP RECV DTMF 0:800<br>2012-11-20 12:09:15.306037 [DEBUG] switch_rtp.c:3809 RTP RECV DTMF 1:1200<br>
2012-11-20 12:09:15.766043 [DEBUG] switch_rtp.c:3809 RTP RECV DTMF #:1200<br></span></font><br>Notice that there&#39;s no reference to &quot;mod_voicemail.c&quot; in there. That&#39;s because mod_voicemail uses FS core APIs to perform basic functions like playing sound files and collecting digits from the caller. That&#39;s ok - once you get into the source code you&#39;ll start to see the connection. I&#39;ll get you started. Open up src/mod/application/mod_voicemail/mod_voicemail.c and find the function named &quot;voicemail_check_main&quot; near line 1850. When you log in to check your voicemail this function controls the whole session from the time you log in to the time you hang up. The switch statement near line 1903 checks the state and acts accordingly. Look at all the case statements - they handle the various states, like &quot;this person needs to log in&quot; (VM_CHECK_AUTH) or &quot;play the messages in this folder&quot; (VM_CHECK_PLAY_MESSAGES).<br>
<br>I&#39;m afraid I can&#39;t really go into any more detail without spending a lot of time going line-by-line and translating the source code into plain-language equivalents. However, I think you&#39;ll find that you are quite capable doing this with a little practice and a lot of test calls. The FreeSWITCH source code is extremely clean and in many cases is self-documenting. Many non-C programmers are able to discern what a piece of code is doing simply by looking at it and observing what it does when a call is in progress. Here&#39;s a tip: you can add your own debug print lines to the code and recompile and reload mod_voicemail. Look for places in the code where you see occurrences of &quot;switch_log_printf&quot; and I think you&#39;ll be able to figure it out. <br>
<br>Last tip: to recompile mod_voicemail (or any other module) just go to the root of the freeswitch source and type:<br>make mod_voicemail-install<br><br>That&#39;s it! Then go to fs_cli and type &quot;reload mod_voicemail&quot; and you&#39;re ready to try out your changes.<br>
<br>I hope this helps all those who are curious about diving into the code. It&#39;s not too scary as long as you don&#39;t mess with it on a production machine. ;)<br><br>-Michael<br><br>P.S. - If you want to learn more about phrase macros then I highly recommend chapter six of the original FreeSWITCH book. I cover part of the sounds.xml phrase file, specifically the macro that handles pluralizing the phrase &quot;you have x new message(s)&quot;. <br>
<br><br><br><div class="gmail_quote">On Tue, Nov 20, 2012 at 8:18 AM, Archana Venugopan <span dir="ltr">&lt;<a href="mailto:a.venugopan@mundio.com" target="_blank">a.venugopan@mundio.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div link="blue" vlink="purple" lang="EN-GB">
<div>
<p class="MsoNormal">Hi,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">While dialing voicemail, mod_voicemail.c file plays the primary role. I know it considers sounds.xml,tts.xml(/usr/local/freeswitch/conf/lang/en/vm) and voicemail.conf.xml (/usr/local/freeswitch/conf/autoload_configs).<u></u><u></u></p>

<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Once the c file is hit after that what happens and how the flow goes? Can anyone please explain? As am not that good in C, I don’t understand the flow.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thanks.<u></u><u></u></p>
</div>
</div>

<br>_________________________________________________________________________<br>
Professional FreeSWITCH Consulting Services:<br>
<a href="mailto:consulting@freeswitch.org">consulting@freeswitch.org</a><br>
<a href="http://www.freeswitchsolutions.com" target="_blank">http://www.freeswitchsolutions.com</a><br>
<br>
FreeSWITCH-powered IP PBX: The CudaTel Communication Server<br>
<a href="http://www.cudatel.com" target="_blank">http://www.cudatel.com</a><br>
<br>
Official FreeSWITCH Sites<br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<a href="http://wiki.freeswitch.org" target="_blank">http://wiki.freeswitch.org</a><br>
<a href="http://www.cluecon.com" target="_blank">http://www.cluecon.com</a><br>
<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Michael S Collins<br>Twitter: @mercutioviz<br><a href="http://www.FreeSWITCH.org" target="_blank">http://www.FreeSWITCH.org</a><br><a href="http://www.ClueCon.com" target="_blank">http://www.ClueCon.com</a><br>
<a href="http://www.OSTAG.org" target="_blank">http://www.OSTAG.org</a><br><br><br>