<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.1.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Panoramisk</title>
	<link>http://www.panoramisk.com</link>
	<description>Le druide de la VoIP</description>
	<pubDate>Wed, 21 May 2008 06:11:52 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1.3</generator>
	<language>en</language>
			<item>
		<title>Siproxd: A simple sip proxy</title>
		<link>http://www.panoramisk.com/168/siproxd-a-simple-sip-proxy/en/</link>
		<comments>http://www.panoramisk.com/168/siproxd-a-simple-sip-proxy/en/#comments</comments>
		<pubDate>Wed, 21 May 2008 06:11:52 +0000</pubDate>
		<dc:creator>jsr</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>
<category>NAT</category><category>proxy</category><category>SIP</category><category>sip proxy</category><category>vpn</category>
		<guid isPermaLink="false">http://www.panoramisk.com/168/siproxd-a-simple-sip-proxy/en/</guid>
		<description><![CDATA[<p>One of the main issue with SIP is that NAT traversal is a nightmare. When you connect to your corporate network using a VPN, it is not easy to use a sip hard phone. Using a softphone is, in general, the simplest way.</p>
<p>However a small tool really useful can help you: Siproxd<!--more--></p>
<p>Siproxd is a Sip proxy really simple to use. After a standard installation (depending of your distribution) you can start to configure it. Three parameters must be modified:</p>
<ul>
<li><strong>if_inbound</strong>: used to define the network interface used as internal network. It&#8217;s the network where your sip phone is plugged (eth0 for example)</li>
<li><strong>if_outbound</strong>: used to define external network interface. In my case it is the VPN&#8217;s virtual network interface (tap0 for example)</li>
<li><strong>hosts_allow_reg</strong>: list of networks allowed to register to a SIP server.</li>
</ul>
<p>Now you have a fully functional Sip proxy. Adding debug log (silence_log parameter) can help you for diagnostic.</p>
<p>Finally only a Microsoft Windows port is missing&#8230;</p>
<p>Project web : <a href="http://siproxd.sourceforge.net/">siproxd</a></p>
]]></description>
		<wfw:commentRss>http://www.panoramisk.com/168/siproxd-a-simple-sip-proxy/en/feed/en/</wfw:commentRss>
	 
	</item>
		<item>
		<title>Presentation of Astitray: A desktop click to call tool</title>
		<link>http://www.panoramisk.com/166/presentation-of-astitray-a-desktop-click-to-call-tool/en/</link>
		<comments>http://www.panoramisk.com/166/presentation-of-astitray-a-desktop-click-to-call-tool/en/#comments</comments>
		<pubDate>Sun, 04 May 2008 16:36:48 +0000</pubDate>
		<dc:creator>jsr</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>
<category>asterisk</category><category>desktop</category><category>proxy</category>
		<guid isPermaLink="false">http://www.panoramisk.com/166/presentation-of-astitray-a-desktop-click-to-call-tool/en/</guid>
		<description><![CDATA[<p>When we left traditional telephony for a VOIP solution, we have, more than before, the way to connect PBX to all other existing systems. Controlling a phone using his desktop computer is really useful.<!--more--></p>
<p>Then Astitray&#8217;s objective is to provide:</p>
<ul>
<li>A simple application</li>
<li>with a good desktop integration</li>
<li>which allow to originate calls</li>
<li>with a central phone book</li>
</ul>
<p>Of course it is not possible to open a manager access to all desktop computers and sharing a common access will allow bad jokes (like originate a call for a friend&#8230;).</p>
<p>The Astitray coming with a XMLRPC server written in PHP. This one handle access control and all services. The objective of this is to create an abstraction stack for PBX communication. In this situation, it&#8217;s possible to write a &#8220;driver&#8221; for an other PBX than Asterisk.</p>
<p>Anyway, depending of the number of desktop computers, XMLRPC server should not be used directly with asterisk manager and a proxy must be used. But Astitray use <a href="Ajam">Ajam</a> to communicate with asterisk. For the moment, there is no proxy which is able to handle this. So writing driver for handling <a href="http://www.voip-info.org/wiki/index.php?page=Asterisk+manager+API">native manager protoco</a>l in Astitray is the next step for the project !</p>
]]></description>
		<wfw:commentRss>http://www.panoramisk.com/166/presentation-of-astitray-a-desktop-click-to-call-tool/en/feed/en/</wfw:commentRss>
	 
	</item>
		<item>
		<title>ENUM or &#8220;peer-to-peer&#8221; IP telephony</title>
		<link>http://www.panoramisk.com/158/enum-or-peer-to-peer-ip-telephony/en/</link>
		<comments>http://www.panoramisk.com/158/enum-or-peer-to-peer-ip-telephony/en/#comments</comments>
		<pubDate>Fri, 19 Oct 2007 17:41:04 +0000</pubDate>
		<dc:creator>Alexandre Chauvin-Hameau</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>
<category>centrex</category><category>ENUM</category><category>extensions.conf</category><category>security</category><category>SIP</category><category>sip.conf</category><category>ToIP</category>
		<guid isPermaLink="false">http://www.panoramisk.com/158/enum-or-peer-to-peer-ip-telephony/en/</guid>
		<description><![CDATA[<p>You are now an IP telephony user and have installed an Asterisk. You are using an IP Centrex link to a SIP or IAX operator. Go to the next level with peer-to-peer telephony with ENUM.<!--more--></p>
<p>ENUM is a telephony directory system based on DNS infrastructure and allowing an association between a traditional phone number (using E.164 format) and Internet oriented information. It is possible to store information related to email address, URL but more important for us today: SIP, IAX or H.323 addresses that could be used to be reached through.</p>
<p>ENUM can authorize a smooth transition between the traditional telephony system, where we are using phone numbers, towards pure IP telephony where we will manipulate URI (as email addresses). We are today in between, using IP telephony with traditional phone numbers.</p>
<h2>How is ENUM working</h2>
<p>As said previously, ENUM is based on DNS. It stores information accessible through this protocol and highly used over the Internet to translate names to IP addresses. With ENUM we are translating phone numbers to internet information like a SIP address for example. The key used in the ENUM base is a traditional phone number but these ones are mostly used nowadays, no issue.</p>
<p>Whenever an IP PBX wants to route a call to a traditional phone number, it could check first if a SIP (or IAX or H.323) record is available in the ENUM base. If such information exists, it could use it to establish a peer-to-peer telephony call, directly over the Internet or any other IP network. If the information isn’t available, the call will be routed through a standard operator (PSTN or Centrex).</p>
<h2>How to register</h2>
<p>Prior being able to get direct call on your IP PBX, it requires you register your phone number into one of the ENUM databases. Effectively there are multiple ENUM databases, some are maintained by providers, other are free, you can also build your own one for a closed user group. We can consider today that ENUM is not yet widely deployed by telcos since it authorize peer-to-peer calls that will not be billed, nor even supervised.</p>
<p>The easiest way to start is by using the <a href="http://www.e164.org">e164.org</a> free service<sup><a href="#footnote-1-158" id="footnote-link-1-158" class="footnote-link footnote-identifier-link" title="for sure you can donate afterwards if you like it">1</a></sup>. Once your account created, you can register two different entries:
<ul>
<li>from a PSTN valid number you can link one or multiple IP telephony records (ie a SIP uri),</li>
<li>from an IP PBX connected to the Internet (directly or through an SBC<sup><a href="#footnote-2-158" id="footnote-link-2-158" class="footnote-link footnote-identifier-link" title="Session Border Controller">2</a></sup> ) get virtual numbers that can be called by any ENUM user. For example, e164.org is providing you with 10.000 numbers for each server you register, enough to start with, isn’t it?</li>
</ul>
<p><u>Warning</u>: any ENUM SIP entry at e164.org requires a valid PBX. A validation call will be issued during register in order to avoid fake entries.</p>
<h2>How to check a record</h2>
<p>Once registered in the system, your ENUM information will be propagated in the DNS system and can be queried by DNS client tool. If you haven’t the <tt>dig</tt> DNS client on your system, it is a good time to install it.</p>
<p>In order to query the ENUM system, we have to provide it a phone number. The request is similar to a reverse IP address query, we have to rewrite the phone number in reverse for this (try to make it without pen and paper, it is good for brain training). Last, since we are looking for a specific information and not a domain name or an IP address, we will specify the NAPTR type of record. A typical query could looks like:<font size="-1">
<pre>dig 9.9.9.9.8.7.3.5.0.0.9.9.2.8.8.e164.org. NAPTR</pre>
<p></font></p>
<p>This request query the ENUM database for an IP telephony way to reach the user with the phone number : 88299 005378 9999. This number is not a PSTN number but one from my personal number out of the e164.org range. The answer is:<font size="-1">
<pre>;; ANSWER SECTION:
9.9.9.9.8.7.3.5.0.0.9.9.2.8.8.e164.org. 600 IN NAPTR
   100 10 "u" "E2U+IAX2"
   "!^\+88299005378(.*)$!iax2:guest@cislyon.homeip.net/88299005378\1!" .</pre>
<p></font></p>
<p>It is an IAX record followed by a URI that can be directly used through the Asterisk <tt>Dial()</tt> command.</p>
<p>When your record is in the ENUM database and available through your DNS client, any IP PBX using the ENUM would be able to place a peer-to-peer call to your place.</p>
<h2>Asterisk configuration for ENUM</h2>
<p>You will find some literature over the Internet to set up your ENUM configuration in Asterisk, but for a quick test, here are the main points.</p>
<h3>Receiving calls with IAX</h3>
<p>IAX is the Asterisk protocol used to interconnect PBX. This solution has a big advantage: the signalling and voice parts are sharing the same media path, only one UDP port is used for a phone conversation, which is good for firewall and NAT boxes. Once your security infrastructure allows IAX calls to flow in, we have to add few things in the Asterisk configuration.</p>
<p>In <tt>iax.conf</tt> we add a specific section corresponding to the entry registered in the ENUM. In the previous example, my number 88299 005378 9999 is associated to a user called <tt>guest</tt> located behind a server called <tt>cislyon.homeip.net</tt>. The section to add in the configuration is: <font size="-1">
<pre>[guest]
type=user
context=fromiax</pre>
<p></font></p>
<p>This one is very basic and will probably need some adjustment if needed (ie codec). From a security standpoint, since calls from anywhere over the Internet needs to be accepted, there is no <tt>host</tt> line<sup><a href="#footnote-3-158" id="footnote-link-3-158" class="footnote-link footnote-identifier-link" title="we will see in another article how to protect from spam and spit">3</a></sup>. Any call towards this user will be presented to the <tt>fromiax</tt> context in the dial plan.</p>
<p>The dial plan is configured in the <tt>extensions.conf</tt> file and contains any action required to handle a call. The configuration could look like <font size="-1">
<pre>[fromiax]
; echo pour Enum IAX
exten => 882990053789999,1,Answer()
exten => 882990053789999,n,Echo()
</pre>
<p></font></p>
<p>Here, we have an entry corresponding to the phone number and the service proposed is an echo of anything you would say, ideal for testing service, quality and latency<sup><a href="#footnote-4-158" id="footnote-link-4-158" class="footnote-link footnote-identifier-link" title="you could give a call to this extension for your ENUM tests">4</a></sup>.</p>
<h3>Receiving calls with SIP</h3>
<p>When dealing with SIP, even if the principle remains the same, we have more things to do and the configuration is a bit different. But first we assume that you can receive SIP calls from the Internet with regards to security measures (firewall, NAT, &#8230;).</p>
<p>If you plan using e164.org, you have to set-up the call validation part. One approach is to create a dedicated context in <tt>sip.conf</tt>. This could differ based on the ENUM provider you may choose. You can add something like:<font size="-1">
<pre>[enumsip-e164]
type=peer
host=e164.org
qualify=no
context=from-e164org
insecure=very</pre>
<p></font></p>
<p>In the call plan, we have to add a section for this call validation, but since only an INVITE is sent, we limit it to something like:<font size="-1">
<pre>[from-e164org]
exten => _.,1,Answer()
exten => _.,2,Hangup()</pre>
<p></font></p>
<p>Now we need the specific configuration to accept SIP calls. This part is not trivial since Asterisk wants to validate any peer establishing a SIP session and link it to a context in <tt>sip.conf</tt>. In our ENUM case, we would like any call to be accepted, by definition we don’t know by advance who will place it. We will for this part use the fallback test proposed by the SIP Asterisk implementation: if a call could not be linked to a context, send it to the dial plan <tt>default</tt> context. Since any call will arrive in this context we have to be careful on our dialling rules. For example you could do in <tt>extensions.conf</tt>: <font size="-1">
<pre>[default]
; echo pour ENUM SIP
exten => 882990065339999,1,Answer()
exten => 882990065339999,n,Echo()</pre>
<p></font></p>
<p>A SIP call to 88299 006533 9999<sup><a href="#footnote-5-158" id="footnote-link-5-158" class="footnote-link footnote-identifier-link" title="this is also a specific e164.org number">5</a></sup>, will arrive to the Echo() application.</p>
<p>Now our Asterisk system is able to get calls, let’s move to the dialling part.</p>
<h2>Dialling with ENUM</h2>
<p>The idea here is to check whether an ENUM entry exists before using a standard PSTN or SIP provider. The function used is called <tt>ENUMLOOKUP</tt> and available in the <tt>func_enum.so</tt> module. This one should be present in the module configuration and the associated <tt>enum.conf</tt> file in the configuration directory.</p>
<p>The <tt>ENUMLOOKUP</tt> performs the DNS query to the ENUM provider specified, by default <tt>e164.arpa</tt>.</p>
<p>Our proposal to add in the <tt>extensions.conf</tt> file is a macro:<font size="-1">
<pre>; callENUM *****
; --- get address in ENUM DNS record and dial
; args:
;  1: extension
;  2: domain to lookup
;  3: iax2 or sip
;
[macro-callENUM]
exten => s,1,Set(count=${ENUMLOOKUP(+${ARG1},${ARG3},c,,${ARG2})}|counter=0)
exten => s,n(start),GotoIf($["${counter}" >= "${count}"]?end)
exten => s,n,Set(counter=$[${counter}+1])
exten => s,n,Set(ENUM=${ENUMLOOKUP(+${ARG1},${ARG3},,${counter},${ARG2})})
exten => s,n,GotoIf($["${LEN(${ENUM})}" = "0" ]?start)
exten => s,n,Set(DIALSTR=${ARG3}/${ENUM})
exten => s,n(dodial),Dial(${DIALSTR},30)
exten => s,n,GotoIf($["${DIALSTATUS}"=="CHANUNAVAIL"]?start)
exten => s,n,GotoIf($["${DIALSTATUS}"=="CONGESTION"]?start)
exten => s,n(end),Verbose(Dial failed due to ${DIALSTATUS})
</pre>
<p></font></p>
<p>The way it works is: first we check that at least one record is present in the ENUM database (there could be more than one for redundancy purpose). Then we look for a specific record matching a signalling protocol that could be IAX or SIP, then use the answer to perform a <tt>Dial()</tt>. If the call is not working, we try the next record and return if success-less.</p>
<p>In order to use this macro one could use something like:<font size="-1">
<pre>exten => _X.,1,Macro(callENUM,${EXTEN},e164.org,iax2)
exten => _X.,2,Macro(callENUM,${EXTEN},e164.org,sip)
exten => _X.,3,Macro(callENUM,${EXTEN},e164.arpa,sip)</pre>
<p></font></p>
<p>Here we try an IAX the SIP call with ENUM record in e164.org. If not working, we try in SIP only with the e164.arpa ENUM database.</p>
<h2>Conclusion</h2>
<p>We could see here that peer-to-peer IP telephony is technically ready but not yet widely used since the PSTN network is still highly used. The migration towards IP telephony is in progress and initiatives such as ENUM are very good since will allow “operator less IP telephony”. It will remain some issue to solve with regards to regulation and legal monitoring of phone calls which are technically difficult to put in place with peer-to-peer telephony.</p>
<p>Don’t expect to receive a lot of phone calls through your ENUM registery, but the more will use it the more we will have a chance to place free calls using our IP PBX.</p>
<p><hr/></p>
<ol start="1" class="footnotes"><li id="footnote-1-158" class="footnote">for sure you can donate afterwards if you like it [<a href="#footnote-link-1-158" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-2-158" class="footnote">Session Border Controller [<a href="#footnote-link-2-158" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-3-158" class="footnote">we will see in another article how to protect from spam and spit [<a href="#footnote-link-3-158" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-4-158" class="footnote">you could give a call to this extension for your ENUM tests [<a href="#footnote-link-4-158" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-5-158" class="footnote">this is also a specific e164.org number [<a href="#footnote-link-5-158" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></description>
		<wfw:commentRss>http://www.panoramisk.com/158/enum-or-peer-to-peer-ip-telephony/en/feed/en/</wfw:commentRss>
	 
	</item>
		<item>
		<title>Aastra Wi-Fi SIP phone</title>
		<link>http://www.panoramisk.com/155/aastra-wi-fi-sip-phone/en/</link>
		<comments>http://www.panoramisk.com/155/aastra-wi-fi-sip-phone/en/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 09:30:20 +0000</pubDate>
		<dc:creator>Alexandre Chauvin-Hameau</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>
<category>Aastra</category><category>IP phone</category><category>SIP</category><category>wi fi</category>
		<guid isPermaLink="false">http://www.panoramisk.com/155/aastra-wi-fi-sip-phone/en/</guid>
		<description><![CDATA[<p>The Canadian manufacturer Aastra will soon officially announce the venue of a new Wi-Fi SIP phone, called 312, even if the net is already buzzing this info. There are already SIP DECT phone at Aastra but since some customers would like to leverage their Wi-Fi infrastructure in order to carry voice, this new product arrive at a good time.<!--more--></p>
<p><img src='/wp-content/uploads/2007/10/aastraphone_312_140x140.jpg' alt='Aastra Wi-Fi phone' style="margin: 3px 0px 3px 10px; float: right;" />A new Wi-Fi phone, this is not really a big news since the market is already filled with these small gadgets. But the data sheet and user guide are talking about some innovation that may raise the customer expectation on this area. If we consider that Aastra reports its experience on SIP in the new model and install a similar software in its Wi-Fi model than in the 5xi product range, I think I will love it<sup><a href="#footnote-1-155" id="footnote-link-1-155" class="footnote-link footnote-identifier-link" title="I am a 5xi fan">1</a></sup>.</p>
<p>In the proposed features I have seen :
<ul>
<li>the ability to store the phone configuration, user profile and phone book on a memory card that could be transferred to another phone. This feature was used on some market telephony turrets, but I haven’t seen it on IP phones.</li>
<li>a real user guide</li>
<li>Wi-Fi security with WPA and WPA2 using pre-shared keys (no Enterprise mode)</li>
<li>IEEE 802.11e support for efficient power saving implementing U-APSD</li>
<li>since such a phone will be in movement, the screen is able to show the Wi-Fi radio signal level and the AP on which it is currently associated, as well as the history of the last one</li>
</ul>
<p>On the bad points, the information is not yet available on Aastra corporate site, but you can get it on the German entity that develop the product. This is probably linked to the fact the products hasn’t yet been widely launched.</p>
<p>We are very excited about testing this new IP phone with Asterisk and asked to the French Aastra entity to send us a model. This will be done soon so stay tuned&#8230;</p>
<ol start="1" class="footnotes"><li id="footnote-1-155" class="footnote">I am a 5xi fan [<a href="#footnote-link-1-155" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></description>
		<wfw:commentRss>http://www.panoramisk.com/155/aastra-wi-fi-sip-phone/en/feed/en/</wfw:commentRss>
	 
	</item>
		<item>
		<title>Analyzing VoIP with Wireshark</title>
		<link>http://www.panoramisk.com/151/analyzing-voip-with-wireshark/en/</link>
		<comments>http://www.panoramisk.com/151/analyzing-voip-with-wireshark/en/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 13:23:48 +0000</pubDate>
		<dc:creator>Alexandre Chauvin-Hameau</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>
<category>asterisk</category><category>canreinvite</category><category>codec</category><category>IP phone</category><category>RTP</category><category>SIP</category><category>ToIP</category>
		<guid isPermaLink="false">http://www.panoramisk.com/151/analyzing-voip-with-wireshark/fr/</guid>
		<description><![CDATA[<p>When working in the IP telephony world it is crucial to know how to use a network analyzer, in order to understand how the traffic is circulating over the network. This article presents some interesting <a href="http://www.wireshark.org/">Wireshark</a> features related to voice over IP protocols.<!--more--></p>
<h2>Introduction</h2>
<p>
<div style="margin: 3px 0px 3px 10px; float: right;">
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p>Wireshark (aka Ethereal) is a tool to have in his toolbox whenever working with application using the network; it is simple, efficient and running either on Microsoft Windows or Linux, moreover it is free. Even if you will find on some commercial products very powerful features, Wireshark has some good plugging targeting the VoIP space (aside many others). This article is more focusing on SIP and RTP protocols which represents most of nowadays voice over IP implementation.</p>
<h2>How to capture frames</h2>
<p>Prior analysing the network frames crossing the network it is required to capture these ones. Analysis could be done either in real time when Wireshark is running on the probe itself, but it is also possible to capture the frames, store these in a file and perform the analysis afterwards.<br/> More important is where to locate the probe in order to gather the appropriate frames containing voice related protocols. Since the SIP protocol is really distributed by nature, gathering voice traffic is a challenge but there are solutions.</p>
<p>In order to collect voice frames we can either use Wireshark directly or use the application <tt>tcpdump</tt>, available on most Unixes and working directly from the command line.</p>
<p>With the chosen tool, two approaches are proposed:
<ul>
<li><b>using a mirror port on a switch</b>: this solution requires to use network switches with a port mirroring feature. Generally available on advanced enterprise products, some low end devices are not supporting it. The feature is sometime called port mirroring or SPAN port but the way it works is the same: we configure the switch to copy all frames going in and out a specific port towards a dedicated port where the analyzer is connected. If the voice traffic is separated from the data traffic onto a specific VLan, it is sometimes possible to copy all traffic going through the Vlan towards the copy port. The port we will copy is where the <i>SIP proxy</i> is connected, but we can also copy an IP phone port if we know more precisely what to look at.</li>
<li><b>using directly the <i>proxy</i> server</b>: this second solution is about capturing traffic on the unix server hosting the <i>proxy</i>. For sure this requires running the <tt>tcpdump</tt> command directly from this server, which is not always possible. In the case of Asterisk, we are mainly using Linux as a hosting system and Linux does support <tt>tcpdump</tt> in most distribution, we will install it directly from the package if not yet present.</li>
</ul>
<h2>Capture with <tt>tcpdump</tt></h2>
<p>When using Asterisk, we can take advantage of two main points:
<ul>
<li>the operating system is mainly Linux, so we can use <tt>tcpdump</tt></li>
<li>Asterisk is acting as a “back-to-back UA”, that is to say it stays by default in the middle of any session (phone call), even if this is not following the SIP distributed model, we will leverage on it; see also “<a href="http://www.panoramisk.com/101/asterisk-and-voice-transport/en/">Asterisk and voice transport</a>”.</li>
</ul>
<p>When doing a capture directly from the Asterisk server, we will have the full voice session, including signalling (SIP part) and the voice transport (RTP part).</p>
<p><tt>tcpdump</tt> is a line command, it doesn’t require any graphical interface to run and is very light, we could use it without putting to much stress on our voice gateway and altering the quality<sup><a href="#footnote-1-151" id="footnote-link-1-151" class="footnote-link footnote-identifier-link" title="be careful if your system is low on resources since tcpdump works at a very low level and could impact real time performances in that case">1</a></sup>. As always with Unix, the command requires parameters and <tt>tcpdump</tt> proposes a lot of options. Here is a list of the useful ones in our case:
<ul>
<li><tt>-p</tt> : doesn’t start in promiscuous mode, only frames from or to the Asterisk node will be captured,</li>
<li><tt>-n</tt> : no name resolution, otherwise we will have a lot of DNS queries which is not useful at that stage, we could do name resolution afterwards if needed,</li>
<li><tt>-s 0</tt> : we get the full frame, not only the first bytes. When working only at the protocol level it is enough to get only the start of each frames, in our case we are requiring the content of the SIP and RTP frames. 0 means getting the whole frame,</li>
<li><tt>-w <i>output file</i></tt> : all the captured frames will be stored in the file. That way we will be able, afterwards, to analyze the frames from the file. If using ‘-’ as the name of the file, the output is send to the standard output, we will use this afterwards.</li>
</ul>
<p>In addition, we could specify to <tt>tcpdump</tt> a filter which will lower the number of frames we got in the capture. We can for example get only UDP frames and filter IP addresses in order to focus only on a specific host.</p>
<h3>Local capture</h3>
<p>In order to perform the capture directly on the Asterisk host we should be connected to it. This can be achieve either directly on the console or through a remote terminal,  I do like <tt>ssh</tt> like many admins since it is simple and secured.</p>
<p>With the following command <font size="-1">
<pre>tcpdump -w trace.cap -p -n -s 0 "udp”</pre>
<p></font>, we will gather all UDP frames in transit on our server, the capture will be stopped by pressing CRTL-c. The file <tt>trace.cap</tt> will be stored for later analysis. If storage space is low on the Asterisk server, we can compress the trace with a very good ratio, using <tt>gzip</tt>.</p>
<h3>Remote capture</h3>
<p>Since you could manage many Asterisk servers, it could be easier to start a capture from your desktop by using the remote command facility provided by <tt>ssh</tt>. The <tt>ssh</tt> command on the desktop is required, already installed on Mac OS X and on Linux, you can install the <a href="http://www.cygwin.com/">Cygwin</a> version on Microsoft Windows, you will have exactly the same command.</p>
<p>The proposed command is:<font size="-1">
<pre>ssh root@asterisk 'tcpdump -w - -p -n -s 0 udp' &gt; capture-asterisk.cap</pre>
<p></font></p>
<p>The capture will occur on the server named <tt>asterisk</tt> using the <tt>tcpdump</tt> command, the frames will not be stored on the server itself but redirected to the desktop machine through the <tt>ssh</tt> tunnel<sup><a href="#footnote-2-151" id="footnote-link-2-151" class="footnote-link footnote-identifier-link" title="one could put in place ssh keys in order to automated the login part">2</a></sup>. The file will be named <tt>capture-asterisk.cap</tt> and stored in the current directory. Using such method, you can start a capture on multiple Asterisk servers without having to connect on these and transfer the capture file afterwards, furthermore, no storage issue.</p>
<h2>Analyze</h2>
<p>One we have a trace file we can now use the Wireshark tool to dive in it.</p>
<p>Wireshark is using a rich GUI and presents all the frames in the capture<sup><a href="#footnote-3-151" id="footnote-link-3-151" class="footnote-link footnote-identifier-link" title="be careful to limit the capture file size, when playing with > 50MB files the memory is highly stressed">3</a></sup>. On the upper window part you have the frame list, below the content of the selected frame either in decoded format either in raw. For sure Ethernet and IP protocols are decoded, what interest us today are SIP, IAX2 and RTP protocols since dedicated to voice over IP.</p>
<p>From the file explorer, we can open the file trace and analyze it, by default frames are ordered by arrival time, you can change this sort criteria if required.</p>
<h3>Filtering</h3>
<p>Depending on the filter used during capture, we can have noisy frames in it. The filtering feature of Wireshark allows to focus only on specific frames, it is activated through the ‘Filter’ field on the upper part of the window. The filter language is specific but easy to learn, for example if only SIP frames are needed you enter the ‘<tt>sip</tt>’ filter, if you are interested in IAX, the filter is ‘<tt>iax2</tt>’. One tip: when the filter background field is green the syntax is ok, when orange it is not yet good.</p>
<p>If you need more complex filtering rules, you can directly select the field from the decode window. Each protocol fields can be selected and added to the current filter through a right click and the “Apply as filter / &#8230; and Selected” menu.</p>
<h3>SIP analysis</h3>
<p>When looking at all the frames we have in a capture, it could be difficult to find quickly what we are looking for. Hopefully, Wireshark is bundled with some SIP tools, these are accessible through the “Statistics / VoIP calls” menu.<br/><center><a onclick="window.open('/wp-content/uploads/2007/10/voip-analysis.png','popup','width=781,height=354,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0');" title='voip-analysis.png'><img src='/wp-content/uploads/2007/10/voip-analysis.thumbnail.png' alt='voip-analysis.png' /></a></center><br/>
<p>In the window you will see all the voice over IP calls present in the capture file. If the capture is performed directly with Wireshark, this list will evolve in real time.</p>
<p>From the list, it is possible to show a specific conversation graphically. This view is really helpful to follow the conversation since all frames can be selected and inspected in the main window. It is also possible to analyze the content of the voice conversation since transported in the RTP files.<br/><center><a onclick="window.open('/wp-content/uploads/2007/10/voip-analysis-graph.png','popup','width=597,height=472,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0');"><img src='/wp-content/uploads/2007/10/voip-analysis-graph.thumbnail.png' alt='voip-analysis-graph.png' /></a></center></p>
<p>The “Player” feature decodes the RTP frames associated with the selected conversation. The graph is showing the shape of the voice flow for both ways. This tool is interesting when focusing on voice quality, if a user is complaining when talking with a specific phone, it is possible to listen to the conversation afterwards.<br/><center><a onclick="window.open('/wp-content/uploads/2007/10/voip-analysis-voix.png','popup','width=783,height=435,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0');"><img src='/wp-content/uploads/2007/10/voip-analysis-voix.thumbnail.png' alt='voip-analysis-voix.png' /></a></center></p>
<h3>RTP analysis</h3>
<p>The RTP<sup><a href="#footnote-4-151" id="footnote-link-4-151" class="footnote-link footnote-identifier-link" title="Real Time Protocol">4</a></sup> protocol is not dedicated to voice over IP traffics. But this protocol is used aside H.323 and SIP signalling, Wireshark proposes a specific module to analyze the RTP flows. The feature is available through the “Statistics / RTP / Stream Analysis” menu.<br/><center><a onclick="window.open('/wp-content/uploads/2007/10/voip-rtp.png','popup','width=725,height=443,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0');"><img src='/wp-content/uploads/2007/10/voip-rtp.thumbnail.png' /></a></center><br/>
<p>The analysis window proposes information about the terminals engaged in the conversation, the used codec and some statistics about the flow. You can focus for example on jitter and packet loss in order to explain why the voice quality wasn’t good enough. From this module, it is also possible to extract the content of the RTP frames and rebuild a voice sound file. This one will be saved in WAV format and you can listen it with any sound tool available<sup><a href="#footnote-5-151" id="footnote-link-5-151" class="footnote-link footnote-identifier-link" title="if the codec used for encoding is supported by your player">5</a></sup>.</p>
<h2>Conclusion</h2>
<p>IP telephony, like any application heavily using the network, should be analyzed whenever a problem occurs. In order to be reactive, my advice is to train yourself when everything is working fine and you have spare time to train. This will allow you to know the tools but also when looking at nothing special it is very common to find issue on the network. Finally, don’t be afraid by protocols, even if they are complex, their proper understanding will be a great advantage when facing a real issue on your system.</p>
<p><hr/></p>
<ol start="1" class="footnotes"><li id="footnote-1-151" class="footnote">be careful if your system is low on resources since <tt>tcpdump</tt> works at a very low level and could impact real time performances in that case [<a href="#footnote-link-1-151" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-2-151" class="footnote">one could put in place <tt>ssh</tt> keys in order to automated the login part [<a href="#footnote-link-2-151" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-3-151" class="footnote">be careful to limit the capture file size, when playing with > 50MB files the memory is highly stressed [<a href="#footnote-link-3-151" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-4-151" class="footnote">Real Time Protocol [<a href="#footnote-link-4-151" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-5-151" class="footnote">if the codec used for encoding is supported by your player [<a href="#footnote-link-5-151" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></description>
		<wfw:commentRss>http://www.panoramisk.com/151/analyzing-voip-with-wireshark/en/feed/en/</wfw:commentRss>
	 
	</item>
		<item>
		<title>Client registration using SIP: REGISTER</title>
		<link>http://www.panoramisk.com/146/client-registration-using-sip-register/en/</link>
		<comments>http://www.panoramisk.com/146/client-registration-using-sip-register/en/#comments</comments>
		<pubDate>Wed, 10 Oct 2007 12:25:37 +0000</pubDate>
		<dc:creator>Alexandre Chauvin-Hameau</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>
<category>DHCP</category><category>DNS</category><category>SBC</category><category>SIP</category><category>sip.conf</category><category>ToIP</category><category>trunk</category>
		<guid isPermaLink="false">http://www.panoramisk.com/146/client-registration-using-sip-register/en/</guid>
		<description><![CDATA[<p>Registering a client in the SIP model is not mandatory, a session can be initiated with a peer without requiring a lookup in the SIP directory. But why is this method so important and how does it work? This article explains what is a registration in the SIP world and how it works with Asterisk.<!--more--></p>
<h2>Introduction</h2>
<p>SIP is a protocol dedicated to multimedia session establishment and management between peers. In this respect, SIP is considered as a peer-to-peer protocol. Today, we are mainly using SIP in the voice world in order to establish phone calls, but a lot of applications are supported by SIP on top of a session.<br/>In order to be able to establish a session (in our case a phone call), one peer needs to know how and where to reach the other peer. This function is provided by the <i>proxy</i> which is able to lookup the destination address and establish the relationship between both peers. The lookup is performed within a kind of directory and maintained by either static routing (call routing in this case) or dynamic registration of clients.</p>
<p>The SIP <i>proxy</i> server is looking in the directory for IP Information related to the session&#8217;s destination. We are talking about User Agent (UA) for the database key and IP information related are address, protocol (TCP or UDP) and port number. Each UA is hosted on an IP machine (ie an IP phone) and uses UDP (or TCP) ports in order to communicate. The default SIP port number is 5060 but it is not mandatory to use this one. When a <i>proxy</i> server is asked to put in relation two members of a session, it should find IP information related to each UA.</p>
<p><strong>This is the main role of the <i>registrar</i> to collect IP information from the UA and feed the directory in order for other SIP components (ie <i>proxy</i>) to be able to manipulate sessions.</strong></p>
<p>Since initial IP information are only known by the client (UA), we require a specific communication between the UA and the <i>registrar</i> in order to inform this one. This specific exchange is performed at the UA start-up and on a regular basis in order for the <i>registrar</i> to clean the directory from old (and thus invalid) records. By default the exchange is done every hour, but this period can be adjusted.</p>
<p><b>The registration phase between each UA and the <i>registrar</i> server is using a SIP specific method called REGISTER</b>.</p>
<h2>Parameters</h2>
<p>First, each UA willing to establish a session should know how to reach the other UA. Generally a SIP component is used for this purpose: the <i>proxy</i>. The <i>proxy</i> information should be available in the UA configuration. This is either done statically with a configuration in the UA maintained through the web interface, a file or through automatic provisioning if supported by the UA application. It could also be possible to use specific records available in a DNS service, for more information on this topic, please have a look to “<a href="http://www.panoramisk.com/74/sip-registry-and-dns-srv/en/">SIP registry and DNS SRV</a>”.</p>
<h2>How does it work</h2>
<p>Here below is a registration exchange trace between an IP phone (at <tt>192.168.16.181</tt>) and an Asterisk server (acting as a <i>registrar</i>, at <tt>192.168.16.40</tt>). The network trace has been collected with Wireshark and exported as text: <font size="-1">
<pre>Session Initiation Protocol
    Request-Line: REGISTER sip:192.168.16.40 SIP/2.0
        Method: REGISTER
        [Resent Packet: False]
    Message Header
        Via: SIP/2.0/UDP 192.168.16.181:32262;branch=z9hG4bK-d87543-624dc77d9c1b9618-1--d87543-;rport
        Max-Forwards: 70
        Contact: &lt;sip:11@192.168.16.181:32262;rinstance=9dd2c78e6ac0a5a5&gt;
        To: "soft 2"&lt;sip:11@192.168.16.40&gt;
        From: "soft 2"&lt;sip:11@192.168.16.40&gt;;tag=394aa21c
        Call-ID: YjYzYTAyNzM0NGVkYmEzZWMyMzJmNzMzNDZjMzIyMjg.
        CSeq: 1 REGISTER
        Expires: 3600
        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
        User-Agent: X-Lite release 1011s stamp 41150
        Content-Length: 0
</pre>
<p></font></p>
<p>Main information we could see in this exchange are:
<ul>
<li>the SIP method: REGISTER</li>
<li>information regarding the UA, these are in the Contact field: URI <tt>11@192.168.16.181:32262</tt> in which we found the identifier (phone number in this case, <tt>11</tt>), the IP address (<tt>192.168.16.181</tt>) and port number on which the UA is listening for SIP messages (<tt>32262</tt>). You can see here the SIP port is not the standard one (5060), but since it is not mandatory to use the standard one we have to put it in the URI.</li>
</ul>
<p>The answer from the <i>registrar</i> should be 200 OK in order for the UA to be known in the directory. Here is the answer frame from our Asterisk server: <font size="-1">
<pre>Session Initiation Protocol
    Status-Line: SIP/2.0 200 OK
        Status-Code: 200
        [Resent Packet: False]
    Message Header
        Via: SIP/2.0/UDP 192.168.16.181:32262;branch=z9hG4bK-d87543-624dc77d9c1b9618-1--d87543-;received=192.168.16.181;rport=32262
        From: "soft 2"&lt;sip:11@192.168.16.40&gt;;tag=394aa21c
        To: "soft 2"&lt;sip:11@192.168.16.40&gt;;tag=as22b3d595
        Call-ID: YjYzYTAyNzM0NGVkYmEzZWMyMzJmNzMzNDZjMzIyMjg.
        CSeq: 1 REGISTER
        User-Agent: Asterisk PBX
        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
        Supported: replaces
        Expires: 3600
        Contact: &lt;sip:11@192.168.16.181:32262;rinstance=9dd2c78e6ac0a5a5&gt;;expires=3600
        Date: Sun, 07 Oct 2007 13:00:11 GMT
        Content-Length: 0
</pre>
<p></font></p>
<p>In the answer we can find:
<ul>
<li>message type: OK</li>
<li>same contact content as in the register message</li>
<li>same Call-Id field which identifies the exchange, since this one can use UDP as the transport medium.</li>
</ul>
<h2>Validation</h2>
<p>Once the registration is performed, the <i>registrar</i> should be able to restitute information contained in the directory. Each SIP PBX should therefor have a command or a way to gather which SIP UA are registered and the IP information related. With Asterisk, the <tt>sip show peers</tt> command on the CLI is able to list all configured peers and there respective status:<br />
<font size="-1">
<pre>asterisk41*CLI> sip show peers
Name/username              Host            Dyn Nat ACL Port     Status
11/11                      192.168.16.181   D          32262    OK (3 ms)</pre>
<p></font></p>
<p>On this output we can see the UA identifier (11), the IP address and the port number. Asterisk is not providing information about the protocol used to talk to the client since supporting only UDP for now<sup><a href="#footnote-1-146" id="footnote-link-1-146" class="footnote-link footnote-identifier-link" title="SIP devices should support both UDP and TCP, but&#8230;">1</a></sup>. The last information is the status and the monitoring delay between the Asterisk server and the UA, see also “<a href="http://www.panoramisk.com/79/network-transit-and-peer-qualification/en/">Network transit and peer qualification</a>”.</p>
<h2>Troubleshooting</h2>
<p>In the case one UA is not able to get registered, it could be useful to see the cause and if registration messages are well exchanged. In the Asterisk world, most of the time, the UA should be listed in the <tt>sip.conf</tt> configuration file before a registration message could be received. If your configuration is good, but the UA is still not in the directory, you can use the debug mode in the sip part. It is also possible to use a network analyzer if you have access to the network layer.</p>
<p>Here below is a debug trace taken on the Asterisk CLI with an UA trying to register:<font size="-1">
<pre>asterisk41*CLI&gt; sip set debug ip 192.168.16.181
&lt;--- SIP read from 192.168.16.181:38192 ---&gt;
<b>REGISTER sip:192.168.16.40 SIP/2.0</b>
Via: SIP/2.0/UDP 192.168.16.181:38192;branch=z9hG4bK-d87543-2365443e5f277647-1&#8211;d87543-;rport
Max-Forwards: 70
<b>Contact: &lt;sip:not_good@192.168.16.181:38192;rinstance=b4480613d7542907&gt;</b>
To: &#8220;soft 2&#8243;&lt;sip:not_good@192.168.16.40&gt;
From: &#8220;soft 2&#8243;&lt;sip:not_good@192.168.16.40&gt;;tag=e474c93c
Call-ID: OTkwODU3ZjUwNjAyYmU4ZTk2OWM2MTdmYjE3ZTk3MGU.
CSeq: 1 REGISTER
Expires: 3600
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: X-Lite release 1011s stamp 41150
Content-Length: 0

&lt;&#8212; Transmitting (NAT) to 192.168.16.181:38192 &#8212;&gt;
<b>SIP/2.0 404 Not found</b>
Via: SIP/2.0/UDP 192.168.16.181:38192;branch=z9hG4bK-d87543-2365443e5f277647-1&#8211;d87543-;received=192.168.16.181;rport=38192
From: &#8220;soft 2&#8243;&lt;sip:not_good@192.168.16.40&gt;;tag=e474c93c
To: &#8220;soft 2&#8243;&lt;sip:not_good@192.168.16.40&gt;;tag=as4f1da0ea
Call-ID: OTkwODU3ZjUwNjAyYmU4ZTk2OWM2MTdmYjE3ZTk3MGU.
<b>CSeq: 1 REGISTER</b>
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Content-Length: 0
</pre>
<p></font></p>
<p>Asterisk is receiving a REGISTER message but the proposed contact (<tt>not_good</tt>) is not specified in the <tt>sip.conf</tt>, therefor Asterisk answers back with a <tt>404 not found</tt> message<sup><a href="#footnote-2-146" id="footnote-link-2-146" class="footnote-link footnote-identifier-link" title="you can see here that the return code is similar to the HTTP page not found code web servers are returning when a browser tries to access an unknown page">2</a></sup>.</p>
<h2>Conclusion</h2>
<p>The SIP REGISTER method is used to register mobile clients (UA) in the internal routing directory. The stored informations allow resolution of IP information versus UA identifier. This registration method is mainly used when clients are using temporary IP addresses, like in a DHCP domain. Mainly IP phone are using the registration, but also any IPBX when talking to an IP centrex. The IP telcos are using the registration in order not to maintain voice routing tables and not managing IP addresses of their customers who can use any kind of Internet provider.</p>
<p>Registration is useless whenever the other peer is well known with regards to IP informations, in that case we are talking about call routing and tables are static. This is mainly used for PBX trunk interconnections, gateways and SBC<sup><a href="#footnote-3-146" id="footnote-link-3-146" class="footnote-link footnote-identifier-link" title="Session Border Controller">3</a></sup>.</p>
<p>Asterisk is implementing the SIP <i>registrar</i> server feature and clients can registered themselves to Asterisk in order to be reachable. But Asterisk can also register itself to another <i>registrar</i>, in that case it is acting as an standard UA. The <tt>sip.conf</tt> configuration file is the place where can be configured both aspects: each client in a dedicated section and each registration using the <tt>register =&gt;</tt> syntax.<hr/></p>
<ol start="1" class="footnotes"><li id="footnote-1-146" class="footnote">SIP devices should support both UDP and TCP, but&#8230; [<a href="#footnote-link-1-146" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-2-146" class="footnote">you can see here that the return code is similar to the HTTP page not found code web servers are returning when a browser tries to access an unknown page [<a href="#footnote-link-2-146" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-3-146" class="footnote">Session Border Controller [<a href="#footnote-link-3-146" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></description>
		<wfw:commentRss>http://www.panoramisk.com/146/client-registration-using-sip-register/en/feed/en/</wfw:commentRss>
	 
	</item>
		<item>
		<title>TFOT second edition</title>
		<link>http://www.panoramisk.com/142/tfot-second-edition/en/</link>
		<comments>http://www.panoramisk.com/142/tfot-second-edition/en/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 08:33:31 +0000</pubDate>
		<dc:creator>Alexandre Chauvin-Hameau</dc:creator>
		
		<category><![CDATA[Asterisk]]></category>

		<category><![CDATA[News]]></category>
<category>asterisk</category><category>news</category>
		<guid isPermaLink="false">http://www.panoramisk.com/142/tfot-second-edition</guid>
		<description><![CDATA[<p>For those of you not yet really familiar with Asterisk or like me who wants to have the appropriate book to refer each time it is necessary, the second edition of “<a href="http://www.oreilly.com/catalog/9780596510480/index.html">The Future of Telephony</a>” is now available. If you could only buy one book on the Asterisk topic, this one is probably the best choice, a must read prior any installation or IP telephony project.<!--more--><br />
For more information, the <a href="http://www.oreilly.com/">O’Reilly</a> site is the good place to go next.</p>
]]></description>
		<wfw:commentRss>http://www.panoramisk.com/142/tfot-second-edition/en/feed/en/</wfw:commentRss>
	 
	</item>
		<item>
		<title>Meeting room busy lamp</title>
		<link>http://www.panoramisk.com/139/meeting-room-busy-lamp/en/</link>
		<comments>http://www.panoramisk.com/139/meeting-room-busy-lamp/en/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 16:25:28 +0000</pubDate>
		<dc:creator>Alexandre Chauvin-Hameau</dc:creator>
		
		<category><![CDATA[version 1.4]]></category>

		<category><![CDATA[SIP]]></category>

		<category><![CDATA[ToIP]]></category>

		<category><![CDATA[CTI]]></category>
<category>1.4</category><category>1.6</category><category>asterisk</category><category>BLF</category><category>configuration</category><category>database</category><category>extensions.conf</category><category>SIP</category>
		<guid isPermaLink="false">http://www.panoramisk.com/139/meeting-room-busy-lamp/en/</guid>
		<description><![CDATA[<p><i>Is the Chicago meeting room available?</i> How many time a year do you ear this kind of question in your organization? On top, it is frequent you need a free meeting room for something not planned in advance and your are checking physically all the rooms in the building! In this article we present a solution, based on Asterisk, able to manage the free status of a meeting room with your PBX and line supervision feature.<!--more--></p>
<h1>Principle</h1>
<p>The main components of our solution are: an IVR for managing presence (here room occupancy), the internal Asterisk database to keep track of the status. The room supervision (kind of busy lamp over the door) is available either through a phone call or through a SIP subscription, this last feature allows to have a lamp on your phone showing the room free status in real time, cool isn’t it?</p>
<h1>How it works</h1>
<p>Here are the main points on how it works:
<ul>
<li>we create a specific extension for each room, this extension will be used to manage the room and get the status through BLF<sup><a href="#footnote-1-139" id="footnote-link-1-139" class="footnote-link footnote-identifier-link" title="Busy Lamp Field">1</a></sup>.</li>
<li>when calling the room extension, if this one is free, a security code is asked to the user. This code will protect any further operation performed during the reservation period. The next information asked for is for how long the room is reserved, this value is entered in minutes. Both information will be stored in the Asterisk internal database.</li>
<li>once the room is reserved, we change the status of the supervision field (BLF) and create an automatic call (placed in the Asterisk outgoing spool) which will free the room when reservation period will be expired.</li>
<li>if ongoing reservation needs to be changed (either to free the room sooner or later), one can redial the room extension, re-enter the security code and specify a new number of minutes for the reservation period. If 0 is entered, the room is freed immediately.</li>
<li>if one calls the extension when the room is already busy, he would not have the security code, by pressing # he will get an announce of the time when the room will be free.</li>
<li>when reservation period expires, the automatic call is placed and the room status is changed to free as well as the BLF indicator, everybody supervising this status could thus be informed about the new status.</li>
</ul>
<h1>Room busy lamp</h1>
<p>We already have talked about the BLF in a previous article, for more information please see &#8220;<a href="http://www.panoramisk.com/112/asterisk-and-line-supervision/en/">Asterisk and line supervision</a>&#8220;. Here we are not supervising a phone line but someting virtual. For this purpose we are using the DEVSTATE function developed by Russell Bryant.</p>
<p>This function is available in the 1.6 Asterisk release, it is necessary to install it manually for the actual 1.4 release. This installation is easy but requires a recompile, the  <tt>make menuselect</tt> will prepare the compile after the function source has been installed in the function directory. Source file is available directly at <a href="http://svncommunity.digium.com/svn/russell/func_devstate-1.4/">Digium</a>.</p>
<h1>Code</h1>
<p>The proposed application is mainly based on the dial plan of Asterisk. We have created a specific extension file with this application, it is thus easier to manipulate an include in your dial plan if you want to test it.</p>
<h2>Dial plan</h2>
<p>In order to insert the application in your dial plan, you can simply include the following lines in your <tt>extensions.conf</tt> file:<br />
<font size="-1">
<pre>; ------ MEETING ROOM START
#include conf/meeting-room-status.conf
include => meeting-room
exten => 638,1,Set(_ROOM=room_chicago)
exten => 638,2,Goto(meeting-room,s,1)
; ------ MEETING ROOM END</pre>
<p></font></p>
<p>Here we set the <tt>ROOM</tt> variable to the name of the meeting room associated to the extension 638. The room name will be used as key for the internal database and as the name of the virtual lamp to be monitored (hint) by SIP phones.</p>
<h2>Line supervision</h2>
<p>Since we are not supervising a standard line, we need something special. Here we are using a custom hint, provided with the DEVSTATE function, the syntax to add to your <tt>extensions.conf</tt> file is the following:<br />
<font size="-1">
<pre>exten => 638,hint,Custom:room_chicago</pre>
<p></font></p>
<p>The name of the room should math the <tt>ROOM</tt> variable seen previously. The extension is the one used to access the application.</p>
<h2>How to install</h2>
<p>First you need to download the package we propose, see at the end of this article for the link. Untar the package on your Asterisk server and proceed with the following actions:</p>
<ul>
<li>copy the directory <tt>sounds/meeting-room</tt> into <tt>/var/lib/asterisk/sounds</tt></li>
<li>copy the directory <tt>conf</tt> in <tt>/etc/asterisk</tt>, it contains the specific dial plan in the file called <tt>meeting-room-status.conf</tt> </li>
<li>copy the shell script <tt>agi/meeting-clean-at.sh</tt> in the directory <tt>/var/lib/asterisk/agi-bin</tt>. This script is creating the <tt>.call</tt> file allowing the automatic room cleaning at the end of the reservation period.</li>
</ul>
<h2>Room IVR manager</h2>
<p>If you are interested in how the dial plan is working for our application, here are some information. The format used is from <a href="http://www.panoramisk.com/laboratoire/astconf/fr/">Asterisk::Configure</a> but does not require any particular knowledge but Asterisk one. The code is not complete, you can look at the one provided with the package for the full version, in the <tt>src</tt> directory.</p>
<h3>Reservation</h3>
<p><font size="-1">
<pre>file meeting-room-status.conf {
     context meeting-room {
          exten s {
             Answer()
             GotoIf($[${DEVSTATE(Custom:${ROOM})} = BUSY]?%%RESET%%)
             Playback(meeting-room/this_room_free)
             Playback(meeting-room/enter_code_to_lock)
             Read(lock,,8,1)
             Set(DB(meeting-room-reservation/${ROOM}/lock)=${lock})
%%RESERVE%%  Playback(meeting-room/minutes_room)
             Read(min,,3,,1)
             GotoIf($[${min} == 0]?%%CLEAN%%)
             Set(DB(meeting-room-reservation/${ROOM}/endtime)=
  ${MATH(${EPOCH}+${MATH(${min}*60,i)},i)})
             System(/var/lib/asterisk/agi-bin/meeting-clean-at.sh ${ROOM}
  ${STRFTIME(${DB(meeting-room-reservation/${ROOM}/endtime)},,%m%d%H%M)}
  ${lock})
             Playback(meeting-room/you_reserve_room_until)
             DateTime(${DB(meeting-room-reservation/${ROOM}/endtime)},,R)
             Set(DEVSTATE(Custom:${ROOM})=BUSY)
             Hangup()
</pre>
<p></font></p>
<p>This first part is about managing the room reservation. First we verify this one is currently free, then ask for a security code stored in <tt>lock</tt>. We then ask for the reservation period, this value is expressed in minute and stored in <tt>min</tt>. These values are stored in the Asterisk internal database, the end time is calculated from the actual time incremented with the minutes entered.<br/>The script <tt> meeting-clean-at.sh</tt> is called, it will prepare a <tt>.call</tt> file that will generate a call to clean the room reservation at the end of this one. In order for this call to be placed at the appropriate time, we change the unix time of the file prior placing it in the <tt>outgoing</tt> directory.<br />We indicate to the calling user what is the ending reservation time and set the busy lamp indicator for this room. Any supervising phone will be informed the room is now busy.</p>
<h3>Modifying or checking reservation</h3>
<p><font size="-1">
<pre>%%RESET%%    Playback(meeting-room/room_busy)
             Playback(meeting-room/consult_code)
             Playback(beep)
             Read(lock,,8,1)
             GotoIf($["${lock}" != "${DB(meeting-room-reservation/${ROOM}/lock)}"]
  ?%%BADCODE%%:%%RESERVE%%)
             Hangup()
%%BADCODE%%  Playback(meeting-room/room_reserved_until)
             DateTime(${DB(meeting-room-reservation/${ROOM}/endtime)},,R)
             Hangup()
</pre>
<p></font></p>
<p>If the room is currently occupied, when calling the room extension, the security code is asked for. If you have it, we consider you can change the reservation and use the same process as expressed previously. If you don’t have the security code, the IVR will announce the ending time of the reservation.</p>
<h3>Automatic clearing</h3>
<p><font size="-1">
<pre>          exten clean-room {
             GotoIf($["${lock}" != "${DB(meeting-room-reservation/${ROOM}/lock)}"]
  ?%%RCLEAN%%)
             GotoIf($[${DEVSTATE(Custom:${ROOM})} != BUSY]?%%RCLEAN%%)
             GotoIf($[${MATH(${EPOCH}+60)}>
  ${DB(meeting-room-reservation/${ROOM}/endtime)}]
  ?%%CLEAN%%)
             Hangup()
%%CLEAN%%    Set(DEVSTATE(Custom:${ROOM})=NOT_INUSE)
             Set(foo=${DB_DELETE(meeting-room-reservation/${ROOM}/endtime)})
             Set(foo=${DB_DELETE(meeting-room-reservation/${ROOM}/lock)})
             System(rm -f /var/spool/asterisk/outgoing/call-meetingroom-${ROOM}-${lock}-*)
%%RCLEAN%%   Hangup()
          } </pre>
<p></font></p>
<p>From the <tt>.call</tt> file place in the <tt>outgoing</tt> directory, a call is placed at the end of the reservation period to the <tt>clean-room</tt> contexte. This one will check the security code (passed as a parameter in the call) and the current time that should be after the reservation end time. If these tests are successful, the busy lamp for the room is cleared as well as the database. The room is now free.</p>
<h1>Download</h1>
<p>Our solution is available <a href="http://www.panoramisk.com/wp-content/uploads/meeting-room-status.tgz">here</a>. If this application was helpful, please let us know through an email or a comment.</p>
<h1>Conclusion</h1>
<p>Once more a small Asterisk application, using only dial plan and standard Unix commands, can help a lot in the real world. For sure you can modify the concept for any other usage that you may have in your organization.</p>
<ol start="1" class="footnotes"><li id="footnote-1-139" class="footnote">Busy Lamp Field [<a href="#footnote-link-1-139" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></description>
		<wfw:commentRss>http://www.panoramisk.com/139/meeting-room-busy-lamp/en/feed/en/</wfw:commentRss>
	 
	</item>
		<item>
		<title>Intercom call to multiple phones</title>
		<link>http://www.panoramisk.com/136/intercom-call-to-multiple-phones/en/</link>
		<comments>http://www.panoramisk.com/136/intercom-call-to-multiple-phones/en/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 09:51:04 +0000</pubDate>
		<dc:creator>Alexandre Chauvin-Hameau</dc:creator>
		
		<category><![CDATA[version 1.4]]></category>

		<category><![CDATA[SIP]]></category>

		<category><![CDATA[CTI]]></category>
<category>1.4</category><category>Aastra</category><category>asterisk</category><category>conference</category><category>extensions.conf</category><category>IP phone</category><category>Polycom</category><category>SIP</category>
		<guid isPermaLink="false">http://www.panoramisk.com/136/intercom-call-to-multiple-phones/fr/</guid>
		<description><![CDATA[<p>It could sometimes be useful to be able to send a vocal message to a group of phone with the intercom feature. Most IP phones on the market support this feature which allows a call to be automatically answered and its content pushed to the speaker.<br/>What we propose in this article is a solution to distribute a live message to a specific phone group. Such solutions are available on the net but since we haven’t found a complete functional one, we have built our own one on top of an Asterisk 1.4, the conference application and an automatic dialler written as an AGI.<!--more--></p>
<div style="margin: 3px 0px 3px 10px; float: right;">
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<h1>Intercom</h1>
<p>First, an intercom call is used to push message to a specific location represented by a phone, this call doesn’t require a human intervention since the phone switch it automatically to its speaker mode. In order to implement this feature in an IP phone, the solution is based on a specific SIP header added in the INVITE message. Whenever the IP phone is configured to evaluate this field<sup><a href="#footnote-1-136" id="footnote-link-1-136" class="footnote-link footnote-identifier-link" title="some are doing this by default, some don’t">1</a></sup> it accepts automatically the call. Generally the intercom call is presented to the user by a specific ring in order to capture his attention and the microphone is automatically turned off (see also <a href="http://www.panoramisk.com/123/123/en/">Volontary bug in some SIP IP phones?</a>).</p>
<p>But the intercom feature is not normalized, thus all phones are using something slightly different, it will be important to change the sent message with regards to the IP phone that will get it. The information should be available in manufacturer documentation but is most of the time not easy to find.</p>
<h1>Conference bridge</h1>
<p>Asterisk is integrating a high value application with its conference bridge one, called <tt>MeetMe</tt>. This application, using the Zap modules, allows a call to have more than two extremities, it mixes voice and send the mixed flow to each phone.</p>
<p>The solution used in our implementation is to bridge the message call to a bridge with all IP phones that should play the message in intercom mode. In order to limit noise, the talker is unique and can only talk and all intercom phones are in listen mode.</p>
<h1>Proposed solution</h1>
<p>We are using a dedicated conference room in our solution (the 99) since we would like to have an authentication phase for the speaker. This could be changed towards dynamic rooms if authentication is done outside or simply suppressed. If more than one intercom group would be required, multiple rooms will be provisioned.</p>
<p>First the call from the talker is executing an AGI script that will insert all intercom phones in the room, then the talker is pushed to the conference room itself and asked for authentication. The AGI script should push any phone selected in the conference room and in intercom mode, no authentication is required and no action from user behind each phone. Since more than one phone can be selected, the AGI will create as much calls between the phone and the conference room as required. This will be done by creating a <tt>.call</tt> file and use the <tt>outgoing</tt> spool feature of Asterisk.</p>
<h1>Sources</h1>
<h2>Conference room</h2>
<p><font size="-1">
<pre>; for intercom
conf => 99,1234 </pre>
<p> </font></p>
<p>Here the room is static and protected by a code that should only be shared with people authorized to push a message, the configuration is stored in <tt>meetme.conf</tt>.</p>
<h2>Getting the call</h2>
<p>A specific extension is added in our dial plan for the intercom call, it simply is here to redirect the call to a specific context called <tt>meet-talker</tt>. In <tt>extensions.conf</tt> we have:<font size="-1">
<pre>exten => 635,1,Goto(meet-talker,s,1)</pre>
<p> </font></p>
<p><tt>meet-talker</tt> context has been created to be able to handle the call closure. Effectively, since using a conference room, when the talker close the call the room should be closed and any intercom phone disconnected automatically.<br />
<font size="-1">
<pre>[meet-talker]
exten => s,1,AGI(push_to_meetintercom,SIP/15,SIP/30)
exten => s,2,Answer()
exten => s,3,MeetMe(99,tq)
exten => h,1,MeetMeAdmin(99,K) </pre>
<p> </font></p>
<p>First we start the AGI script, passing it the list of phone to put in the intercom group, then the talked is directed to the conference room 99 in talk mode only. At the end of the call (<tt>h</tt> extension), all participants are suppressed from the room with the <tt>K</tt> option of the <tt>MeetMeAdmin</tt> command.</p>
<h2>The AGI call script</h2>
<p>Here written in Perl it doesn’t require anything else but the interpreter. The content of the script is detailed by section:<br />
<font size="-1">
<pre>#!/usr/bin/perl                                                                                                                       

my $outgoingDir  = '/var/spool/asterisk/outgoing';

my %sipHeadersIntercom = (
  "Aastra 5xi" =&gt; "Alert-Info: info=alert-autoanswer",
  "Polycom"    =&gt; "Alert-Info: Auto Answer",
                          );

my %phones = (
          "SIP/15" =&gt; {
              sip => $sipHeadersIntercom{"Polycom"},
              wait =&gt; 1,
          },
          "SIP/30" =&gt; {
              sip =&gt; $sipHeadersIntercom{"Aastra 5xi"},
              wait =&gt; 1,
          }
          );
 </pre>
<p> </font></p>
<p><br/>First we defined each specific SIP message header that should be sent to IP phone in order to start the intercom mode. Each vendor has its own implementation, thus message are different per phone type, here we have included an Aastra and a Polycom, you will have to continue this table if required.<br />
<br/>The second table is a hashed one with any IP phone we have in the installation and that could receive an intercom call. For each extension we have defined the phone type, linked to the first table, and a waiting parameter, expressed in second and which will be used by the dial plan in order to throttle calls<sup><a href="#footnote-2-136" id="footnote-link-2-136" class="footnote-link footnote-identifier-link" title="we have seen some phones blocking the intercom if message was sent too fast">2</a></sup>.</p>
<p><font size="-1">
<pre>foreach my $exten (@ARGV) {
    createCall($exten);
}

sub createCall {
    my ($exten) = @_;
    my $id = $exten;
    $id =~ s/\///g;
    my $file = "$outgoingDir/$$-$id";
    open(CALL, "&gt;&gt;$file" );

    print CALL &lt;&lt; "EOF";
Channel: Local/start@meet-and-page
MaxRetries: 1
Retry: 0
RetryTime: 1
Context: meet-and-page
Extension: call
Priority: 1
SetVar: TOCALL=$exten
SetVar: HEADER=$phones{$exten}-&gt;{sip}
SetVar: WAIT=$phones{$exten}-&gt;{wait}
EOF
;
    close(CALL);
}
</pre>
<p> </font></p>
<p>Next we start the process. Each phone extension passed as a parameter to the AGI script is used to create a <tt>.call</tt> file by the function <tt>createCall</tt>. If a lot of phones are used we could maybe change the approach towards a data base oriented one.</p>
<p><br/><tt>createCall</tt> function is creating the <tt>.call</tt> file which will connect the IP phone in intercom mode and the conference room. The way <tt>.call</tt> file is working is simple: first a call is created by Asterisk to the <tt>Channel</tt> one and when this one answers the call, connect it to the <tt>Context/Extension/Priority</tt> one. We should take care of having the first extremity answering the call automatically, this is why we direct the call to the conference bridge. The <tt>Local/start@meet-and-page</tt> is used to connect the conference room directly.<br />
<br/>The second extremity of the call should target the IP phone but the call requires the specific SIP header in order to toggle the phone in intercom mode. We decided to use a context in the dial plan to perform this action, thus passing back from the AGI the required information in specific variables: <tt>TOCALL</tt> is the IP phone extension and <tt>HEADER</tt> is the SIP header to add for the intercom mode.</p>
<p><br/>Each <tt>.call</tt> file is saved in the spool directory and will be interpreted by Asterisk automatically, nothing special is required for this part.</p>
<h2>Intercom call in the dial plan</h2>
<p>Now that the <tt>.call</tt> file is created, we need to build the specific dial plan parts. Here is the one handling the conference room call and the IP phone call:<br />
<font size="-1">
<pre>[meet-and-page]
exten => start,1,Answer()
exten => start,n,MeetMe(99,mql,1234)
exten => start,n,Hangup

exten => call,1,SIPAddHeader(${HEADER})
exten => call,2,Wait(${WAIT})
exten => call,3,Dial(${TOCALL},2)
exten => call,4,Hangup() </pre>
<p> </font></p>
<p>The <tt>start</tt> part is the first to be called and target the <tt>MeetMe</tt> application, here executed in listen mode and passing the access code automatically.<br />
<br/>The <tt>call</tt> part is targeting the IP phone. First we need to add the SIP header specific to the called phone, then dus a simple <tt>Dial()</tt> command to place the intercom call. This part is using the variables set by the AGI script.</p>
<h1>Conclusion</h1>
<p>Here is a simple approach of an intercom call pushed to a set of IP phones, you would probably have to adapt this to your own usage and need. But it demonstrates that Asterisk is a very good solution to specific user requirements with only out of the box application and small dial plan adaptation.</p>
<p><hr/></p>
<ol start="1" class="footnotes"><li id="footnote-1-136" class="footnote">some are doing this by default, some don’t [<a href="#footnote-link-1-136" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-2-136" class="footnote">we have seen some phones blocking the intercom if message was sent too fast [<a href="#footnote-link-2-136" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></description>
		<wfw:commentRss>http://www.panoramisk.com/136/intercom-call-to-multiple-phones/en/feed/en/</wfw:commentRss>
	 
	</item>
		<item>
		<title>Test of the 3CX Phone System free edition</title>
		<link>http://www.panoramisk.com/125/3cx-phone-system-free-edition-test/en/</link>
		<comments>http://www.panoramisk.com/125/3cx-phone-system-free-edition-test/en/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 14:15:18 +0000</pubDate>
		<dc:creator>Alexandre Chauvin-Hameau</dc:creator>
		
		<category><![CDATA[SIP]]></category>

		<category><![CDATA[ToIP]]></category>

		<category><![CDATA[iPBX]]></category>
<category>centrex</category><category>product</category><category>SIP</category><category>ToIP</category><category>trunk</category>
		<guid isPermaLink="false">http://www.panoramisk.com/125/3cx-phone-system-free-edition-test/en/</guid>
		<description><![CDATA[<p>A PBX system on a Microsoft Windows operating system? Yes it is possible and <a href="http://www.3cx.com/">3CX</a> with its Phone System is proposing such a solution. After some tests on the free edition, here is our analysis.<!--more--></p>
<div style="margin: 3px 0px 3px 10px; float: right;">
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script>
</div>
<p>First, we should start this article with the fact this product is really a good one. Most standard features available on a PBX are available and if the target is SOHO and small organisations, you should give it a try. The installation is really simple and no need to have deep knowledge in voice over IP to get its first voice network up and running.</p>
<p>For sure, this free edition is not proposing everything we can think about, but some additional products are available and the cost stays low. Some could prefer to this implementation a more opened one, like an Asterisk based one, but this product is doing the job for most of our needs and is fully integrated, no installation hassle.</p>
<p>If you don’t require an advanced computer integration or API development, it could be a nice way to jump in IP telephony at a reasonable cost. You just need to add some IP phones or softphone and a SIP provider over the Internet or a gateway to get connected to the PSTN, that is all.</p>
<p>You will find in the following table some more information about the product and some of the test we have conducted on it. We got some help on specific topics directly from the forum, but most features are easy to set up. Don’t hesitate anyway if you got question to drop us an email.</p>
<p><center><span class="table-compare"></p>
<table border="0" width="99%">
<tr class="table-compare-line1">
<td>
<p style="text-align: left;"><B>Product</B></p>
</td>
<td></td>
<td rowspan="6" bgcolor="white"></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: right;">iPBX product</p>
</td>
<td>
<p>3CX Phone System (free edition)</p>
</td>
</tr>
<tr class="table-compare-line1">
<td>
<p  style="text-align: right;">Version</p>
</td>
<td>
<p>3.1.2434.0</p>
</td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: right;">Web site</p>
</td>
<td>
<p><tt><a href="http://www.3cx.com/">http://www.3cx.com/</a></tt></p>
</td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: right;">OS used for test</p>
</td>
<td>
<p>Windows XP, SP2</p>
</td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: right;">HW used for test</p>
</td>
<td>
<p>Intel Pentium M, 1.7GHz, 512 MB RAM</p>
</td>
</tr>
<tr class="table-compare-line2">
<td>
<p style="text-align: left;"><B>Additional tools used for this test</B></p>
</td>
<td>
<p>Aastra 53i, Polycom IP310, Softphone X-lite, pjsip suite, Asterisk 1.4</p>
</td>
<td align="right"><b>Additional comments</b></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: left;"><B>Installation</B></p>
</td>
<td>
<p>Really straightforward installation through a single Windows installer program. The parameters asked for are the software directory location, administrator credentials for the web access, as well as the number of digits for the internal dial plan and the SMTP server to be used for voice mail notifications.
<p>All components are fully integrated, there is no need for any additional software. We can find installed afterwards an Apache server for web configuration through PHP and a Postgres SQL database.</p>
<p>Any Microsoft Windows version is supported, from desktop to servers. This last is probably the good target for production purpose, but a dedicated XP could be stable enough to support a small amount of communication.</p>
</td>
<td align="left"></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: right;">Used space on disk</p>
</td>
<td>
<p>Around 90 MB are used on the disk after installation and a quick configuration of few SIP phones. This amount seems normal and comparable to Asterisk kind of solution. No hassle on this topic since nowadays disks are very large and Windows operating system is already taking a fair large amount of space.<br />We could think about installing this software PBX on a virtual infrastructure<sup><a href="#footnote-1-125" id="footnote-link-1-125" class="footnote-link footnote-identifier-link" title="seen on the web site as a possibility">1</a></sup> if the host server is fast enough and communications between devices are not using the internal media server (RTP flow crossing the PBX during a conversation).</td>
<td></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: right;">Processes</p>
</td>
<td>
<p>Processes are identified as Windows services and are started by default at boot time. There are specific processes for the core, the database, the web server, and three specific components which are the digital receptionist, the voice mail manager and the media server.</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: right;">Memory</p>
</td>
<td>
<p>After installation and a small configuration with some SIP phones and trunks, the amount of used memory is still good: 35M for Apache, 26M for Postgres, 7M for core system, 14M for the receptionist, 7M for the media server and 6M for the voice mail server. These values could be different on your installation, but this gives a fair amount of the memory that should be affected to the host, especially on a virtual machine.</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line2">
<td >
<p style="text-align: left;"><B>Management</B></p>
</td>
<td>
<p>Management and configuration are performed through the web interface which allows a remote management. There is no support for HTTPS communication, one should be aware of this when dealing with security over the WAN and the LAN.</p>
<p>This management interface is simple and clear, main menu on the left side regroups the configuration of extensions (phones), lines (through SIP gateways and providers), routing rules for output dialling. This is enough for a simple system configuration.<br />
The next menu options allow advanced configuration with the digital receptionist (IVR), the call groups and queues (not available in the free edition).<br />Last we found the general configuration option and the reporting system.</p>
<p>On the web interface, all modules are identified on the top right corner and their running state is represented by a colour, green when present and red otherwise.</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: left;"><B>Phones</B></p>
</td>
<td></td>
<td></td>
</tr>
<tr  class="table-compare-line1">
<td>
<p style="text-align: right;">Type</p>
</td>
<td>
<p>SIP only, analog and digital interface are not supported, nor H.323 devices.</p>
</td>
<td></td>
</tr>
<tr  class="table-compare-line1">
<td>
<p style="text-align: right;">Configuration</p>
</td>
<td>
<p>Each extension is specified with standard SIP fields like the number, the name, the credential for authentication. From this menu we can also manage the voice mail service and PIN code for access. Each line should match the digit number size specified during the installation of the PBX. The choices are from 3 to 5 but doesn&#8217;t seems to be modifiable afterwards.</p>
<p>If IP phones doesn&#8217;t need to be authenticated, it is possible to clear the credentials fields. This is not recommended but possible, which is a good thing.</p>
</td>
<td></td>
</tr>
<tr  class="table-compare-line1">
<td>
<p style="text-align: right;">Forward</p>
</td>
<td>
<p>Forwarding of incoming calls can be configured towards voice mail, another extension, a ring group or an outside number.<br />These targets are configured based on the line status: no answer, busy state or for any calls. Another option could be used when phone is not registered from a SIP perspective, this could be useful for mobile users.</p>
</td>
<td></td>
</tr>
<tr  class="table-compare-line1">
<td>
<p style="text-align: right;">Automatic phone configuration</p>
</td>
<td>
<p>not available</p>
</td>
<td></td>
</tr>
<tr  class="table-compare-line1">
<td>
<p style="text-align: right;">Codecs</p>
</td>
<td>
<p>not configurable for each extension, the 3CX solution proposes PCMU, PCMA and G729 in the INVITE message.</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line2">
<td >
<p style="text-align: left;"><B>Trunks</B></p>
</td>
<td>
<p>SIP only.</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line2">
<td>
<p style="text-align: right;">SIP</p>
</td>
<td>
<p>SIP trunks are used for any connection towards the external world. This includes SIP providers and gateways to PSTN or any other IP voice protocol.</p>
</td>
<td ></td>
</tr>
<tr class="table-compare-line2">
<td>
<p style="text-align: right;">Configuration</p>
</td>
<td>
<p>Both SIP providers and PSTN gateways trunks are simplified through some templates including telcos (Vonage, Broadvoice, inPhonex, &#8230;) and manufacturers (Linksys, Patton, Grandstream, &#8230;). It is also possible to create a trunk from a generic template.
<p>First we need a provider or gateway configured, afterwards it will be possible to create lines and DiD on top of it. This split allows to separate specific parameters on both sides which seems a practical approach.</p>
<p>The VoIP provider settings requires both registrar and proxy servers, and supports also a STUN service, if the connection is towards another PBX on the same domain, the STUN should be suppressed or it will present the external IP address. The registration settings are available and should be setup accordingly to the SIP account at the telco, we can apply authorize check on each calls, both ways.<br />	We can also specify the codec list to be used and how to authenticate an incoming call. This part is not easy since a call presented will not be accepted by default, hopefully the log is explicit and provide the administrator with where to look at.</p>
<p>Once the gateway or the SIP provider is configured, one or multiple lines could be added on top. A line is composed of the authentication information and the routing part for incoming calls. Each line needs to be linked to a single extension or service on the iPBX. If you need to use direct lines, each one should be created afterwards through the DiD configuration. This part is not the best one of the product, since easy to manage for few internal extensions but really cumbersome for more than 10 of these. Each DiD can direct call towards an extension, a voice mail, and IVR menu and can also change its behavior based on office hours.</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: left;"><B>Voicemail</B></p>
</td>
<td>
<p>Available and per extension. The access is by default associated to a specific extension available on the internal dialplan. There is no direct access to the phone associated voice mail, thus the extension is asked when dialing the voice mail portal. The authentication PIN number is configured at the line level and asked to get access to the box. Vocal messages could be personalized for each line.</p>
</td>
<td ></td>
</tr>
<tr class="table-compare-line1">
<td>
<p  style="text-align: right;">email notification</p>
</td>
<td>
<p>OK</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: right;">email message forward</p>
</td>
<td>
<p>OK</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line1">
<td>
<p  style="text-align: right;">navigation</p>
</td>
<td>
<p>Available through an integrated IVR, voice a bit quick and only available in English. It is possible to change the PIN number from this menu as well as the greeting message. There is only one greeting message, nothing related to busy or not available.</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line1">
<td>
<p  style="text-align: right;">MWI</p>
</td>
<td>
<p>not available on the free version.</p>
</td>
<td>Included in the Small Business Edition and above.</td>
</tr>
<tr class="table-compare-line1">
<td>
<p  style="text-align: right;">Quotas</p>
</td>
<td>
<p>not available</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line2">
<td>
<p style="text-align: left;"><B>Line pickup</B></p>
</td>
<td>
<p>not documented, needs modification in the <tt>.ini</tt> file. Information found on the forum, why not in the interface?</p>
</td>
<td ></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: left;"><B>Line supervision</B></p>
</td>
<td>
<p>not available</p>
</td>
<td align="left">could be done with the Windows assistant software, but not the free version.</td>
</tr>
<tr class="table-compare-line2">
<td >
<p style="text-align: left;"><B>Parking</B></p>
</td>
<td>
<p>not available</p>
</td>
<td ></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: left;"><B>Call Transfer</B></p>
</td>
<td>
<p>Support for SIP transfer from phone (blind and attended), but no specific extension for phones without this feature.</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: left;"><b>Intercom</b></p>
</td>
<td>
<p>not available</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line2">
<td>
<p style="text-align: left;"><B>Caller ID presentation</B></p>
</td>
<td></td>
<td></td>
</tr>
<tr class="table-compare-line2">
<td>
<p style="text-align: right;">phone configured</p>
</td>
<td>
<p>yes</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line2">
<td>
<p style="text-align: right;">3CX PBX configured</p>
</td>
<td>
<p>yes</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: left;"><B>Outbound routing</B></p>
</td>
<td>
<p>By default, one outbound rule is created for each line (towards gateway or telco), the prefix is suppressed and only the suffix is presented on the SIP call. This can be changed based on the provider or the gateway, but also based on the prefix used and the extension issuing the call.<br />	A backup rule is also available, which allows to have a second provider or backup a SIP line to a gateway, but the renumbering rule should be the same which can be tricky in some situation.</p>
</td>
<td></td>
</tr>
<tr  class="table-compare-line2">
<td>
<p style="text-align: left;"><B>Inbound routing</B></p>
</td>
<td>
<p>Available only through line and DiD, but no explicit inbound call routing rules are available.</p>
</td>
<td></td>
</tr>
<tr  class="table-compare-line1">
<td>
<p style="text-align: left;"><B>Phone group</B></p>
</td>
<td>
<p>Available with all and hunt strategies. Missing a least used strategy.</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line2">
<td>
<p style="text-align: left;"><b>Queueing</b></p>
</td>
<td>
<p>Not available without upgrade.</p>
</td>
<td></td>
</tr>
<tr class="table-compare-line1">
<td>
<p style="text-align: left;"><B>IVR</B></p>
</td>
<td>
<p>Called Digital Receptionist.
<p>Each IVR menu is configured through a simple interface stating an action for each numerical key that can be hit during a voice message played. Each page requires a prompt which is played waiting for a DTMF event from the caller.<br />The prompt should be recorded on the management station and pushed to the configuration interface, this is not as efficient as a direct recording extension on the PBX but allows more complex messages. The mp3 format is supported, which is really simple.</p>
<p>All actions are presented in a drop down menu, no mistake are thus possible, and any extension or group configured in the PBX are available. This is a simple way of configuring the IVR part but will not be able to handle hundreds of extension easily.</p>
</td>
<td></td>
</tr>
<tr  class="table-compare-line2">
<td>
<p style="text-align: left;"><B>PBX supervision</B></p>
</td>
<td>
<p>The line status allows a quick view off the phones, gateways and trunk lines configured and their respective status (registered, ringing, on line). When on call, the extension numbers are displayed. No action is available from this view, but it is clear and usable with a limited amount of lines configured.</p>
</td>
<td></td>
</tr>
<tr  class="table-compare-line1">
<td>
<p style="text-align: left;"><b>Call Assistant</b></p>
</td>
<td>
<p>Available on Microsoft Windows only, the free edition is able to display each phone status and the engaged call. For more actions like transfer an upgrade is required.</p>
</td>
<td></td>
</tr>
<tr  class="table-compare-line2">
<td>
<p style="text-align: left;"><b>Fax support</b></p>
</td>
<td>
<p>Nothing related to fax support.</p>
</td>
<td></td>
</tr>
<tr  class="table-compare-line1">
<td>
<p style="text-align: left;"><b>CTI</b></p>
</td>
<td>
<p>No CTI API available, but Microsoft Exchange connectivity on the Entreprise Edition.</p>
</td>
<td></td>
</tr>
<p> </TABLE><br />
</span></center></p>
<ol start="1" class="footnotes"><li id="footnote-1-125" class="footnote">seen on the web site as a possibility [<a href="#footnote-link-1-125" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></description>
		<wfw:commentRss>http://www.panoramisk.com/125/3cx-phone-system-free-edition-test/en/feed/en/</wfw:commentRss>
	 
	</item>
	</channel>
</rss>
