Information for Upgrading From Asterisk 1.0 =========================================== Compiling: * The Asterisk 1.2 source code now uses C language features supported only by 'modern' C compilers. Generally, this means GCC version 3.0 or higher, although some GCC 2.96 releases will also work. Some non-GCC compilers that support C99 and the common GCC extensions (including anonymous structures and unions) will also work. All releases of GCC 2.95 do _not_ have the requisite feature support; systems using that compiler will need to be upgraded to a more recent compiler release. Agents: * The default for ackcall has been changed to "no" instead of "yes" because of a bug which caused the "yes" behavior to generally act like "no". You may need to adjust the value if your agents behave differently than you expect with respect to acknowledgement. Dialing: * The Caller*ID of the outbound leg is now the extension that was called, rather than the Caller*ID of the inbound leg of the call. The "o" flag for Dial can be used to restore the original behavior if desired. Note that if you are looking for the originating callerid from the manager event, there is a new manager event "Dial" which provides the source and destination channels and callerid. IAX: * The naming convention for IAX channels has changed in a minor way such that the call number follows a "-" rather than a "/" character. SIP: * The global option "port" in 1.0.X that is used to set which port to bind to has been changed to "bindport" to be more consistent with the other channel drivers and to avoid confusion with the "port" option for users/peers. Applications: * With the addition of dialplan functions (which operate similarly to variables), the SetVar application has been renamed to Set. * The CallerPres application has been removed. Use SetCallerPres instead. It accepts both numeric and symbolic names. * The applications GetGroupCount, GetGroupMatchCount, SetGroup, and CheckGroup have been deprecated in favor of functions. Here is a table of their replacements: GetGroupCount([groupname][@category] GROUP_COUNT([groupname][@category]) Set(GROUPCOUNT=${GROUP_COUNT()}) GroupMatchCount(groupmatch[@category]) GROUP_MATCH_COUNT(groupmatch[@category]) Set(GROUPCOUNT=${GROUP_MATCH_COUNT(SIP/.*)}) SetGroup(groupname[@category]) GROUP([category])=groupname Set(GROUP()=test) CheckGroup(max[@category]) N/A GotoIf($[ ${GROUP_COUNT()} > 5 ]?103) Note that CheckGroup does not have a direct replacement. There is also a new function called GROUP_LIST() which will return a space separated list of all of the groups set on a channel. The GROUP() function can also return the name of the group set on a channel when used in a read environment. * The applications DBGet and DBPut have been deprecated in favor of functions. Here is a table of their replacements: DBGet(foo=family/key) Set(foo=${DB(family/key)}) DBPut(family/key=${foo}) Set(DB(family/key)=${foo}) * The application SetLanguage has been deprecated in favor of the function LANGUAGE(). SetLanguage(fr) Set(LANGUAGE()=fr) The LANGUAGE function can also return the currently set language: Set(MYLANG=${LANGUAGE()}) * The applications AbsoluteTimeout, DigitTimeout, and ResponseTimeout have been deprecated in favor of the function TIMEOUT(timeouttype): AbsoluteTimeout(300) Set(TIMEOUT(absolute)=300) DigitTimeout(15) Set(TIMEOUT(digit)=15) ResponseTimeout(15) Set(TIMEOUT(response)=15) The TIMEOUT() function can also return the currently set timeouts: Set(DTIMEOUT=${TIMEOUT(digit)}) * The applications SetCIDName, SetCIDNum, and SetRDNIS have been deprecated in favor of the CALLERID(datatype) function: SetCIDName(Joe Cool) Set(CALLERID(name)=Joe Cool) SetCIDNum(2025551212) Set(CALLERID(number)=2025551212) SetRDNIS(2024561414) Set(CALLERID(RDNIS)=2024561414) * The application Record now uses the period to separate the filename from the format, rather than the colon. Queues: * A queue is now considered empty not only if there are no members but if none of the members are available (e.g. agents not logged on). To restore the original behavior, use "leavewhenempty=strict" or "joinwhenempty=strict" instead of "=yes" for those options. Extensions: * By default, there is a new option called "autofallthrough" in extensions.conf that is set to yes. Asterisk 1.0 (and earlier) behavior was to wait for an extension to be dialed after there were no more extensions to execute. "autofallthrough" changes this behavior so that the call will immediately be terminated with BUSY, CONGESTION, or HANGUP based on Asterisk's best guess. If you are writing an extension for IVR, you must use the WaitExten application if "autofallthrough" is set to yes.