Asterisk phone cisco 79x1 xml configuration files for SIP

Business SIP Providers
Provider Plan Details Monthly Rate *
Vonage Business SIP Trunking
  • One provider & nationwide coverage
  • Easily integrated into your existing infrastructure
  • More uptime, flexibility and disaster recovery options
$25.00
Details
8x8 8x8 IP Trunking
  • Unlimited calls to US and Canada
  • Softphone and mobile app available
  • 2012 Market Leader Award
$29.99
Details
DID for Sale SIP SIP Trunking
  • Unlimited Minutes, No Minimum
  • DIDs as low as $0.20
  • Free Trial, No Commitment
$8.99
Details
VoIP Hardware Solutions
Provider Solution Details
Yeastar Communications Solutions
  • Cost-effective IP-PBX Solution for SMB
  • FXS, FXO, GSM, BRI and PRI VoIP Gateways
  • Rich features and reliable performance
Details

Cisco's latest 79x1 lineup (including 7906G)


Introduction


Cisco recently released a new series of IP phones, the 7906G, 7911G, 7941G, 7961G and 7971G series. The 7941 and up also come in a G-GE model which has gigabit copper connectivity through the phone, the others have just standard 10/100 for the phone and on the additional PC port. All these new phones sport new cool features, mostly along the lines of newer and better display units, initial support for SIP, but additionally - and this is a major change - config file management, which is now XML based rather than plain (name,value) text pairs. These phones supposedly will, in the future, support an enhanced range of features compared to the 79x0 series.

Some product documentation on them can be found here

Note that the 7941G and 7961G have been superseded by the 7942 and 7962 model phones. The End-Of-Sale and End-Of-Life announcement for the hardware of the 7941 and 7961 series phones can be found here.

Unfortunately the format of the config files has never been well documented on CCO and Google searching shows up a limited amount of content on "cisco SIP and cnf.xml", so this page serves as a reference guide to getting these phones working with SIP compliant phone services such as Asterisk. I recently opened a TAC case to find out more information about the format of the config files but Cisco were unwilling to assist - as as far as they are concerned if the phones are run in a CallManager environment (which is what they were intended for) there is no need to manually edit the config files therefore they were not willing to give help running them in a non CM environment. It's a real shame really because these phones really are very nice handsets, and even if cisco did not want to support third party SIP servers, they could at least make information available so that others could do so.

Here's a sample config file, documented tags are listed below. Note there is a minor error in this file as noted below. If you are aware of how to fix it please do so.

Please DO read this file in detail. You must change instances of things like YOURNTPSERVER and replace them either with an NTP server IP address, or remove the statement altogether. Leaving them in will confuse your phone, and at the very least cause it to reject parts of the config, if it loads it at all.

Config File Editing


Note that the config file contents appear to be case sensitive, and most of the parameters start with a small letter after the opening bracket.

<?xml version="1.0" encoding="iso-8859-1"?>

This line is strictly not needed, but is useful to have if you're trying to use characters not in the US-ASCII character range. Not sure what encodings Cisco phones supports, maybe UTF-8 is supported? (Note: Be sure that your text editor is actually using the same encoding as the one you specify).

<device xsi:type="axl:XIPPhone" ctiid="1566023366">

Note that there is a small syntax error of sorts in the statement above, the phone spits out a message:
NOT 22:26:07.770897 JVM: -XML| unknown element or attribute name ("xsi:noNamespaceSchemaLocation") (line=2) however it seems harmless.

<deviceProtocol>SIP</deviceProtocol>

Define these if you want to be able to ssh to the phone. After ssh'ing you can log in with debug/debug, or log/log to get some basic idea of what is going on, force the phone to re-register etc, or default/user to drop to a basic non-root shell.

<sshUserId>username</sshUserId>
<sshPassword>password</sshPassword>

These next settings are for time related configuration, setting the timezone etc. If you do not specify an NTP server, the phone picks the date and time up from the SIP registration headers from the SIP server. On a LAN this should result in your phone getting sub millisecond accuracy to a local NTP server.

You can find appropriate settings for the timeZone parameter at http://www.cisco.com/univercd/cc/td/doc/product/voice/its/cme34/cme_cr/cme_t1ht.htm#wp1071293 which is publicly accessible. If you copy and paste the relevant entry from the Description field into the <timeZone></timeZone> field in your config, then your phone should then display the correct local time on the phone.

<dateTemplate> can be D-M-Y M-D-Y or Y-M-D
You can also use either dashes, dots, or forward slashes as separators in your dateTemplate, these will be reflected in the date shown on the phone.
There is probably also a way to get the phone to display either 12 or 24 hour time but I'm unsure how just yet (possibly a <timeFormat> tag?)

There is also 'a'/'A' attribute that sets if it's 12 or 24 hours. (e.g. D/M/Ya) (set for 12 hour/am pm, leave away for 24hour display)

Example: D-M-Y --> 24 hour display, D-M-Ya --> 12 hour display

Note: if your using chan_sccp, you have to also set it on the server.

For the times zones, you can use your local time zone, example: Pacific Standard/Daylight Time or New Zealand Standard/Daylight Time.

Edit >> The following time zones are also for the 7970 and can replace UTC Standard/Daylight Time for your local time zone but must be written precisely as follows including caps and punctuation (any deviation from the following will result in the time being automatically returned to UTC):

Dateline Standard Time
Samoa Standard Time
Hawaiian Standard Time
Alaskan Standard/Daylight Time
Pacific Standard/Daylight Time
Mountain Standard/Daylight Time
US Mountain Standard Time
Central Standard/Daylight Time
Mexico Standard/Daylight Time
Canada Central Standard Time
SA Pacific Standard Time
Eastern Standard/Daylight Time
US Eastern Standard Time
Atlantic Standard/Daylight Time
SA Western Standard Time
Newfoundland Standard/Daylight Time
South America Standard/Daylight Time
SA Eastern Standard Time
Mid-Atlantic Standard/Daylight Time
Azores Standard/Daylight Time
GMT Standard/Daylight Time
Greenwich Standard Time
W. Europe Standard/Daylight Time
GTB Standard/Daylight Time
Egypt Standard/Daylight Time
E. Europe Standard/Daylight Time
Romance Standard/Daylight Time
Central Europe Standard/Daylight Time
South Africa Standard Time
Jerusalem Standard/Daylight Time
Saudi Arabia Standard Time
Russian Standard/Daylight Time
Iran Standard/Daylight Time
Caucasus Standard/Daylight Time
Arabian Standard Time
Afghanistan Standard Time
West Asia Standard Time
Ekaterinburg Standard Time
India Standard Time
Central Asia Standard Time
SE Asia Standard Time
China Standard/Daylight Time
Taipei Standard Time
Tokyo Standard Time
Cen. Australia Standard/Daylight Time
AUS Central Standard Time
E. Australia Standard Time
AUS Eastern Standard/Daylight Time
West Pacific Standard Time
Tasmania Standard/Daylight Time
Central Pacific Standard Time
Fiji Standard Time
New Zealand Standard/Daylight Time

<devicePool>
<dateTimeSetting>
<dateTemplate>D-M-YA</dateTemplate>
<timeZone>UTC Standard/Daylight Time</timeZone>
<ntps>
<ntp>
<name>YOURNTPSERVERIPADDRESS</name>
<ntpMode>Unicast</ntpMode>
</ntp>
</ntps>
</dateTimeSetting>

This next part is required, otherwise the phone claims to be unprovisioned. It just requires your SIP server's DNS name. It also appears that the phone will not pick up some XML configuration changes if the <callManagerGroup> element is not present.

<callManagerGroup>
<members>
<member priority="0">
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName>PUTYOURSIPSERVERNAMEINHERE</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</devicePool>

Generally don't need to specify these, but maybe you will want to put in the register line. Note that the opening and closing tags of these elements must be on the same line, or else it won't be able to do integer conversion (I think this is a bug).

<sipProfile>
<sipProxies>
<backupProxy></backupProxy>
<backupProxyPort></backupProxyPort>
<emergencyProxy></emergencyProxy>
<emergencyProxyPort></emergencyProxyPort>
<outboundProxy></outboundProxy>
<outboundProxyPort></outboundProxyPort>
<registerWithProxy>true</registerWithProxy>
</sipProxies>

Some basic features and settings.

<sipCallFeatures>
<cnfJoinEnabled>true</cnfJoinEnabled>
<callForwardURI>x-cisco-serviceuri-cfwdall</callForwardURI>
<callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
<callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
<callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
<meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
<abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
<rfc2543Hold>false</rfc2543Hold>
<callHoldRingback>2</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>2</anonymousCallBlock>
<callerIdBlocking>2</callerIdBlocking>
<dndControl>0</dndControl>
<remoteCcEnable>true</remoteCcEnable>
</sipCallFeatures>

These are to do with SIP connection control.

<sipStack>
<sipInviteRetx>6</sipInviteRetx>
<sipRetx>10</sipRetx>
<timerInviteExpires>180</timerInviteExpires>
<timerRegisterExpires>3600</timerRegisterExpires>
<timerRegisterDelta>5</timerRegisterDelta>
<timerKeepAliveExpires>120</timerKeepAliveExpires>
<timerSubscribeExpires>120</timerSubscribeExpires>
<timerSubscribeDelta>5</timerSubscribeDelta>
<timerT1>500</timerT1>
<timerT2>4000</timerT2>
<maxRedirects>70</maxRedirects>
<remotePartyID>false</remotePartyID>
<userInfo>None</userInfo>
</sipStack>

More general SIP features...

<autoAnswerTimer>1</autoAnswerTimer>
<autoAnswerAltBehavior>false</autoAnswerAltBehavior>
<autoAnswerOverride>true</autoAnswerOverride>
<transferOnhookEnabled>false</transferOnhookEnabled>
<enableVad>false</enableVad>

Often you will need to specify the codec. The choices on these phones are g711 and g729a (and maybe others?)

g729a
<dtmfAvtPayload>101</dtmfAvtPayload>
<dtmfDbLevel>3</dtmfDbLevel>
<dtmfOutofBand>avt</dtmfOutofBand>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
<kpml>3</kpml>

If you are behind a cheap router then these options may be useful. These tell the phone to rewrite the SIP headers it sends out to the SIP proxy, to match your external address. This then allows your external IP address to be registered as the IP address that your phone is on. Set <natEnabled> to 1 and specify your external IP address. I'm not sure if this works with dynamic DNS, but it may do....

EDIT >> As of SIP Firmware 8.5(2), <natEnabled> only accepts the values of 'true' or 'false'. 1 or 0 will not work.

<natEnabled>false</natEnabled>
<natAddress>external IP address</natAddress>

The phoneLabel parameter defines what appears in the top right hand section of the black band in the display. It makes sense that this is where you put in your external/PSTN/DID number. However there seems to be a limit of 12 characters which is not enough if you want to put an international number there with spaces like I did (as when I lived in NZ but had an Australian DID on the phone)
Note: If you enter more than 12 characters in this field, you'll get an "Error Verifying Config Info" error, and the config file will not be loaded.

<phoneLabel></phoneLabel>

The stutterMsgWaiting setting is used to determine if your phone sends a 'stutter' signal to the earpiece when the line is first taken off hook if there is voicemail waiting. Set 1 to get a stutter, set to 0 if you don't want this feature.

<stutterMsgWaiting>1</stutterMsgWaiting>

CallStats refer to if the phone feeds back call quality statistics to the SIP server when the call is terminated.

<callStats>false</callStats>

If you set the silent period to 0 (seconds) then you will only get 1 beep when the second call comes through regargless of how long the second call rings for.

<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>

These are the UDP ports that the phone expects to see RTP streams (UDP traffic) coming in and going out on. These values below are probably the defaults anyway. If you are running your phone behind a non SIP aware router you may want to narrow this range down to say 16384 and 16390, and then map UDP ports 16384 through to 16390 to your phone from the outside. This will allow your phone to receive inbound RTP voice streams. If your router is SIP aware then likely you do not need to change this from the defaults.

<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>

This is a crucial part of the config. If this is missing, your phone will complain about being "Unprovisioned" so take care with what you edit in here. While the phone is in the "Unprovisioned" state it will repeatedly download it's config file via TFTP every minute or two, so changes you make should be picked up fairly quickly. I am aware of the multiple uses of your SIP username - quite possibly some are redundant.

<sipLines>
<line
button="1">
<featureID>9</featureID>
<featureLabel>extension number</featureLabel>
<proxy>SIP proxy</proxy>
<port>5060</port>

Put your SIP username in here

<name>sip username</name>

This next line <displayName> is for the SIP request. The phone will send out whatever the value of this is in the SIP registration, so put your name. It doesn't matter too much but I believe that this name appears on the remote phone if it supports it. In my case I put <firstname> <lastname>

<displayName>Your Name (appears in SIP requests as a type of Caller Name)</displayName>

The auto answer setting can be 0, 1, 2 or 3.
0=off and locked so it can't be changed through the settings menu.
1=on and locked so it can't be changed through the settings menu.
2=off and locked so it can't be changed through the settings menu.
3=on and locked so it can't be changed through the settings menu.
None of these settings will allow you to change it through the phone's settings menu.

<autoAnswer>
<autoAnswerEnabled>2</autoAnswerEnabled>
</autoAnswer>

The call waiting setting can be 0, 1, 2 or 3.
0=off but can be changed through the settings menu.
1=on but can be changed through the settings menu.
2=off and locked so it can't be changed through the settings menu.
3=on and locked so it can't be changed through the settings menu.

<callWaiting>3</callWaiting>

SIP username and password

<authName>sip username</authName>
<authPassword>sip password</authPassword>

<sharedLine>false</sharedLine>

The messageWaitingLampPolicy values work like this:

  1. Primary Line - Light and Prompt set to 1
  2. Primary Line - Prompt Only set to 2
  3. Primary Line - Light Only set to 3
  4. Light and Prompt presumably set to 4
  5. Prompt Only presumably set to 5
  6. Light Only presumably set to 6
  7. None set to 7

'Light' is the bright red lamp on the headset
'Prompt' will show up a flashing voicemail envelope next to the Line on the RHS side of the display when there is voicemail

<messageWaitingLampPolicy>1</messageWaitingLampPolicy>
<messagesNumber>voicemail extension</messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>

And again, your username:

<contact>sip username</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
</line>

This next block of statements is to define what you do with the other line buttons on your phone. It can be used for a second SIP registration if you have a second SIP number. The second line button can also be used as a speed dial. If you have a 7961 you'll have another four of these line buttons which you can customise in the same way.

<line
button="2">
<featureID>21</featureID>
<featureLabel>speed dial name goes here</featureLabel>
<speedDialNumber>speed dial number goes in here</speedDialNumber>
</line>

Line buttons can also be configured to work similar to the servicesURL setting.

<line
button="3">
<featureID>20</featureID>
<featureLabel>service uri name goes here</featureLabel>
<serviceURI>service uri destination goes here</serviceURI>
</line>
</sipLines>

Define your dialplan in here. My dialplan basically just sets a 5 second timer after each digit before the phone starts dialing the digits already entered, but ideally you'd set this so that your most common blocks of numbers (e.g 8 digits) only had a short timer after the 8th digit so that the phone would start dialing quickly after 8 digits had been entered,

<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<dialTemplate>DRdialplan.xml</dialTemplate>
</sipProfile>

<commonProfile>
<phonePassword></phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>

This is where you put the load name of the image. Once you've decompressed the .cop file image you'll see a file like SIP41.8-2-2SR1S.loads. The name of this file is what you need to put in the config. if the phone is running a different image it should reflash itself to match the version listed here. Note - do not specify the term41.loads file, as that file is the one and only file that the phone looks for after it has been fully reset (it doesn't have a config at that stage to know what filename to load so it loads that one and then pulls the associated signed binaries in).

<loadInformation>SIP41.8-2-2SR1S</loadInformation>

<vendorConfig>

Allows you to disable the speakerphone. Why you would want to do this I'm not sure.

<disableSpeaker>false</disableSpeaker>

Disable Speaker phone and Headset:

<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>

Set to 0 to enable the PC port on the back of the phone, or 1 to disable it:

<pcPort>0</pcPort>

Toggles on and off the Settings button on the front of the phone. Useful to lock the phone config down.

<settingsAccess>1</settingsAccess>

Gratuitous ARP functionality - relates to learning MAC addresses from Gratuitous ARP responses.

<garp>0</garp>

Set this to 0 to disable access to the voice VLAN from the PC port. Note that if you run your PC on the same VLAN as the voice (if for example you are using 802.1p to do your QoS) you must set this to 1 otherwise your PC on the same VLAN won't be able to communicate if it is connected to the PC port on the back of the phone.

<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>0</autoSelectLineEnable>

EDIT >> As of SIP firmware 9.2(1) it is necessary to add the following two lines in order to ssh to the phone.

<sshAccess>0</sshAccess>
<sshPort>22</sshPort>

Defines whether you can browse to the web interface of the phone. The 7941 unlike the 7940, has a web server built in which is useful for monitoring the phone's performance. If the web interface does not seem to be working, try setting the value to 0 instead of 1 and reloading the phone. Odd, yes, but for me, setting this to 0 made the web interface visible.

<webAccess>1</webAccess>

The display settings only apply to the color screen LCD phones. They must use the same core firmware across all the new phones and just left it in for the mono screen phones. 1=Sunday, 2=Monday, 3=Tuesday, 4=Wednesday, 5=Thursday, 6=Friday and 7=Saturday. DisplayOnTime is the time of day the screen turns on. DisplayOnDuration is the length on time from the DisplayOnTime that the display will remain on. DisplayIdleTimeout is the lenght of time the display will remain on when outside the DisplayOnDuration parameter.

<daysDisplayNotActive>1,2,3,4,5,6,7</daysDisplayNotActive>
<displayOnTime>00:00</displayOnTime>
<displayOnDuration>00:00</displayOnDuration>
<displayIdleTimeout>00:00</displayIdleTimeout>
<spanToPCPort>1</spanToPCPort>
<loggingDisplay>1</loggingDisplay>
<loadServer></loadServer>
</vendorConfig>

<versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp>

Specifying the networkLocale gives me NZ tones, which makes the phone almost feel like a normal phone for the rest of the house. These networkLocale files are on CCO - look under CallManager sections for these. If you don't specify this the phone will run with the standard US default.

Setting the locale does not seem to reset the dialtone to anything local, but it does customise the ringing tone and other PSTN tones.

<networkLocale>New_Zealand</networkLocale>

<networkLocaleInfo>
<name>New_Zealand</name>
<version>5.0(2)</version>
</networkLocaleInfo>

<deviceSecurityMode>1</deviceSecurityMode>

The next few statements define various URL's - the authenticationURL is for authenticating access to the phone settings and administration. The phone will send the username/password details to this URL for authentication, and if the URL returns just the word AUTHORIZED the phone will allow the user to access the web administration. In my case I have a PHP script on my webserver called authenticate.php of which the contents look like this: <?php echo "AUTHORIZED"; ?>

<authenticationURL>http://www/ipphone/authenticate.php</authenticationURL>
<directoryURL>http://www/ipphone/directory.xml</directoryURL>
<idleURL></idleURL>
<informationURL>http://www/ipphone/GetTelecasterHelpText.jsp</informationURL>

<messagesURL></messagesURL>
<proxyServerURL>proxy:3128</proxyServerURL>
<servicesURL>http://www/ipphone/services.xml</servicesURL>

QoS stuff, but I'm not sure if this is valid for SIP or not - I suspect it is but I haven't tried it. Viewing the phone settings from the web interface suggests that it is valid for SIP.

<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>

Leave the rest of these settings alone unless you know what they do (in which case please update this document!).

<transportLayerProtocol>4</transportLayerProtocol>

4 - Use default transport protocol (in old firmwares - udp, in latest - tcp), may be this also a TLS selection?
2 - Prefer use UDP
1 - Prefer use TCP
(May be this parameter a bit mask?)

<capfAuthMode>0</capfAuthMode>
<capfList>
<capf>
<phonePort>3804</phonePort>
</capf>
</capfList>

<certHash></certHash>
<encrConfig>false</encrConfig>

</device>

Phone Firmware


The first release of code or this phone running SIP was 8.0(1). However it was never available on CCO and was only ever bundled with CUCM 5.0. The first publically downloadable release was 8.0(2). This was then followed by 8.0(2)SR1 release which fixed a few critical bugs on the phone.

For Cisco customers with a valid Cisco login and support contract - firmware files may be downloaded from http://tools.cisco.com/support/downloads/go/Model.x?mdfid=280083379&mdfLevel=Model&treeName=Voice%20and%20Unified%20Communications&modelName=Cisco%20Unified%20IP%20Phone%207941G&treeMdfId=278875240
For a list of the Firmware Changes:
http://www.cisco.com/univercd/cc/td/doc/product/voice/c_ipphon/english/ipp7961/relnotes/index.htm

If you do not have a copy of the required SIP image or you want to upgrade, then either contact your reseller who sold you the phone and ask them for a SIP image, or obtain a maintenance contract for your phone (they're only about $12/year) and download the software legally from CCO.

  • Version 8.0(2)SR1 was a good release, basic functionality of the phone all works. There are quite a few minor bugs but no showstoppers, such as slight voice clipping when the call is answered. MWI works, directories work, call quality is good.


  • Version 8.0(4)SR1 was released on 30 August 2006 is only marginally better than 8.0(3). Many many more bugs are fixed, HTTP has more information than previous releases, and personal directories work again. The cropping of characters seen when running 'show conf' from the command line is fixed.

  • Version 8.0(4)SR2 was released on 17 Jan 2007. It works for me for outbound calls, but inbound calls all fail, and my phone provider consider my phone to be "unregistered". Debugging shows that this release too, bungles the "Date:" SIP header. The HTTP server on the phone is disabled regardless of the config setting.

    • NOTE: 8.0(4)SR2 and probably early releases DO NOT work with the qualify=yes setting configured in the extension. When asterisk attempts to contact the phone to requality the phone returns an invalid SIP response and Asterisk deregisters the phone. Setting qualify=no fixes the registration problem (however the phone status is no longer monitored by asterisk).If you are having problems with registration (or calling the c79xx from Asterisk) this will likely fix your issues.

  • Version 8.0(4)SR3 was released on 20 February 2007. This release clears up several issues with the 8.0(4) series like HTTP access, transfers dropping, and hold music not working. The phone is able to register and make/receive calls, and transfer calls. The inbound call caller ID no longer contains the server IP. Unfortunately the "Date: " header on the SIP packets is still munged, and MWI is still broken.

  • Version 8.2(1) was released on December 8 2006. It worked outbound for about 18 hours, before I had two full resets in short succession. That was a bad sign. The HTTP server is now fixed. However Cisco still have not fixed the "Date:" header problem which appears to be causing my system to be knocked back on SIP registration through my IOS SIP firewall. This must certainly be an issue of RFC compliancy...

  • Version 8.2(2) was released March 27 2007. It seems to be good. Most critically, the Date: field problem is acknowledged and appears FIXED: See http://www.cisco.com/cgi-bin/Support/Bugtool/onebug.pl?bugid=CSCsg27644. My early testing is that with two SIP lines registered, calls in and out work as they should. The HTTP server does not seem to work though, and you need to rename the java file to be Jar41sip.8-2-1-19.sbn instead of just jar41sip.8-2-1-19.sbn (case sensitive), but if all else is ok then this release may possibly be a contender for a recommended release.

  • Version 8.2(2)SR1 was released March 31 2007 to fix a problem with the Call Lists being in the wrong order. Otherwise I believe it is identical to the previous release a few days earlier. Initially the HTTP server on the phone did not appear to work, but I found that if I set the <webAccess> tag to 0 instead of 1, it works. Yes, it seems back to front, I know, but that's what I had to do...

  • Version 8.2(2)SR3 was released May 22 2007 to fix a bug that the phone will fail to register if a duplicate IP is detected. It still has the same MWI 399 error as 8.2(2)SR1. The call quality is fine and the phone seems to perform exactly the same.

  • Version 8.2(2)SR4 was released June 05 2007

  • Version 8.3(1) was released June 29 2007 and introduces some new features including things like an "Intercom History" in the Directories (not sure what this does though). Most visible is the addition of a "DND" softkey on the front of the phone which is obviously a Do Not Disturb function that turns inbound calls away when activated.

  • Version 8.3(2) was released August 10 2007. Release notes state no resolved caveats however it does appear to resolve at least one problem - that with the DND button displaying an odd error when the DND function is activated via softkey. The code seems generally functional and good.

  • Version 8.3(3) was released October 24 2007. This firmware supposedly fixes a bunch more bugs, but it has a newly broken NTP implementation in it. This has now been acknowledged by Cisco, and tracked via CSCso40588. Cisco have junked the bug, and the official response is that they have tested and verified that NTP is completely broken, but will not be fixing it. If your SIP server or phone provider's system sends the Date: header in it's SIP messages, your phone will use that to sync to the correct time. If your phone does not receive this header it will display the wrong date/time, and it will refuse to sync to an NTP server. The response I have from them in writing is that the phones were designed to be used in a CallManager environment, and as CM (and I believe Asterisk) sends the Date: header, then date/time syncing to an NTP server is not important.
If like me, your VoIP provider does not send this header, you will have to downgrade to 8.3(2) in order to have NTP date/time synchronisation function.

Workaround: If you wish to reset the time, SSH to the phone and log in with user 'default' and pass 'user' and reset it with the 'date command'. The format of that command is:

    • Note: Set this to the NON DAYLIGHT SAVINGS time if you are on daylight savings, and check your phone display afterwards.
    • $ /bin/date 200711212255
    • Wed Nov 21 22:55:00 EST 2007
    • $

  • Version 8.3(3)SR2 was released November 21 2007.

  • Version 8.3(4)SR1 was released March 5 2008.

  • Version 8.3(4)SR1 was released April 30 2008. **UNTESTED**

  • Version 8.4(1) was released August 15 2008. **UNTESTED**

  • Version 8.4(1)SR1 was released September 3 2008. Apart from NTP syncronisation still being broken, this version appears to be otherwise stable. Registration and qualify=yes work correctly (tested on Asterisk 1.6). NEW: Lines and speed dials no longer have the annoying grey background, and simply overlay on the desktop now!

  • Version 8.4(3) and newer have a bug where the "dial" soft button is broken, 8.4(2) seems ok.

  • Version 8.5(2) was released June 1 2009 and the NTP synchronisation problem is now officially fixed, despite Cisco initially stating that they will not fix the bug. This release appears to be very stable and should work well for most people.

  • Version 8.5(2)SR1 was released August 17, 2009.

  • Version 8.5(3) was released October 8, 2009. This release appears to have a new problem where the phone will continue to indicate that an inbound call is "ringing", even after asterisk has stop ringing the extension.

  • Version 8.5(4) was released January 8, 2010. It's a solid all round release which appears to have no major problems. This is probably the best release to run in production right now (as of March 2010), combining features and bug fixes with no apparent regressions to previous releases. The problem with the "ringing" display in 8.5(3) is fixed. The soft dial button it still not fixed in this release, recommend you use 8.4(2) if this is important to you.

  • Version 9.0(2)SR1 was released February 18 2010. Note the new main version number of 9 which indicates some potentially major changes to the code. This release does not work at all with third party SIP servers - whether this is a bug or by design remains unknown. However the XML config files which worked with version 8.5 will load - but Wireshark traces show the phone will refuse to even attempt to register or send SIP invites out to an upstream SIP server. Until it is known why this is the case, this release is NOT recommended for production.

  • Version 9.0(3) Does in deed work with Asterisk. As of 9.X Cisco has switch to using ONLY TCP for SIP connectivity. NEW: Work with Asterisk 1.6.2.13 with TCP SIP enabled, like described lower, but "Redial" button is broken.

  • Version 9.2(1) was released May 24, 2011. Works with both TCP and UDP transports. For UDP transport set following options in SEP<MAC>.cnf.xml: <proxy>USECALLMANAGER</proxy> and <transportLayerProtocol>2</transportLayerProtocol>. For ssh to work add the following options in the <vendorConfig> section of SEP<MAC>.cnf.xml: <sshAccess>0</sshAccess> and <sshPort>22</sshPort>. Redial button works.

  • Version 9.3(1)SR2 was released Feb 14, 2013. Contains several security enhancements, A support contract is not needed to download this version, you just need a free account at Cisco.com


Enabling TCP SIP


sip.conf:

udpbindaddr=0.0.0.0
tcpenable=yes
tcpbindaddr=0.0.0.0
callcounter=yes
transport=udp, tcp

SEP<MAC>.cnf.xml:

<line button="1">
<featureID>9</featureID>
<featureLabel>Foo</featureLabel>
<proxy>USECALLMANAGER</proxy>
<port>5060</port>
<name>0308</name>

N.B. It must say _exactly_ USECALLMANAGER



Downgrading the firmware

The process for downgrading the firmware is the same for upgrading it. Simply specify the new loads file in your loadInformation tag in the .cnf.xml file.

Common problems


1. If the phone appears to be downloading but ignoring your config/changes, double check the console logs (see above for how-to steps). Usually the phone will ignore new configuration information if there is a serious parse error, such as an unclosed tag, or misspelled tag. Nab an XML editor, I recommend http://www.philo.de/xmledit/ for Windows (the first one I found, spyware free, relatively small) as it can check your code to make sure all tags are closed.

As a last resort you can do a full factory reset. Please note, the factory reset will load the term71.default.loads file from the TFTP server. This file may have been overwritten if you unzipped an older firmware package into your TFTP root. Make sure it matches the version you want to upgrade to. Note: this is not to be used routinely. This formats the onboard flash, downloads an image from your TFTP server and totally reinstalls the phone from scratch. The factory reset procedure is documented in the Cisco TAC collection: http://www.ciscotaccc.com/kaidara-advisor/voice/showcase?case=K43691258 - see the second series of keystrokes.

The process is: Remove AC power from the phone. Hold # key down. Reconnect AC power. Continue holding #. Once line buttons flash amber in sequence enter the key code: 123456789*0#. Some users have indicated that this process causes the phone to hang with the message "Upgrading". If this is the case you can try the same procedure except use the key code: 3491672850*# instead of 123456789*0#. Whatever you do, never disconnect the power while any device is updating its firmware. Or you will have a very expensive paperweight on your hands.

2. The phone will request some extra files that I have not documented, such as a CTL file. This is harmless, it is to do with security certificates which are not required. One day the configuration of those might be documented here.

3. If you're getting Unprovisioned Errors, check to make sure the phone is accepting your config files. The steps are the same as in #1.

4. If your phone is stuck on registering. You have probably used a configuration file from one of the other Wiki's, for a different line of phones. The configuration options are similar, but not exact. Your best bet is to start over from scratch and follow this Wiki step by step. Note: Older firmware versions appear to work with some of these broken configuration files. This can lead to the misconception that it is a firmware issue.

5. If you're getting registration issues yet the configuration file is being accepted, check to make sure you do NOT have NAT turned on. In Trixbox by default extensions have NAT = Yes. Change it to NAT = No. Also do not enter anything in the <sipProxies></sipProxies>.


Troubleshooting

The Cisco 79x1 phones provide a lot debug information, if you know how to get it. In addition to verbose logs and serial console ports, the phones provide SSH access to a command-line shell.

General tools available:

1. Watch your TFTP server for the files that the phone attempts to retrieve. A lot of upgrade problems are as simple as misspelled filename or improper case. If you are using Windows, I heartily recommend the tftpd32 server for this, and any other Cisco products. It is 200k, does TFTP client and server, NTP, DHCP and Syslog, which are all services your phone and other Cisco devices will use. You can get it here http://tftpd32.jounin.net/.

2. Check the phone console logs. The console logs are available three ways. If the web service is enabled on the phone you can simply browse to the phone's ip address (http://192.168.0.123) and select "console logs". If the web service is not enabled you can try logging in with SSH. The SSH username and password are configuration options in the device's XML file. After completing the SSH login you are provided with another login prompt. Entering log/log will echo the system log.

If you are unable to get into the web/ssh interface then you may access the logs through the console port (labeled Aux). This port is normally used for a sidecar row of extra buttons, but also doubles as the console port. The axillary port accepts RJ-11 terminated cables and can be plugged directly into any standard Cisco serial DB-9 adapter. Unlike other Cisco consoles, your cable does not need to be a rollover cable. The console port operates at 9600 baud, 8 data bits, no parity information, and 1 stop bit. The debug console outputs a wealth of information, including configuration parse errors, registration errors, DHCP information, etc. This takes a lot of the guess work out of fixing your configuration files.

4. Use Wireshark http://www.wireshark.org/ to find out what your phone is doing over the network. If you are attempting to register to Asterisk, turn on sip debugging on the PBX. Wireshark understands the SIP/SDP protocols and decodes all of the communication. A typical SIP registration involves a REGISTER request from the phone (without authentication information), an UNAUTHORIZED response from the SIP server, another REGISTER request (this time with authorization information: Digest username="blah",realm="blah", etc.) and a final OK response from the SIP server. Optionally the SIP server will send a request for OPTIONS challenging the phone to provide known codecs and other information. Response to this is what Asterisk uses to "qualify" the phone, when qualify=yes is present in sip.conf. It may be useful to use the filter "sip || sdp".

5. SSH access. If SSH is configured in your XML files you can connect to your phone over the SSH protocol. After entering the username/password combination from your configuration file you must enter a second username/password combo. Valid options are:
  • log/log - Displays system logs
  • debug/debug - Special debugging interface/command line
  • default/user - Basic non-root shell

Trixbox XML services


Trixbox comes with SugarCRM, a powerful directory service application that can manage contacts using PHP front end to a MySQL database. Trixbox is preinstalled with XML Services for translating this directory to various phones, including the Cisco 74xxs. You'll want to add the following URLs to the tags in your SEPXX....

<directoryURL>http://YOURTRIXBOXIP/cisco/services/PhoneDirectory.php</directoryURL>
<servicesURL>http://YOURTRIXBOXIP/services/index_cisco.php</servicesURL>

On the default Trixbox 2.0 install there is an errant code snippet that needs to be changed. In the file:xmlservices/include/xmlservices_lib.php lines 40 & 41 need to be commented out. This may still be in Trixbox 2.2 (unconfirmed).

Change:
$browser = "Aastra";
$content_format = "aastraxml";
To:
// $browser = "Aastra";
// $content_format = "aastraxml";
What they are doing is regardless of what type of browser you're accessing with to are treat it like an astra phone. Be careful, there is a $browser= "Aastra"; $content_format = "aastrxml" before lines 40 & 41. You'll need some SugarCRM contact entries to test out the system.

Once its working you'll need to edit the PHP files. By default, the XML services come preconfigged with a dial out number. Note the variable $LongDistanceExtension = "91" is the beginning of a few of the PHP files (PhoneDirectory.php, DirectoryItem.php). It makes the bold assumption to dial out, you must press 9. You'll want to change these entries to fit your dial scheme. Example: $LongDistanceExtension = "1" to remove the dial out prefix.

Also to change the order in which phone numbers are displayed per contact, edit the DirectoryItem.php and PhoneDirectory.php. below the while ($row = mysql_fetch_array($SelectPersonInfo)).

Example:
                if ($row["phone_work"]) {
                        $PersonDirectoryListing .= "<DirectoryEntry>\n";
                        $PersonDirectoryListing .= "<Name>Work:</Name>\n";
                        $PersonDirectoryListing .= "<Telephone>$WorkPhone</Telephone>\n";
                        $PersonDirectoryListing .= "</DirectoryEntry>\n";
                }
                if ($row["phone_mobile"]) {
                        $PersonDirectoryListing .= "<DirectoryEntry>\n";
                        $PersonDirectoryListing .= "<Name>Cell:</Name>\n";
                        $PersonDirectoryListing .= "<Telephone>$MobilePhone</Telephone>\n";
                        $PersonDirectoryListing .= "</DirectoryEntry>\n";

becomes

                if ($row["phone_home"]) {
                        $PersonDirectoryListing .= "<DirectoryEntry>\n";
                        $PersonDirectoryListing .= "<Name>Home:</Name>\n";
                        $PersonDirectoryListing .= "<Telephone>$HomePhone</Telephone>\n";
                        $PersonDirectoryListing .= "</DirectoryEntry>\n";
                }
                if ($row["phone_mobile"]) {
                        $PersonDirectoryListing .= "<DirectoryEntry>\n";
                        $PersonDirectoryListing .= "<Name>Cell:</Name>\n";
                        $PersonDirectoryListing .= "<Telephone>$CellPhone</Telephone>\n";
                        $PersonDirectoryListing .= "</DirectoryEntry>\n";


This will now change it so Home is displayed at the top of instead of a search.

With SugarCRM, multiple users can manage the phone directories through a webpane interface, making painless contact management for users. Its recommended that you use "accounts" as a way of classing the type of contacts in SugarCRM. Notably these steps aren't specific to the 79x1s phones (aside from the directoryURL and serviceURL tags) Cisco phones. A 7940, for example, will view the directory information the exact same.


Some tips on using this phone.


1. It's probably better to soft reset the phone rather than to pull the power out when you want to reboot it. Bootup messages show that the phone does have a writeable file system in flash, which although seems to be resilient and recovers from powering off, is probably going to be more reliable if you do the <settings> **#** sequence to soft reset it.

2. Do not attempt to set 800k images as the background on your phone especially the lower and mid end ones. I don't know how the phone would cope, it may be OK but it may also fill all flash space and crash the phone. Try at your own risk. The phone only can display files 30k or so and additionally has limited flash space, so your fancy million colour png will go to waste if you try using it as a background anyway.

The following example shows a Desktops/320x212x12/List.xml file that defines two images. The required Image and URL attributes must be included for each image. The TFTP URI that is shown in the example is the only supported method for linking to full size and thumbnail images. HTTP URL support is not provided.

List.xml Example

<CiscoIPPhoneImageList>

<ImageItem Image="TN-pic1.png"
URL="pic1.png"/>


<ImageItem Image="TN-pic2.png"
URL="pic2.png"/>

</CiscoIPPhoneImageList>


3. For a very cool feature (and this is probably not new to the 7941), browse to: http://yourIpPhoneIPAddress/CGI/Screenshot (See Also /CGI/CallInfo /CGI/LineInfo and /CGI/SettingsInfo)

4. Note that as of version 8.0(2)SR1 the phone sends UDP SIP requests from a high source port. This means that it will send from (for example) source port 50116 to SIP port 5060 on the SIP server. This is acceptable behaviour as per the SIP RFC, but it is different to the Cisco ATA and 7940 SIP software (and many but not all phones) and may have ramifications on your firewall rules if you are expecting the phone to send packets out from source port 5060 as well (as you may have with 7940 and ATAs etc). There are a few phones around which behave in the same way although most don't - this is not a cisco specific behaviour and is NOT a bug.
It seems that the phone drops all control traffic destined for it sent on any port other than port 5060 - and as per the SIP RFCs no server should ever do this anyway, but Asterisk configured with NAT=yes behind a NAT does work this way for return traffic from the server to the phone. This was a major problem as my phone service provider (who have their Asterisk server behind a NAT device) were returning traffic on high ports to my phone which it in turn dropped it. I requested them turn NAT off for my extension, and now my phone works perfectly. Ethereal analysis will show this up as return UDP traffic destined for other than port 5060, and a failure of the phone to register due to it not receiving the return messages from the server requesting the phone authenticate (or if no authentication, the phone will never see a SIP 200 OK message after registering). The problem is further complicated by SIP enabled routers, known as SIP Application Layer Gateway (ALG), under normal conditions, the router will 'smartly' alter outgoing SIP register packets by altering the port within it to match the source port of the device, so the port becomes bound to the device in NAT. So when Cisco 7961 behind a SIP-ALG NAT enabled router send a request to register from port 49521, and requests a reply to 5060, the router will replace the '5060' with '49521'. Your server will then reply to this port, despite setting nat=no, the phone will never receive the data, and will never register. Either disable the ALG in your router, use a non-SIP-ALG router, or use a different port on the server other than 5060. If you control your own asterisk, you can set your firewall to port 5060 from say, port 5061.

5. To further verify your configuration, ssh to the phone and log in with your ssh username and password as defined in your cnf.xml, then when prompted again log in as debug password debug. Type 'show conf' - you should see something like this, which is basically the running config of the phone:

Cisco 79x1 SSH example

6. This example shows a distinctiveringlist.xml file that defines two phone ring types:

<CiscoIPPhoneRingList>

<Ring>

<DisplayName>Analog 1</DisplayName>

<FileName>ringer1.pcm</FileName>

</Ring>

<Ring>

<DisplayName>Analog 2</DisplayName>

<FileName>ringer2.pcm</FileName>

</Ring>

</CiscoIPPhoneRingList>


7. The 79x1 phones support IPv6 however do not appear to function correctly if an IPv6 IP address is programmed into the handset with an IPv4 only SIP server. Typically they will start up OK and then the IPv6 configuration will become deactivated. If you do not have IPv6 connectivity to your SIP server do not specify an IPv6 address. If you do however have IPv6 connectivity upstream then please post your results here.

Sample Working Dialplan

(tested with 8.0.2 SR1, 8.2.2SR1 and SR3)

A sample dialplan and working config in file format can be found at http://www.reub.net/files/cisco-7941/SEP-my-mac.cnf.xml and http://www.reub.net/files/cisco-7941/DRdialplan.xml. Most users should start with this as their template.

Cisco 7961 with 8.3.3SR2 Configuration Examples.


After upgrading to 8.3.3SR2 if you use some of the below configurations you will find that you can no longer put any changes into the phones configurations and have them recognized.
Here is a working example for this firmware version and all previous 8.x versions:

$ASTERISK = IP Of Asterisk
$LABEL = Phone Label < 11 Characters
$EXTENSION = Extension
$PASSWORD = SIP Password

<device>
<fullConfig>true</fullConfig>
<deviceProtocol>SIP</deviceProtocol>
<sshUserId>user</sshUserId>
<sshPassword>pass</sshPassword>
<devicePool>
<name></name>
<dateTimeSetting>
<dateTemplate>M/D/YA</dateTemplate>
<timeZone>Eastern Standard/Daylight Time</timeZone>
<ntps>
<ntp>
<name>$ASTERISK</name>
<ntpMode>Unicast</ntpMode>
</ntp>
</ntps>
</dateTimeSetting>
<callManagerGroup>
<name>5.0 Beta</name>
<tftpDefault>true</tftpDefault>
<members>
<member priority="0">
<callManager>
<name>ccm-beta-5-1</name>
<description>CallManager 5.0 Beta Pub - 5.0.1.032</description>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
<mgcpPorts>
<listen>2427</listen>
<keepAlive>2428</keepAlive>
</mgcpPorts>
</ports>
<processNodeName>$ASTERISK</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
<srstInfo>
<name>Disable</name>
<srstOption>Disable</srstOption>
<userModifiable>false</userModifiable>
<ipAddr1></ipAddr1>
<port1>2000</port1>
<ipAddr2></ipAddr2>
<port2>2000</port2>
<ipAddr3></ipAddr3>
<port3>2000</port3>
<sipIpAddr1>$ASTERISK</sipIpAddr1>
<sipPort1>5060</sipPort1>
<sipIpAddr2>$ASTERISK</sipIpAddr2>
<sipPort2>5060</sipPort2>
<sipIpAddr3></sipIpAddr3>
<sipPort3>5060</sipPort3>
<isSecure>false</isSecure>
</srstInfo>
<mlppDomainId>-1</mlppDomainId>
<mlppIndicationStatus>Default</mlppIndicationStatus>
Default
<connectionMonitorDuration>120</connectionMonitorDuration>
</devicePool>
<sipProfile>
<sipProxies>
<backupProxy>$ASTERISK</backupProxy>
<backupProxyPort>5060</backupProxyPort>
<emergencyProxy>$ASTERISK</emergencyProxy>
<emergencyProxyPort>5060</emergencyProxyPort>
<outboundProxy></outboundProxy>
<outboundProxyPort>5060</outboundProxyPort>
<registerWithProxy>true</registerWithProxy>
</sipProxies>
<sipCallFeatures>
<cnfJoinEnabled>true</cnfJoinEnabled>
<callForwardURI>x-cisco-serviceuri-cfwdall</callForwardURI>
<callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
<callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
<callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
<meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
<abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
<rfc2543Hold>false</rfc2543Hold>
<callHoldRingback>2</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>2</anonymousCallBlock>
<callerIdBlocking>2</callerIdBlocking>
<dndControl>1</dndControl>
<remoteCcEnable>true</remoteCcEnable>
</sipCallFeatures>
<sipStack>
<sipInviteRetx>6</sipInviteRetx>
<sipRetx>10</sipRetx>
<timerInviteExpires>180</timerInviteExpires>
<timerRegisterExpires>3600</timerRegisterExpires>
<timerRegisterDelta>5</timerRegisterDelta>
<timerKeepAliveExpires>120</timerKeepAliveExpires>
<timerSubscribeExpires>120</timerSubscribeExpires>
<timerSubscribeDelta>5</timerSubscribeDelta>
<timerT1>500</timerT1>
<timerT2>4000</timerT2>
<maxRedirects>70</maxRedirects>
<remotePartyID>true</remotePartyID>
<userInfo>None</userInfo>
</sipStack>
<autoAnswerTimer>1</autoAnswerTimer>
<autoAnswerAltBehavior>false</autoAnswerAltBehavior>
<autoAnswerOverride>true</autoAnswerOverride>
<transferOnhookEnabled>false</transferOnhookEnabled>
<enableVad>false</enableVad>
g711ulaw
<dtmfAvtPayload>101</dtmfAvtPayload>
<dtmfDbLevel>3</dtmfDbLevel>
<dtmfOutofBand>avt</dtmfOutofBand>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
<kpml>3</kpml>
<phoneLabel>$LABEL</phoneLabel>
<stutterMsgWaiting>2</stutterMsgWaiting>
<callStats>false</callStats>
<offhookToFirstDigitTimer>15000</offhookToFirstDigitTimer>
<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>
<sipLines>
<line button="1">
<featureID>9</featureID>
<featureLabel>$EXTENSION</featureLabel>
<proxy>$ASTERISK</proxy>
<port>5060</port>
<name>$EXTENSION</name>
<displayName>$EXTENSION</displayName>
<autoAnswer>
<autoAnswerEnabled>2</autoAnswerEnabled>
</autoAnswer>
<callWaiting>3</callWaiting>
<authName>$EXTENSION</authName>
<authPassword>$PASSWORD</authPassword>
<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>1</messageWaitingLampPolicy>
<messagesNumber>*97</messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<contact>$EXTENSION</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
</line>
</sipLines>
<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<dialTemplate>dialplan.xml</dialTemplate>
<softKeyFile></softKeyFile>
</sipProfile>
<commonProfile>
<phonePassword></phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<loadInformation>SIP41.8-3-3SR2S</loadInformation>
<vendorConfig>
<disableSpeaker>false</disableSpeaker>
<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
<pcPort>0</pcPort>
<settingsAccess>1</settingsAccess>
<garp>0</garp>
<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>0</autoSelectLineEnable>
<webAccess>0</webAccess>
<daysDisplayNotActive>1,7</daysDisplayNotActive>
<displayOnTime>08:00</displayOnTime>
<displayOnDuration>10:30</displayOnDuration>
<displayIdleTimeout>01:00</displayIdleTimeout>
<spanToPCPort>1</spanToPCPort>
</vendorConfig>
<versionStamp></versionStamp>
<userLocale>
<name></name>
<uid></uid>
<langCode>en_US</langCode>
<version></version>
<winCharSet></winCharSet>
</userLocale>
<networkLocale></networkLocale>
<networkLocaleInfo>
<name></name>
<uid></uid>
<version>1.0.0.0-1</version>
</networkLocaleInfo>
<deviceSecurityMode>1</deviceSecurityMode>
<idleTimeout>0</idleTimeout>
<authenticationURL></authenticationURL>
<directoryURL></directoryURL>
<idleURL></idleURL>
<informationURL></informationURL>
<messagesURL></messagesURL>
<proxyServerURL></proxyServerURL>
<servicesURL>http://$ASTERISK/directory/directory.xml</servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>4</transportLayerProtocol>
<capfAuthMode>0</capfAuthMode>
<capfList>
<capf>
<phonePort>3804</phonePort>
<processNodeName>ccm-beta-5-1</processNodeName>
</capf>
</capfList>
<certHash></certHash>
<encrConfig>false</encrConfig>
</device>


SoftKey Example


After doing a lot of digging I came across some info on the soft key file.
Here is what I have so far. I have not found out anything on blind transfers.

<softKeyCfg>
<versionStamp>11cdf71b-e9bc-4559-be88-94a266766601</versionStamp>
<typeSoftKey>
<softKeyDef keyID="Redial">
<tag>1</tag>
<eventID>1</eventID>
<helpID>301</helpID>
</softKeyDef>
<softKeyDef keyID="NewCall">
<tag>2</tag>
<eventID>2</eventID>
<helpID>302</helpID>
</softKeyDef>
<softKeyDef keyID="Hold">
<tag>3</tag>
<eventID>3</eventID>
<helpID>303</helpID>
</softKeyDef>
<softKeyDef keyID="Trnsfer">
<tag>4</tag>
<eventID>4</eventID>
<helpID>304</helpID>
</softKeyDef>
<softKeyDef keyID="CfwdAll">
<tag>5</tag>
<eventID>5</eventID>
<helpID>305</helpID>
</softKeyDef>
<softKeyDef keyID="CfwdBusy">
<tag>6</tag>
<eventID>6</eventID>
<helpID>306</helpID>
</softKeyDef>
<softKeyDef keyID="CfwdNoAnswer">
<tag>7</tag>
<eventID>7</eventID>
<helpID>307</helpID>
</softKeyDef>

// back
<softKeyDef keyID="&lt;&lt;">
<tag>8</tag>
<eventID>8</eventID>
<helpID>308</helpID>
</softKeyDef>
<softKeyDef keyID="EndCall">
<tag>9</tag>
<eventID>9</eventID>
<helpID>309</helpID>
</softKeyDef>
<softKeyDef keyID="Resume">
<tag>10</tag>
<eventID>10</eventID>
<helpID>310</helpID>
</softKeyDef>
<softKeyDef keyID="Answer">
<tag>11</tag>
<eventID>11</eventID>
<helpID>311</helpID>
</softKeyDef>
<softKeyDef keyID="Info">
<tag>12</tag>
<eventID>12</eventID>
<helpID>312</helpID>
</softKeyDef>
<softKeyDef keyID="Confrn">
<tag>13</tag>
<eventID>13</eventID>
<helpID>313</helpID>
</softKeyDef>
<softKeyDef keyID="Park">
<tag>14</tag>
<eventID>14</eventID>
<helpID>314</helpID>
</softKeyDef>
<softKeyDef keyID="Join">
<tag>15</tag>
<eventID>15</eventID>
<helpID>315</helpID>
</softKeyDef>
<softKeyDef keyID="MeetMe">
<tag>16</tag>
<eventID>16</eventID>
<helpID>316</helpID>
</softKeyDef>
<softKeyDef keyID="PickUp">
<tag>17</tag>
<eventID>17</eventID>
<helpID>317</helpID>
</softKeyDef>
<softKeyDef keyID="GPickUp">
<tag>18</tag>
<eventID>18</eventID>
<helpID>318</helpID>
</softKeyDef>
// remove last conference party
<softKeyDef keyID="RmLstC">
<tag>57</tag>
<eventID>19</eventID>
<helpID>319</helpID>
</softKeyDef>
<softKeyDef keyID="Barge">
<tag>67</tag>
<eventID>21</eventID>
<helpID>321</helpID>
</softKeyDef>
<softKeyDef keyID="DirTrfr">
<tag>77</tag>
<eventID>28</eventID>
<helpID>328</helpID>
</softKeyDef>
<softKeyDef keyID="Select">
<tag>78</tag>
<eventID>29</eventID>
<helpID>329</helpID>
</softKeyDef>
<softKeyDef keyID="ConfList">
<tag>79</tag>
<eventID>30</eventID>
<helpID>330</helpID>
</softKeyDef>
<softKeyDef keyID="VidMode">
<tag>88</tag>
<eventID>33</eventID>
<helpID>333</helpID>
</softKeyDef>
<softKeyDef keyID="ImmDiv">
<tag>59</tag>
<eventID>65</eventID>
<helpID>365</helpID>
</softKeyDef>
<softKeyDef keyID="Intrcpt">
<tag>60</tag>
<eventID>66</eventID>
<helpID>366</helpID>
</softKeyDef>
<softKeyDef keyID="SetWtch">
<tag>61</tag>
<eventID>67</eventID>
<helpID>367</helpID>
</softKeyDef>
<softKeyDef keyID="TrnsfVM">
<tag>62</tag>
<eventID>68</eventID>
<helpID>368</helpID>
</softKeyDef>
<softKeyDef keyID="DND">
<tag>63</tag>
<eventID>69</eventID>
<helpID>369</helpID>
</softKeyDef>
<softKeyDef keyID="DivAll">
<tag>64</tag>
<eventID>70</eventID>
<helpID>370</helpID>
</softKeyDef>
</typeSoftKey>
<softKeySets>
<softKeySet id="On Hook">
<softKey keyID="Redial"></softKey>
<softKey keyID="NewCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="DND"></softKey>
<softKey keyID="CfwdAll"></softKey>
<softKey keyID="DivAll"></softKey>
<softKey keyID="SetWtch"></softKey>
</softKeySet>
<softKeySet id="Connected">
<softKey keyID="Hold"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="ImmDiv"></softKey>
<softKey keyID="Confrn"></softKey>
<softKey keyID="ConfList"></softKey>
<softKey keyID="Trnsfer"></softKey>
<softKey keyID="TrnsfVM"></softKey>
<softKey keyID="DND"></softKey>
<softKey keyID="Select"></softKey>
<softKey keyID="Join"></softKey>
<softKey keyID="DirTrfr"></softKey>
<softKey keyID="RmLstC"></softKey>
<softKey keyID="Park"></softKey>
<softKey keyID="DivAll"></softKey>
<softKey keyID="SetWtch"></softKey>
</softKeySet>
<softKeySet id="On Hold">
<softKey keyID="Resume"></softKey>
<softKey keyID="NewCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="TrnsfVM"></softKey>
<softKey keyID="ImmDiv"></softKey>
<softKey keyID="DND"></softKey>
<softKey keyID="Select"></softKey>
<softKey keyID="Join"></softKey>
<softKey keyID="DirTrfr"></softKey>
<softKey keyID="SetWtch"></softKey>
</softKeySet>
<softKeySet id="Ring In">
<softKey keyID="Answer"></softKey>
<softKey keyID="ImmDiv"></softKey>
<softKey keyID="CfwdBusy"></softKey>
<softKey keyID="TrnsfVM"></softKey>
<softKey keyID="DivAll"></softKey>
<softKey keyID="DND"></softKey>
<softKey keyID="SetWtch"></softKey>
</softKeySet>
<softKeySet id="Off Hook">
<softKey keyID="Redial"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="PickUp"></softKey>
<softKey keyID="GPickUp"></softKey>
<softKey keyID="CfwdAll"></softKey>
<softKey keyID="MeetMe"></softKey>
</softKeySet>
<softKeySet id="Connected Transfer">
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Trnsfer"></softKey>
</softKeySet>
<softKeySet id="Digits After First">
<softKey keyID="&lt;&lt;"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
</softKeySet>
<softKeySet id="Connected Conference">
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Confrn"></softKey>
</softKeySet>
<softKeySet id="Ring Out">
<softKey keyID="EndCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
</softKeySet>
<softKeySet id="Off Hook With Feature">
<softKey keyID="Redial"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
</softKeySet>
<softKeySet id="Remote In Use">
<softKey keyID="Barge"></softKey>
<softKey keyID="NewCall"></softKey>
<softKey keyID="cBarge"></softKey>
</softKeySet>
</softKeySets>
</softKeyCfg>

Cisco 7911G firmware 8.4.1 SR1S configuration example



<device xsi:type="axl:XIPPhone" ctiid="1566023366">
<deviceProtocol>SIP</deviceProtocol>
<sshUserId>cisco</sshUserId>
<sshPassword>cisco</sshPassword>
<devicePool>
<dateTimeSetting>
<dateTemplate>D-M-YA</dateTemplate>
<timeZone>UTC Standard/Daylight Time</timeZone>
</dateTimeSetting>
<callManagerGroup>
<members>
<member priority="0">
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName>10.10.1.1</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</devicePool>
<sipProfile>
<sipProxies>
<backupProxy></backupProxy>
<backupProxyPort></backupProxyPort>
<emergencyProxy></emergencyProxy>
<emergencyProxyPort></emergencyProxyPort>
<outboundProxy></outboundProxy>
<outboundProxyPort></outboundProxyPort>
<registerWithProxy>true</registerWithProxy>
</sipProxies>
<sipCallFeatures>
<cnfJoinEnabled>true</cnfJoinEnabled>
<callForwardURI>x--serviceuri-cfwdall</callForwardURI>
<callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
<callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
<callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
<meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
<abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
<rfc2543Hold>false</rfc2543Hold>
<callHoldRingback>2</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>2</anonymousCallBlock>
<callerIdBlocking>2</callerIdBlocking>
<dndControl>0</dndControl>
<remoteCcEnable>true</remoteCcEnable>
</sipCallFeatures>
<sipStack>
<sipInviteRetx>6</sipInviteRetx>
<sipRetx>10</sipRetx>
<timerInviteExpires>180</timerInviteExpires>
<timerRegisterExpires>3600</timerRegisterExpires>
<timerRegisterDelta>5</timerRegisterDelta>
<timerKeepAliveExpires>120</timerKeepAliveExpires>
<timerSubscribeExpires>120</timerSubscribeExpires>
<timerSubscribeDelta>5</timerSubscribeDelta>
<timerT1>500</timerT1>
<timerT2>4000</timerT2>
<maxRedirects>70</maxRedirects>
<remotePartyID>false</remotePartyID>
<userInfo>None</userInfo>
</sipStack>
<autoAnswerTimer>1</autoAnswerTimer>
<autoAnswerAltBehavior>false</autoAnswerAltBehavior>
<autoAnswerOverride>true</autoAnswerOverride>
<transferOnhookEnabled>false</transferOnhookEnabled>
<enableVad>false</enableVad>
<dtmfAvtPayload>101</dtmfAvtPayload>
<dtmfDbLevel>3</dtmfDbLevel>
<dtmfOutofBand>avt</dtmfOutofBand>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
<kpml>3</kpml>
<phoneLabel>1109</phoneLabel>
<stutterMsgWaiting>1</stutterMsgWaiting>
<callStats>false</callStats>
<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>
<sipLines>
<line
button="1">
<featureID>9</featureID>
<featureLabel>Asterisk</featureLabel>
<proxy>10.10.1.1</proxy>
<port>5060</port>
<name>1109</name>

<displayName>Francisco</displayName>
<autoAnswer>
<autoAnswerEnabled>2</autoAnswerEnabled>
</autoAnswer>
<callWaiting>3</callWaiting>
<authName>1109</authName>
<authPassword>1000</authPassword>

<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>1</messageWaitingLampPolicy>
<messagesNumber>700</messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<contact>1109</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
</line>
<line
button="2">
<featureID>21</featureID>
<featureLabel>speed dial name goes here</featureLabel>
<speedDialNumber>speed dial actual number goes in here</speedDialNumber>
</line>
</sipLines>
<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<dialTemplate>dialplan.xml</dialTemplate>
</sipProfile>
<commonProfile>
<phonePassword></phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<loadInformation>SIP11.8-4-1SR1S</loadInformation>

<vendorConfig>
<disableSpeaker>false</disableSpeaker>
<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
<pcPort>0</pcPort>
<settingsAccess>1</settingsAccess>
<garp>0</garp>
<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>0</autoSelectLineEnable>
<webAccess>1</webAccess>
<daysDisplayNotActive>1,2,3,4,5,6,7</daysDisplayNotActive>
<displayOnTime>00:00</displayOnTime>
<displayOnDuration>00:00</displayOnDuration>
<displayIdleTimeout>00:00</displayIdleTimeout>
<spanToPCPort>1</spanToPCPort>
<loggingDisplay>1</loggingDisplay>
<loadServer></loadServer>
</vendorConfig>
<versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp>
<networkLocale>New_Zealand</networkLocale>

<networkLocaleInfo>
<name>New_Zealand</name>
<version>5.0(2)</version>
</networkLocaleInfo>

<deviceSecurityMode>1</deviceSecurityMode>
<authenticationURL>http://www/ipphone/authenticate.php</authenticationURL>
<directoryURL>http://www/ipphone/directory.xml</directoryURL>
<idleURL></idleURL>
<informationURL>http://www/ipphone/GetTelecasterHelpText.jsp</informationURL>
<messagesURL></messagesURL>
<proxyServerURL>proxy:3128</proxyServerURL>
<servicesURL>http://www/ipphone/services.xml</servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>4</transportLayerProtocol>
<capfAuthMode>0</capfAuthMode>
<capfList>
<capf>
<phonePort>3804</phonePort>
</capf>
</capfList>

<certHash></certHash>
<encrConfig>false</encrConfig>

</device>


View count: 630436

Cisco's latest 79x1 lineup (including 7906G)


Introduction


Cisco recently released a new series of IP phones, the 7906G, 7911G, 7941G, 7961G and 7971G series. The 7941 and up also come in a G-GE model which has gigabit copper connectivity through the phone, the others have just standard 10/100 for the phone and on the additional PC port. All these new phones sport new cool features, mostly along the lines of newer and better display units, initial support for SIP, but additionally - and this is a major change - config file management, which is now XML based rather than plain (name,value) text pairs. These phones supposedly will, in the future, support an enhanced range of features compared to the 79x0 series.

Some product documentation on them can be found here

Note that the 7941G and 7961G have been superseded by the 7942 and 7962 model phones. The End-Of-Sale and End-Of-Life announcement for the hardware of the 7941 and 7961 series phones can be found here.

Unfortunately the format of the config files has never been well documented on CCO and Google searching shows up a limited amount of content on "cisco SIP and cnf.xml", so this page serves as a reference guide to getting these phones working with SIP compliant phone services such as Asterisk. I recently opened a TAC case to find out more information about the format of the config files but Cisco were unwilling to assist - as as far as they are concerned if the phones are run in a CallManager environment (which is what they were intended for) there is no need to manually edit the config files therefore they were not willing to give help running them in a non CM environment. It's a real shame really because these phones really are very nice handsets, and even if cisco did not want to support third party SIP servers, they could at least make information available so that others could do so.

Here's a sample config file, documented tags are listed below. Note there is a minor error in this file as noted below. If you are aware of how to fix it please do so.

Please DO read this file in detail. You must change instances of things like YOURNTPSERVER and replace them either with an NTP server IP address, or remove the statement altogether. Leaving them in will confuse your phone, and at the very least cause it to reject parts of the config, if it loads it at all.

Config File Editing


Note that the config file contents appear to be case sensitive, and most of the parameters start with a small letter after the opening bracket.

<?xml version="1.0" encoding="iso-8859-1"?>

This line is strictly not needed, but is useful to have if you're trying to use characters not in the US-ASCII character range. Not sure what encodings Cisco phones supports, maybe UTF-8 is supported? (Note: Be sure that your text editor is actually using the same encoding as the one you specify).

<device xsi:type="axl:XIPPhone" ctiid="1566023366">

Note that there is a small syntax error of sorts in the statement above, the phone spits out a message:
NOT 22:26:07.770897 JVM: -XML| unknown element or attribute name ("xsi:noNamespaceSchemaLocation") (line=2) however it seems harmless.

<deviceProtocol>SIP</deviceProtocol>

Define these if you want to be able to ssh to the phone. After ssh'ing you can log in with debug/debug, or log/log to get some basic idea of what is going on, force the phone to re-register etc, or default/user to drop to a basic non-root shell.

<sshUserId>username</sshUserId>
<sshPassword>password</sshPassword>

These next settings are for time related configuration, setting the timezone etc. If you do not specify an NTP server, the phone picks the date and time up from the SIP registration headers from the SIP server. On a LAN this should result in your phone getting sub millisecond accuracy to a local NTP server.

You can find appropriate settings for the timeZone parameter at http://www.cisco.com/univercd/cc/td/doc/product/voice/its/cme34/cme_cr/cme_t1ht.htm#wp1071293 which is publicly accessible. If you copy and paste the relevant entry from the Description field into the <timeZone></timeZone> field in your config, then your phone should then display the correct local time on the phone.

<dateTemplate> can be D-M-Y M-D-Y or Y-M-D
You can also use either dashes, dots, or forward slashes as separators in your dateTemplate, these will be reflected in the date shown on the phone.
There is probably also a way to get the phone to display either 12 or 24 hour time but I'm unsure how just yet (possibly a <timeFormat> tag?)

There is also 'a'/'A' attribute that sets if it's 12 or 24 hours. (e.g. D/M/Ya) (set for 12 hour/am pm, leave away for 24hour display)

Example: D-M-Y --> 24 hour display, D-M-Ya --> 12 hour display

Note: if your using chan_sccp, you have to also set it on the server.

For the times zones, you can use your local time zone, example: Pacific Standard/Daylight Time or New Zealand Standard/Daylight Time.

Edit >> The following time zones are also for the 7970 and can replace UTC Standard/Daylight Time for your local time zone but must be written precisely as follows including caps and punctuation (any deviation from the following will result in the time being automatically returned to UTC):

Dateline Standard Time
Samoa Standard Time
Hawaiian Standard Time
Alaskan Standard/Daylight Time
Pacific Standard/Daylight Time
Mountain Standard/Daylight Time
US Mountain Standard Time
Central Standard/Daylight Time
Mexico Standard/Daylight Time
Canada Central Standard Time
SA Pacific Standard Time
Eastern Standard/Daylight Time
US Eastern Standard Time
Atlantic Standard/Daylight Time
SA Western Standard Time
Newfoundland Standard/Daylight Time
South America Standard/Daylight Time
SA Eastern Standard Time
Mid-Atlantic Standard/Daylight Time
Azores Standard/Daylight Time
GMT Standard/Daylight Time
Greenwich Standard Time
W. Europe Standard/Daylight Time
GTB Standard/Daylight Time
Egypt Standard/Daylight Time
E. Europe Standard/Daylight Time
Romance Standard/Daylight Time
Central Europe Standard/Daylight Time
South Africa Standard Time
Jerusalem Standard/Daylight Time
Saudi Arabia Standard Time
Russian Standard/Daylight Time
Iran Standard/Daylight Time
Caucasus Standard/Daylight Time
Arabian Standard Time
Afghanistan Standard Time
West Asia Standard Time
Ekaterinburg Standard Time
India Standard Time
Central Asia Standard Time
SE Asia Standard Time
China Standard/Daylight Time
Taipei Standard Time
Tokyo Standard Time
Cen. Australia Standard/Daylight Time
AUS Central Standard Time
E. Australia Standard Time
AUS Eastern Standard/Daylight Time
West Pacific Standard Time
Tasmania Standard/Daylight Time
Central Pacific Standard Time
Fiji Standard Time
New Zealand Standard/Daylight Time

<devicePool>
<dateTimeSetting>
<dateTemplate>D-M-YA</dateTemplate>
<timeZone>UTC Standard/Daylight Time</timeZone>
<ntps>
<ntp>
<name>YOURNTPSERVERIPADDRESS</name>
<ntpMode>Unicast</ntpMode>
</ntp>
</ntps>
</dateTimeSetting>

This next part is required, otherwise the phone claims to be unprovisioned. It just requires your SIP server's DNS name. It also appears that the phone will not pick up some XML configuration changes if the <callManagerGroup> element is not present.

<callManagerGroup>
<members>
<member priority="0">
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName>PUTYOURSIPSERVERNAMEINHERE</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</devicePool>

Generally don't need to specify these, but maybe you will want to put in the register line. Note that the opening and closing tags of these elements must be on the same line, or else it won't be able to do integer conversion (I think this is a bug).

<sipProfile>
<sipProxies>
<backupProxy></backupProxy>
<backupProxyPort></backupProxyPort>
<emergencyProxy></emergencyProxy>
<emergencyProxyPort></emergencyProxyPort>
<outboundProxy></outboundProxy>
<outboundProxyPort></outboundProxyPort>
<registerWithProxy>true</registerWithProxy>
</sipProxies>

Some basic features and settings.

<sipCallFeatures>
<cnfJoinEnabled>true</cnfJoinEnabled>
<callForwardURI>x-cisco-serviceuri-cfwdall</callForwardURI>
<callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
<callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
<callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
<meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
<abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
<rfc2543Hold>false</rfc2543Hold>
<callHoldRingback>2</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>2</anonymousCallBlock>
<callerIdBlocking>2</callerIdBlocking>
<dndControl>0</dndControl>
<remoteCcEnable>true</remoteCcEnable>
</sipCallFeatures>

These are to do with SIP connection control.

<sipStack>
<sipInviteRetx>6</sipInviteRetx>
<sipRetx>10</sipRetx>
<timerInviteExpires>180</timerInviteExpires>
<timerRegisterExpires>3600</timerRegisterExpires>
<timerRegisterDelta>5</timerRegisterDelta>
<timerKeepAliveExpires>120</timerKeepAliveExpires>
<timerSubscribeExpires>120</timerSubscribeExpires>
<timerSubscribeDelta>5</timerSubscribeDelta>
<timerT1>500</timerT1>
<timerT2>4000</timerT2>
<maxRedirects>70</maxRedirects>
<remotePartyID>false</remotePartyID>
<userInfo>None</userInfo>
</sipStack>

More general SIP features...

<autoAnswerTimer>1</autoAnswerTimer>
<autoAnswerAltBehavior>false</autoAnswerAltBehavior>
<autoAnswerOverride>true</autoAnswerOverride>
<transferOnhookEnabled>false</transferOnhookEnabled>
<enableVad>false</enableVad>

Often you will need to specify the codec. The choices on these phones are g711 and g729a (and maybe others?)

g729a
<dtmfAvtPayload>101</dtmfAvtPayload>
<dtmfDbLevel>3</dtmfDbLevel>
<dtmfOutofBand>avt</dtmfOutofBand>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
<kpml>3</kpml>

If you are behind a cheap router then these options may be useful. These tell the phone to rewrite the SIP headers it sends out to the SIP proxy, to match your external address. This then allows your external IP address to be registered as the IP address that your phone is on. Set <natEnabled> to 1 and specify your external IP address. I'm not sure if this works with dynamic DNS, but it may do....

EDIT >> As of SIP Firmware 8.5(2), <natEnabled> only accepts the values of 'true' or 'false'. 1 or 0 will not work.

<natEnabled>false</natEnabled>
<natAddress>external IP address</natAddress>

The phoneLabel parameter defines what appears in the top right hand section of the black band in the display. It makes sense that this is where you put in your external/PSTN/DID number. However there seems to be a limit of 12 characters which is not enough if you want to put an international number there with spaces like I did (as when I lived in NZ but had an Australian DID on the phone)
Note: If you enter more than 12 characters in this field, you'll get an "Error Verifying Config Info" error, and the config file will not be loaded.

<phoneLabel></phoneLabel>

The stutterMsgWaiting setting is used to determine if your phone sends a 'stutter' signal to the earpiece when the line is first taken off hook if there is voicemail waiting. Set 1 to get a stutter, set to 0 if you don't want this feature.

<stutterMsgWaiting>1</stutterMsgWaiting>

CallStats refer to if the phone feeds back call quality statistics to the SIP server when the call is terminated.

<callStats>false</callStats>

If you set the silent period to 0 (seconds) then you will only get 1 beep when the second call comes through regargless of how long the second call rings for.

<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>

These are the UDP ports that the phone expects to see RTP streams (UDP traffic) coming in and going out on. These values below are probably the defaults anyway. If you are running your phone behind a non SIP aware router you may want to narrow this range down to say 16384 and 16390, and then map UDP ports 16384 through to 16390 to your phone from the outside. This will allow your phone to receive inbound RTP voice streams. If your router is SIP aware then likely you do not need to change this from the defaults.

<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>

This is a crucial part of the config. If this is missing, your phone will complain about being "Unprovisioned" so take care with what you edit in here. While the phone is in the "Unprovisioned" state it will repeatedly download it's config file via TFTP every minute or two, so changes you make should be picked up fairly quickly. I am aware of the multiple uses of your SIP username - quite possibly some are redundant.

<sipLines>
<line
button="1">
<featureID>9</featureID>
<featureLabel>extension number</featureLabel>
<proxy>SIP proxy</proxy>
<port>5060</port>

Put your SIP username in here

<name>sip username</name>

This next line <displayName> is for the SIP request. The phone will send out whatever the value of this is in the SIP registration, so put your name. It doesn't matter too much but I believe that this name appears on the remote phone if it supports it. In my case I put <firstname> <lastname>

<displayName>Your Name (appears in SIP requests as a type of Caller Name)</displayName>

The auto answer setting can be 0, 1, 2 or 3.
0=off and locked so it can't be changed through the settings menu.
1=on and locked so it can't be changed through the settings menu.
2=off and locked so it can't be changed through the settings menu.
3=on and locked so it can't be changed through the settings menu.
None of these settings will allow you to change it through the phone's settings menu.

<autoAnswer>
<autoAnswerEnabled>2</autoAnswerEnabled>
</autoAnswer>

The call waiting setting can be 0, 1, 2 or 3.
0=off but can be changed through the settings menu.
1=on but can be changed through the settings menu.
2=off and locked so it can't be changed through the settings menu.
3=on and locked so it can't be changed through the settings menu.

<callWaiting>3</callWaiting>

SIP username and password

<authName>sip username</authName>
<authPassword>sip password</authPassword>

<sharedLine>false</sharedLine>

The messageWaitingLampPolicy values work like this:

  1. Primary Line - Light and Prompt set to 1
  2. Primary Line - Prompt Only set to 2
  3. Primary Line - Light Only set to 3
  4. Light and Prompt presumably set to 4
  5. Prompt Only presumably set to 5
  6. Light Only presumably set to 6
  7. None set to 7

'Light' is the bright red lamp on the headset
'Prompt' will show up a flashing voicemail envelope next to the Line on the RHS side of the display when there is voicemail

<messageWaitingLampPolicy>1</messageWaitingLampPolicy>
<messagesNumber>voicemail extension</messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>

And again, your username:

<contact>sip username</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
</line>

This next block of statements is to define what you do with the other line buttons on your phone. It can be used for a second SIP registration if you have a second SIP number. The second line button can also be used as a speed dial. If you have a 7961 you'll have another four of these line buttons which you can customise in the same way.

<line
button="2">
<featureID>21</featureID>
<featureLabel>speed dial name goes here</featureLabel>
<speedDialNumber>speed dial number goes in here</speedDialNumber>
</line>

Line buttons can also be configured to work similar to the servicesURL setting.

<line
button="3">
<featureID>20</featureID>
<featureLabel>service uri name goes here</featureLabel>
<serviceURI>service uri destination goes here</serviceURI>
</line>
</sipLines>

Define your dialplan in here. My dialplan basically just sets a 5 second timer after each digit before the phone starts dialing the digits already entered, but ideally you'd set this so that your most common blocks of numbers (e.g 8 digits) only had a short timer after the 8th digit so that the phone would start dialing quickly after 8 digits had been entered,

<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<dialTemplate>DRdialplan.xml</dialTemplate>
</sipProfile>

<commonProfile>
<phonePassword></phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>

This is where you put the load name of the image. Once you've decompressed the .cop file image you'll see a file like SIP41.8-2-2SR1S.loads. The name of this file is what you need to put in the config. if the phone is running a different image it should reflash itself to match the version listed here. Note - do not specify the term41.loads file, as that file is the one and only file that the phone looks for after it has been fully reset (it doesn't have a config at that stage to know what filename to load so it loads that one and then pulls the associated signed binaries in).

<loadInformation>SIP41.8-2-2SR1S</loadInformation>

<vendorConfig>

Allows you to disable the speakerphone. Why you would want to do this I'm not sure.

<disableSpeaker>false</disableSpeaker>

Disable Speaker phone and Headset:

<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>

Set to 0 to enable the PC port on the back of the phone, or 1 to disable it:

<pcPort>0</pcPort>

Toggles on and off the Settings button on the front of the phone. Useful to lock the phone config down.

<settingsAccess>1</settingsAccess>

Gratuitous ARP functionality - relates to learning MAC addresses from Gratuitous ARP responses.

<garp>0</garp>

Set this to 0 to disable access to the voice VLAN from the PC port. Note that if you run your PC on the same VLAN as the voice (if for example you are using 802.1p to do your QoS) you must set this to 1 otherwise your PC on the same VLAN won't be able to communicate if it is connected to the PC port on the back of the phone.

<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>0</autoSelectLineEnable>

EDIT >> As of SIP firmware 9.2(1) it is necessary to add the following two lines in order to ssh to the phone.

<sshAccess>0</sshAccess>
<sshPort>22</sshPort>

Defines whether you can browse to the web interface of the phone. The 7941 unlike the 7940, has a web server built in which is useful for monitoring the phone's performance. If the web interface does not seem to be working, try setting the value to 0 instead of 1 and reloading the phone. Odd, yes, but for me, setting this to 0 made the web interface visible.

<webAccess>1</webAccess>

The display settings only apply to the color screen LCD phones. They must use the same core firmware across all the new phones and just left it in for the mono screen phones. 1=Sunday, 2=Monday, 3=Tuesday, 4=Wednesday, 5=Thursday, 6=Friday and 7=Saturday. DisplayOnTime is the time of day the screen turns on. DisplayOnDuration is the length on time from the DisplayOnTime that the display will remain on. DisplayIdleTimeout is the lenght of time the display will remain on when outside the DisplayOnDuration parameter.

<daysDisplayNotActive>1,2,3,4,5,6,7</daysDisplayNotActive>
<displayOnTime>00:00</displayOnTime>
<displayOnDuration>00:00</displayOnDuration>
<displayIdleTimeout>00:00</displayIdleTimeout>
<spanToPCPort>1</spanToPCPort>
<loggingDisplay>1</loggingDisplay>
<loadServer></loadServer>
</vendorConfig>

<versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp>

Specifying the networkLocale gives me NZ tones, which makes the phone almost feel like a normal phone for the rest of the house. These networkLocale files are on CCO - look under CallManager sections for these. If you don't specify this the phone will run with the standard US default.

Setting the locale does not seem to reset the dialtone to anything local, but it does customise the ringing tone and other PSTN tones.

<networkLocale>New_Zealand</networkLocale>

<networkLocaleInfo>
<name>New_Zealand</name>
<version>5.0(2)</version>
</networkLocaleInfo>

<deviceSecurityMode>1</deviceSecurityMode>

The next few statements define various URL's - the authenticationURL is for authenticating access to the phone settings and administration. The phone will send the username/password details to this URL for authentication, and if the URL returns just the word AUTHORIZED the phone will allow the user to access the web administration. In my case I have a PHP script on my webserver called authenticate.php of which the contents look like this: <?php echo "AUTHORIZED"; ?>

<authenticationURL>http://www/ipphone/authenticate.php</authenticationURL>
<directoryURL>http://www/ipphone/directory.xml</directoryURL>
<idleURL></idleURL>
<informationURL>http://www/ipphone/GetTelecasterHelpText.jsp</informationURL>

<messagesURL></messagesURL>
<proxyServerURL>proxy:3128</proxyServerURL>
<servicesURL>http://www/ipphone/services.xml</servicesURL>

QoS stuff, but I'm not sure if this is valid for SIP or not - I suspect it is but I haven't tried it. Viewing the phone settings from the web interface suggests that it is valid for SIP.

<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>

Leave the rest of these settings alone unless you know what they do (in which case please update this document!).

<transportLayerProtocol>4</transportLayerProtocol>

4 - Use default transport protocol (in old firmwares - udp, in latest - tcp), may be this also a TLS selection?
2 - Prefer use UDP
1 - Prefer use TCP
(May be this parameter a bit mask?)

<capfAuthMode>0</capfAuthMode>
<capfList>
<capf>
<phonePort>3804</phonePort>
</capf>
</capfList>

<certHash></certHash>
<encrConfig>false</encrConfig>

</device>

Phone Firmware


The first release of code or this phone running SIP was 8.0(1). However it was never available on CCO and was only ever bundled with CUCM 5.0. The first publically downloadable release was 8.0(2). This was then followed by 8.0(2)SR1 release which fixed a few critical bugs on the phone.

For Cisco customers with a valid Cisco login and support contract - firmware files may be downloaded from http://tools.cisco.com/support/downloads/go/Model.x?mdfid=280083379&mdfLevel=Model&treeName=Voice%20and%20Unified%20Communications&modelName=Cisco%20Unified%20IP%20Phone%207941G&treeMdfId=278875240
For a list of the Firmware Changes:
http://www.cisco.com/univercd/cc/td/doc/product/voice/c_ipphon/english/ipp7961/relnotes/index.htm

If you do not have a copy of the required SIP image or you want to upgrade, then either contact your reseller who sold you the phone and ask them for a SIP image, or obtain a maintenance contract for your phone (they're only about $12/year) and download the software legally from CCO.

  • Version 8.0(2)SR1 was a good release, basic functionality of the phone all works. There are quite a few minor bugs but no showstoppers, such as slight voice clipping when the call is answered. MWI works, directories work, call quality is good.


  • Version 8.0(4)SR1 was released on 30 August 2006 is only marginally better than 8.0(3). Many many more bugs are fixed, HTTP has more information than previous releases, and personal directories work again. The cropping of characters seen when running 'show conf' from the command line is fixed.

  • Version 8.0(4)SR2 was released on 17 Jan 2007. It works for me for outbound calls, but inbound calls all fail, and my phone provider consider my phone to be "unregistered". Debugging shows that this release too, bungles the "Date:" SIP header. The HTTP server on the phone is disabled regardless of the config setting.

    • NOTE: 8.0(4)SR2 and probably early releases DO NOT work with the qualify=yes setting configured in the extension. When asterisk attempts to contact the phone to requality the phone returns an invalid SIP response and Asterisk deregisters the phone. Setting qualify=no fixes the registration problem (however the phone status is no longer monitored by asterisk).If you are having problems with registration (or calling the c79xx from Asterisk) this will likely fix your issues.

  • Version 8.0(4)SR3 was released on 20 February 2007. This release clears up several issues with the 8.0(4) series like HTTP access, transfers dropping, and hold music not working. The phone is able to register and make/receive calls, and transfer calls. The inbound call caller ID no longer contains the server IP. Unfortunately the "Date: " header on the SIP packets is still munged, and MWI is still broken.

  • Version 8.2(1) was released on December 8 2006. It worked outbound for about 18 hours, before I had two full resets in short succession. That was a bad sign. The HTTP server is now fixed. However Cisco still have not fixed the "Date:" header problem which appears to be causing my system to be knocked back on SIP registration through my IOS SIP firewall. This must certainly be an issue of RFC compliancy...

  • Version 8.2(2) was released March 27 2007. It seems to be good. Most critically, the Date: field problem is acknowledged and appears FIXED: See http://www.cisco.com/cgi-bin/Support/Bugtool/onebug.pl?bugid=CSCsg27644. My early testing is that with two SIP lines registered, calls in and out work as they should. The HTTP server does not seem to work though, and you need to rename the java file to be Jar41sip.8-2-1-19.sbn instead of just jar41sip.8-2-1-19.sbn (case sensitive), but if all else is ok then this release may possibly be a contender for a recommended release.

  • Version 8.2(2)SR1 was released March 31 2007 to fix a problem with the Call Lists being in the wrong order. Otherwise I believe it is identical to the previous release a few days earlier. Initially the HTTP server on the phone did not appear to work, but I found that if I set the <webAccess> tag to 0 instead of 1, it works. Yes, it seems back to front, I know, but that's what I had to do...

  • Version 8.2(2)SR3 was released May 22 2007 to fix a bug that the phone will fail to register if a duplicate IP is detected. It still has the same MWI 399 error as 8.2(2)SR1. The call quality is fine and the phone seems to perform exactly the same.

  • Version 8.2(2)SR4 was released June 05 2007

  • Version 8.3(1) was released June 29 2007 and introduces some new features including things like an "Intercom History" in the Directories (not sure what this does though). Most visible is the addition of a "DND" softkey on the front of the phone which is obviously a Do Not Disturb function that turns inbound calls away when activated.

  • Version 8.3(2) was released August 10 2007. Release notes state no resolved caveats however it does appear to resolve at least one problem - that with the DND button displaying an odd error when the DND function is activated via softkey. The code seems generally functional and good.

  • Version 8.3(3) was released October 24 2007. This firmware supposedly fixes a bunch more bugs, but it has a newly broken NTP implementation in it. This has now been acknowledged by Cisco, and tracked via CSCso40588. Cisco have junked the bug, and the official response is that they have tested and verified that NTP is completely broken, but will not be fixing it. If your SIP server or phone provider's system sends the Date: header in it's SIP messages, your phone will use that to sync to the correct time. If your phone does not receive this header it will display the wrong date/time, and it will refuse to sync to an NTP server. The response I have from them in writing is that the phones were designed to be used in a CallManager environment, and as CM (and I believe Asterisk) sends the Date: header, then date/time syncing to an NTP server is not important.
If like me, your VoIP provider does not send this header, you will have to downgrade to 8.3(2) in order to have NTP date/time synchronisation function.

Workaround: If you wish to reset the time, SSH to the phone and log in with user 'default' and pass 'user' and reset it with the 'date command'. The format of that command is:

    • Note: Set this to the NON DAYLIGHT SAVINGS time if you are on daylight savings, and check your phone display afterwards.
    • $ /bin/date 200711212255
    • Wed Nov 21 22:55:00 EST 2007
    • $

  • Version 8.3(3)SR2 was released November 21 2007.

  • Version 8.3(4)SR1 was released March 5 2008.

  • Version 8.3(4)SR1 was released April 30 2008. **UNTESTED**

  • Version 8.4(1) was released August 15 2008. **UNTESTED**

  • Version 8.4(1)SR1 was released September 3 2008. Apart from NTP syncronisation still being broken, this version appears to be otherwise stable. Registration and qualify=yes work correctly (tested on Asterisk 1.6). NEW: Lines and speed dials no longer have the annoying grey background, and simply overlay on the desktop now!

  • Version 8.4(3) and newer have a bug where the "dial" soft button is broken, 8.4(2) seems ok.

  • Version 8.5(2) was released June 1 2009 and the NTP synchronisation problem is now officially fixed, despite Cisco initially stating that they will not fix the bug. This release appears to be very stable and should work well for most people.

  • Version 8.5(2)SR1 was released August 17, 2009.

  • Version 8.5(3) was released October 8, 2009. This release appears to have a new problem where the phone will continue to indicate that an inbound call is "ringing", even after asterisk has stop ringing the extension.

  • Version 8.5(4) was released January 8, 2010. It's a solid all round release which appears to have no major problems. This is probably the best release to run in production right now (as of March 2010), combining features and bug fixes with no apparent regressions to previous releases. The problem with the "ringing" display in 8.5(3) is fixed. The soft dial button it still not fixed in this release, recommend you use 8.4(2) if this is important to you.

  • Version 9.0(2)SR1 was released February 18 2010. Note the new main version number of 9 which indicates some potentially major changes to the code. This release does not work at all with third party SIP servers - whether this is a bug or by design remains unknown. However the XML config files which worked with version 8.5 will load - but Wireshark traces show the phone will refuse to even attempt to register or send SIP invites out to an upstream SIP server. Until it is known why this is the case, this release is NOT recommended for production.

  • Version 9.0(3) Does in deed work with Asterisk. As of 9.X Cisco has switch to using ONLY TCP for SIP connectivity. NEW: Work with Asterisk 1.6.2.13 with TCP SIP enabled, like described lower, but "Redial" button is broken.

  • Version 9.2(1) was released May 24, 2011. Works with both TCP and UDP transports. For UDP transport set following options in SEP<MAC>.cnf.xml: <proxy>USECALLMANAGER</proxy> and <transportLayerProtocol>2</transportLayerProtocol>. For ssh to work add the following options in the <vendorConfig> section of SEP<MAC>.cnf.xml: <sshAccess>0</sshAccess> and <sshPort>22</sshPort>. Redial button works.

  • Version 9.3(1)SR2 was released Feb 14, 2013. Contains several security enhancements, A support contract is not needed to download this version, you just need a free account at Cisco.com


Enabling TCP SIP


sip.conf:

udpbindaddr=0.0.0.0
tcpenable=yes
tcpbindaddr=0.0.0.0
callcounter=yes
transport=udp, tcp

SEP<MAC>.cnf.xml:

<line button="1">
<featureID>9</featureID>
<featureLabel>Foo</featureLabel>
<proxy>USECALLMANAGER</proxy>
<port>5060</port>
<name>0308</name>

N.B. It must say _exactly_ USECALLMANAGER



Downgrading the firmware

The process for downgrading the firmware is the same for upgrading it. Simply specify the new loads file in your loadInformation tag in the .cnf.xml file.

Common problems


1. If the phone appears to be downloading but ignoring your config/changes, double check the console logs (see above for how-to steps). Usually the phone will ignore new configuration information if there is a serious parse error, such as an unclosed tag, or misspelled tag. Nab an XML editor, I recommend http://www.philo.de/xmledit/ for Windows (the first one I found, spyware free, relatively small) as it can check your code to make sure all tags are closed.

As a last resort you can do a full factory reset. Please note, the factory reset will load the term71.default.loads file from the TFTP server. This file may have been overwritten if you unzipped an older firmware package into your TFTP root. Make sure it matches the version you want to upgrade to. Note: this is not to be used routinely. This formats the onboard flash, downloads an image from your TFTP server and totally reinstalls the phone from scratch. The factory reset procedure is documented in the Cisco TAC collection: http://www.ciscotaccc.com/kaidara-advisor/voice/showcase?case=K43691258 - see the second series of keystrokes.

The process is: Remove AC power from the phone. Hold # key down. Reconnect AC power. Continue holding #. Once line buttons flash amber in sequence enter the key code: 123456789*0#. Some users have indicated that this process causes the phone to hang with the message "Upgrading". If this is the case you can try the same procedure except use the key code: 3491672850*# instead of 123456789*0#. Whatever you do, never disconnect the power while any device is updating its firmware. Or you will have a very expensive paperweight on your hands.

2. The phone will request some extra files that I have not documented, such as a CTL file. This is harmless, it is to do with security certificates which are not required. One day the configuration of those might be documented here.

3. If you're getting Unprovisioned Errors, check to make sure the phone is accepting your config files. The steps are the same as in #1.

4. If your phone is stuck on registering. You have probably used a configuration file from one of the other Wiki's, for a different line of phones. The configuration options are similar, but not exact. Your best bet is to start over from scratch and follow this Wiki step by step. Note: Older firmware versions appear to work with some of these broken configuration files. This can lead to the misconception that it is a firmware issue.

5. If you're getting registration issues yet the configuration file is being accepted, check to make sure you do NOT have NAT turned on. In Trixbox by default extensions have NAT = Yes. Change it to NAT = No. Also do not enter anything in the <sipProxies></sipProxies>.


Troubleshooting

The Cisco 79x1 phones provide a lot debug information, if you know how to get it. In addition to verbose logs and serial console ports, the phones provide SSH access to a command-line shell.

General tools available:

1. Watch your TFTP server for the files that the phone attempts to retrieve. A lot of upgrade problems are as simple as misspelled filename or improper case. If you are using Windows, I heartily recommend the tftpd32 server for this, and any other Cisco products. It is 200k, does TFTP client and server, NTP, DHCP and Syslog, which are all services your phone and other Cisco devices will use. You can get it here http://tftpd32.jounin.net/.

2. Check the phone console logs. The console logs are available three ways. If the web service is enabled on the phone you can simply browse to the phone's ip address (http://192.168.0.123) and select "console logs". If the web service is not enabled you can try logging in with SSH. The SSH username and password are configuration options in the device's XML file. After completing the SSH login you are provided with another login prompt. Entering log/log will echo the system log.

If you are unable to get into the web/ssh interface then you may access the logs through the console port (labeled Aux). This port is normally used for a sidecar row of extra buttons, but also doubles as the console port. The axillary port accepts RJ-11 terminated cables and can be plugged directly into any standard Cisco serial DB-9 adapter. Unlike other Cisco consoles, your cable does not need to be a rollover cable. The console port operates at 9600 baud, 8 data bits, no parity information, and 1 stop bit. The debug console outputs a wealth of information, including configuration parse errors, registration errors, DHCP information, etc. This takes a lot of the guess work out of fixing your configuration files.

4. Use Wireshark http://www.wireshark.org/ to find out what your phone is doing over the network. If you are attempting to register to Asterisk, turn on sip debugging on the PBX. Wireshark understands the SIP/SDP protocols and decodes all of the communication. A typical SIP registration involves a REGISTER request from the phone (without authentication information), an UNAUTHORIZED response from the SIP server, another REGISTER request (this time with authorization information: Digest username="blah",realm="blah", etc.) and a final OK response from the SIP server. Optionally the SIP server will send a request for OPTIONS challenging the phone to provide known codecs and other information. Response to this is what Asterisk uses to "qualify" the phone, when qualify=yes is present in sip.conf. It may be useful to use the filter "sip || sdp".

5. SSH access. If SSH is configured in your XML files you can connect to your phone over the SSH protocol. After entering the username/password combination from your configuration file you must enter a second username/password combo. Valid options are:
  • log/log - Displays system logs
  • debug/debug - Special debugging interface/command line
  • default/user - Basic non-root shell

Trixbox XML services


Trixbox comes with SugarCRM, a powerful directory service application that can manage contacts using PHP front end to a MySQL database. Trixbox is preinstalled with XML Services for translating this directory to various phones, including the Cisco 74xxs. You'll want to add the following URLs to the tags in your SEPXX....

<directoryURL>http://YOURTRIXBOXIP/cisco/services/PhoneDirectory.php</directoryURL>
<servicesURL>http://YOURTRIXBOXIP/services/index_cisco.php</servicesURL>

On the default Trixbox 2.0 install there is an errant code snippet that needs to be changed. In the file:xmlservices/include/xmlservices_lib.php lines 40 & 41 need to be commented out. This may still be in Trixbox 2.2 (unconfirmed).

Change:
$browser = "Aastra";
$content_format = "aastraxml";
To:
// $browser = "Aastra";
// $content_format = "aastraxml";
What they are doing is regardless of what type of browser you're accessing with to are treat it like an astra phone. Be careful, there is a $browser= "Aastra"; $content_format = "aastrxml" before lines 40 & 41. You'll need some SugarCRM contact entries to test out the system.

Once its working you'll need to edit the PHP files. By default, the XML services come preconfigged with a dial out number. Note the variable $LongDistanceExtension = "91" is the beginning of a few of the PHP files (PhoneDirectory.php, DirectoryItem.php). It makes the bold assumption to dial out, you must press 9. You'll want to change these entries to fit your dial scheme. Example: $LongDistanceExtension = "1" to remove the dial out prefix.

Also to change the order in which phone numbers are displayed per contact, edit the DirectoryItem.php and PhoneDirectory.php. below the while ($row = mysql_fetch_array($SelectPersonInfo)).

Example:
                if ($row["phone_work"]) {
                        $PersonDirectoryListing .= "<DirectoryEntry>\n";
                        $PersonDirectoryListing .= "<Name>Work:</Name>\n";
                        $PersonDirectoryListing .= "<Telephone>$WorkPhone</Telephone>\n";
                        $PersonDirectoryListing .= "</DirectoryEntry>\n";
                }
                if ($row["phone_mobile"]) {
                        $PersonDirectoryListing .= "<DirectoryEntry>\n";
                        $PersonDirectoryListing .= "<Name>Cell:</Name>\n";
                        $PersonDirectoryListing .= "<Telephone>$MobilePhone</Telephone>\n";
                        $PersonDirectoryListing .= "</DirectoryEntry>\n";

becomes

                if ($row["phone_home"]) {
                        $PersonDirectoryListing .= "<DirectoryEntry>\n";
                        $PersonDirectoryListing .= "<Name>Home:</Name>\n";
                        $PersonDirectoryListing .= "<Telephone>$HomePhone</Telephone>\n";
                        $PersonDirectoryListing .= "</DirectoryEntry>\n";
                }
                if ($row["phone_mobile"]) {
                        $PersonDirectoryListing .= "<DirectoryEntry>\n";
                        $PersonDirectoryListing .= "<Name>Cell:</Name>\n";
                        $PersonDirectoryListing .= "<Telephone>$CellPhone</Telephone>\n";
                        $PersonDirectoryListing .= "</DirectoryEntry>\n";


This will now change it so Home is displayed at the top of instead of a search.

With SugarCRM, multiple users can manage the phone directories through a webpane interface, making painless contact management for users. Its recommended that you use "accounts" as a way of classing the type of contacts in SugarCRM. Notably these steps aren't specific to the 79x1s phones (aside from the directoryURL and serviceURL tags) Cisco phones. A 7940, for example, will view the directory information the exact same.


Some tips on using this phone.


1. It's probably better to soft reset the phone rather than to pull the power out when you want to reboot it. Bootup messages show that the phone does have a writeable file system in flash, which although seems to be resilient and recovers from powering off, is probably going to be more reliable if you do the <settings> **#** sequence to soft reset it.

2. Do not attempt to set 800k images as the background on your phone especially the lower and mid end ones. I don't know how the phone would cope, it may be OK but it may also fill all flash space and crash the phone. Try at your own risk. The phone only can display files 30k or so and additionally has limited flash space, so your fancy million colour png will go to waste if you try using it as a background anyway.

The following example shows a Desktops/320x212x12/List.xml file that defines two images. The required Image and URL attributes must be included for each image. The TFTP URI that is shown in the example is the only supported method for linking to full size and thumbnail images. HTTP URL support is not provided.

List.xml Example

<CiscoIPPhoneImageList>

<ImageItem Image="TN-pic1.png"
URL="pic1.png"/>


<ImageItem Image="TN-pic2.png"
URL="pic2.png"/>

</CiscoIPPhoneImageList>


3. For a very cool feature (and this is probably not new to the 7941), browse to: http://yourIpPhoneIPAddress/CGI/Screenshot (See Also /CGI/CallInfo /CGI/LineInfo and /CGI/SettingsInfo)

4. Note that as of version 8.0(2)SR1 the phone sends UDP SIP requests from a high source port. This means that it will send from (for example) source port 50116 to SIP port 5060 on the SIP server. This is acceptable behaviour as per the SIP RFC, but it is different to the Cisco ATA and 7940 SIP software (and many but not all phones) and may have ramifications on your firewall rules if you are expecting the phone to send packets out from source port 5060 as well (as you may have with 7940 and ATAs etc). There are a few phones around which behave in the same way although most don't - this is not a cisco specific behaviour and is NOT a bug.
It seems that the phone drops all control traffic destined for it sent on any port other than port 5060 - and as per the SIP RFCs no server should ever do this anyway, but Asterisk configured with NAT=yes behind a NAT does work this way for return traffic from the server to the phone. This was a major problem as my phone service provider (who have their Asterisk server behind a NAT device) were returning traffic on high ports to my phone which it in turn dropped it. I requested them turn NAT off for my extension, and now my phone works perfectly. Ethereal analysis will show this up as return UDP traffic destined for other than port 5060, and a failure of the phone to register due to it not receiving the return messages from the server requesting the phone authenticate (or if no authentication, the phone will never see a SIP 200 OK message after registering). The problem is further complicated by SIP enabled routers, known as SIP Application Layer Gateway (ALG), under normal conditions, the router will 'smartly' alter outgoing SIP register packets by altering the port within it to match the source port of the device, so the port becomes bound to the device in NAT. So when Cisco 7961 behind a SIP-ALG NAT enabled router send a request to register from port 49521, and requests a reply to 5060, the router will replace the '5060' with '49521'. Your server will then reply to this port, despite setting nat=no, the phone will never receive the data, and will never register. Either disable the ALG in your router, use a non-SIP-ALG router, or use a different port on the server other than 5060. If you control your own asterisk, you can set your firewall to port 5060 from say, port 5061.

5. To further verify your configuration, ssh to the phone and log in with your ssh username and password as defined in your cnf.xml, then when prompted again log in as debug password debug. Type 'show conf' - you should see something like this, which is basically the running config of the phone:

Cisco 79x1 SSH example

6. This example shows a distinctiveringlist.xml file that defines two phone ring types:

<CiscoIPPhoneRingList>

<Ring>

<DisplayName>Analog 1</DisplayName>

<FileName>ringer1.pcm</FileName>

</Ring>

<Ring>

<DisplayName>Analog 2</DisplayName>

<FileName>ringer2.pcm</FileName>

</Ring>

</CiscoIPPhoneRingList>


7. The 79x1 phones support IPv6 however do not appear to function correctly if an IPv6 IP address is programmed into the handset with an IPv4 only SIP server. Typically they will start up OK and then the IPv6 configuration will become deactivated. If you do not have IPv6 connectivity to your SIP server do not specify an IPv6 address. If you do however have IPv6 connectivity upstream then please post your results here.

Sample Working Dialplan

(tested with 8.0.2 SR1, 8.2.2SR1 and SR3)

A sample dialplan and working config in file format can be found at http://www.reub.net/files/cisco-7941/SEP-my-mac.cnf.xml and http://www.reub.net/files/cisco-7941/DRdialplan.xml. Most users should start with this as their template.

Cisco 7961 with 8.3.3SR2 Configuration Examples.


After upgrading to 8.3.3SR2 if you use some of the below configurations you will find that you can no longer put any changes into the phones configurations and have them recognized.
Here is a working example for this firmware version and all previous 8.x versions:

$ASTERISK = IP Of Asterisk
$LABEL = Phone Label < 11 Characters
$EXTENSION = Extension
$PASSWORD = SIP Password

<device>
<fullConfig>true</fullConfig>
<deviceProtocol>SIP</deviceProtocol>
<sshUserId>user</sshUserId>
<sshPassword>pass</sshPassword>
<devicePool>
<name></name>
<dateTimeSetting>
<dateTemplate>M/D/YA</dateTemplate>
<timeZone>Eastern Standard/Daylight Time</timeZone>
<ntps>
<ntp>
<name>$ASTERISK</name>
<ntpMode>Unicast</ntpMode>
</ntp>
</ntps>
</dateTimeSetting>
<callManagerGroup>
<name>5.0 Beta</name>
<tftpDefault>true</tftpDefault>
<members>
<member priority="0">
<callManager>
<name>ccm-beta-5-1</name>
<description>CallManager 5.0 Beta Pub - 5.0.1.032</description>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
<mgcpPorts>
<listen>2427</listen>
<keepAlive>2428</keepAlive>
</mgcpPorts>
</ports>
<processNodeName>$ASTERISK</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
<srstInfo>
<name>Disable</name>
<srstOption>Disable</srstOption>
<userModifiable>false</userModifiable>
<ipAddr1></ipAddr1>
<port1>2000</port1>
<ipAddr2></ipAddr2>
<port2>2000</port2>
<ipAddr3></ipAddr3>
<port3>2000</port3>
<sipIpAddr1>$ASTERISK</sipIpAddr1>
<sipPort1>5060</sipPort1>
<sipIpAddr2>$ASTERISK</sipIpAddr2>
<sipPort2>5060</sipPort2>
<sipIpAddr3></sipIpAddr3>
<sipPort3>5060</sipPort3>
<isSecure>false</isSecure>
</srstInfo>
<mlppDomainId>-1</mlppDomainId>
<mlppIndicationStatus>Default</mlppIndicationStatus>
Default
<connectionMonitorDuration>120</connectionMonitorDuration>
</devicePool>
<sipProfile>
<sipProxies>
<backupProxy>$ASTERISK</backupProxy>
<backupProxyPort>5060</backupProxyPort>
<emergencyProxy>$ASTERISK</emergencyProxy>
<emergencyProxyPort>5060</emergencyProxyPort>
<outboundProxy></outboundProxy>
<outboundProxyPort>5060</outboundProxyPort>
<registerWithProxy>true</registerWithProxy>
</sipProxies>
<sipCallFeatures>
<cnfJoinEnabled>true</cnfJoinEnabled>
<callForwardURI>x-cisco-serviceuri-cfwdall</callForwardURI>
<callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
<callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
<callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
<meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
<abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
<rfc2543Hold>false</rfc2543Hold>
<callHoldRingback>2</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>2</anonymousCallBlock>
<callerIdBlocking>2</callerIdBlocking>
<dndControl>1</dndControl>
<remoteCcEnable>true</remoteCcEnable>
</sipCallFeatures>
<sipStack>
<sipInviteRetx>6</sipInviteRetx>
<sipRetx>10</sipRetx>
<timerInviteExpires>180</timerInviteExpires>
<timerRegisterExpires>3600</timerRegisterExpires>
<timerRegisterDelta>5</timerRegisterDelta>
<timerKeepAliveExpires>120</timerKeepAliveExpires>
<timerSubscribeExpires>120</timerSubscribeExpires>
<timerSubscribeDelta>5</timerSubscribeDelta>
<timerT1>500</timerT1>
<timerT2>4000</timerT2>
<maxRedirects>70</maxRedirects>
<remotePartyID>true</remotePartyID>
<userInfo>None</userInfo>
</sipStack>
<autoAnswerTimer>1</autoAnswerTimer>
<autoAnswerAltBehavior>false</autoAnswerAltBehavior>
<autoAnswerOverride>true</autoAnswerOverride>
<transferOnhookEnabled>false</transferOnhookEnabled>
<enableVad>false</enableVad>
g711ulaw
<dtmfAvtPayload>101</dtmfAvtPayload>
<dtmfDbLevel>3</dtmfDbLevel>
<dtmfOutofBand>avt</dtmfOutofBand>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
<kpml>3</kpml>
<phoneLabel>$LABEL</phoneLabel>
<stutterMsgWaiting>2</stutterMsgWaiting>
<callStats>false</callStats>
<offhookToFirstDigitTimer>15000</offhookToFirstDigitTimer>
<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>
<sipLines>
<line button="1">
<featureID>9</featureID>
<featureLabel>$EXTENSION</featureLabel>
<proxy>$ASTERISK</proxy>
<port>5060</port>
<name>$EXTENSION</name>
<displayName>$EXTENSION</displayName>
<autoAnswer>
<autoAnswerEnabled>2</autoAnswerEnabled>
</autoAnswer>
<callWaiting>3</callWaiting>
<authName>$EXTENSION</authName>
<authPassword>$PASSWORD</authPassword>
<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>1</messageWaitingLampPolicy>
<messagesNumber>*97</messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<contact>$EXTENSION</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
</line>
</sipLines>
<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<dialTemplate>dialplan.xml</dialTemplate>
<softKeyFile></softKeyFile>
</sipProfile>
<commonProfile>
<phonePassword></phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<loadInformation>SIP41.8-3-3SR2S</loadInformation>
<vendorConfig>
<disableSpeaker>false</disableSpeaker>
<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
<pcPort>0</pcPort>
<settingsAccess>1</settingsAccess>
<garp>0</garp>
<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>0</autoSelectLineEnable>
<webAccess>0</webAccess>
<daysDisplayNotActive>1,7</daysDisplayNotActive>
<displayOnTime>08:00</displayOnTime>
<displayOnDuration>10:30</displayOnDuration>
<displayIdleTimeout>01:00</displayIdleTimeout>
<spanToPCPort>1</spanToPCPort>
</vendorConfig>
<versionStamp></versionStamp>
<userLocale>
<name></name>
<uid></uid>
<langCode>en_US</langCode>
<version></version>
<winCharSet></winCharSet>
</userLocale>
<networkLocale></networkLocale>
<networkLocaleInfo>
<name></name>
<uid></uid>
<version>1.0.0.0-1</version>
</networkLocaleInfo>
<deviceSecurityMode>1</deviceSecurityMode>
<idleTimeout>0</idleTimeout>
<authenticationURL></authenticationURL>
<directoryURL></directoryURL>
<idleURL></idleURL>
<informationURL></informationURL>
<messagesURL></messagesURL>
<proxyServerURL></proxyServerURL>
<servicesURL>http://$ASTERISK/directory/directory.xml</servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>4</transportLayerProtocol>
<capfAuthMode>0</capfAuthMode>
<capfList>
<capf>
<phonePort>3804</phonePort>
<processNodeName>ccm-beta-5-1</processNodeName>
</capf>
</capfList>
<certHash></certHash>
<encrConfig>false</encrConfig>
</device>


SoftKey Example


After doing a lot of digging I came across some info on the soft key file.
Here is what I have so far. I have not found out anything on blind transfers.

<softKeyCfg>
<versionStamp>11cdf71b-e9bc-4559-be88-94a266766601</versionStamp>
<typeSoftKey>
<softKeyDef keyID="Redial">
<tag>1</tag>
<eventID>1</eventID>
<helpID>301</helpID>
</softKeyDef>
<softKeyDef keyID="NewCall">
<tag>2</tag>
<eventID>2</eventID>
<helpID>302</helpID>
</softKeyDef>
<softKeyDef keyID="Hold">
<tag>3</tag>
<eventID>3</eventID>
<helpID>303</helpID>
</softKeyDef>
<softKeyDef keyID="Trnsfer">
<tag>4</tag>
<eventID>4</eventID>
<helpID>304</helpID>
</softKeyDef>
<softKeyDef keyID="CfwdAll">
<tag>5</tag>
<eventID>5</eventID>
<helpID>305</helpID>
</softKeyDef>
<softKeyDef keyID="CfwdBusy">
<tag>6</tag>
<eventID>6</eventID>
<helpID>306</helpID>
</softKeyDef>
<softKeyDef keyID="CfwdNoAnswer">
<tag>7</tag>
<eventID>7</eventID>
<helpID>307</helpID>
</softKeyDef>

// back
<softKeyDef keyID="&lt;&lt;">
<tag>8</tag>
<eventID>8</eventID>
<helpID>308</helpID>
</softKeyDef>
<softKeyDef keyID="EndCall">
<tag>9</tag>
<eventID>9</eventID>
<helpID>309</helpID>
</softKeyDef>
<softKeyDef keyID="Resume">
<tag>10</tag>
<eventID>10</eventID>
<helpID>310</helpID>
</softKeyDef>
<softKeyDef keyID="Answer">
<tag>11</tag>
<eventID>11</eventID>
<helpID>311</helpID>
</softKeyDef>
<softKeyDef keyID="Info">
<tag>12</tag>
<eventID>12</eventID>
<helpID>312</helpID>
</softKeyDef>
<softKeyDef keyID="Confrn">
<tag>13</tag>
<eventID>13</eventID>
<helpID>313</helpID>
</softKeyDef>
<softKeyDef keyID="Park">
<tag>14</tag>
<eventID>14</eventID>
<helpID>314</helpID>
</softKeyDef>
<softKeyDef keyID="Join">
<tag>15</tag>
<eventID>15</eventID>
<helpID>315</helpID>
</softKeyDef>
<softKeyDef keyID="MeetMe">
<tag>16</tag>
<eventID>16</eventID>
<helpID>316</helpID>
</softKeyDef>
<softKeyDef keyID="PickUp">
<tag>17</tag>
<eventID>17</eventID>
<helpID>317</helpID>
</softKeyDef>
<softKeyDef keyID="GPickUp">
<tag>18</tag>
<eventID>18</eventID>
<helpID>318</helpID>
</softKeyDef>
// remove last conference party
<softKeyDef keyID="RmLstC">
<tag>57</tag>
<eventID>19</eventID>
<helpID>319</helpID>
</softKeyDef>
<softKeyDef keyID="Barge">
<tag>67</tag>
<eventID>21</eventID>
<helpID>321</helpID>
</softKeyDef>
<softKeyDef keyID="DirTrfr">
<tag>77</tag>
<eventID>28</eventID>
<helpID>328</helpID>
</softKeyDef>
<softKeyDef keyID="Select">
<tag>78</tag>
<eventID>29</eventID>
<helpID>329</helpID>
</softKeyDef>
<softKeyDef keyID="ConfList">
<tag>79</tag>
<eventID>30</eventID>
<helpID>330</helpID>
</softKeyDef>
<softKeyDef keyID="VidMode">
<tag>88</tag>
<eventID>33</eventID>
<helpID>333</helpID>
</softKeyDef>
<softKeyDef keyID="ImmDiv">
<tag>59</tag>
<eventID>65</eventID>
<helpID>365</helpID>
</softKeyDef>
<softKeyDef keyID="Intrcpt">
<tag>60</tag>
<eventID>66</eventID>
<helpID>366</helpID>
</softKeyDef>
<softKeyDef keyID="SetWtch">
<tag>61</tag>
<eventID>67</eventID>
<helpID>367</helpID>
</softKeyDef>
<softKeyDef keyID="TrnsfVM">
<tag>62</tag>
<eventID>68</eventID>
<helpID>368</helpID>
</softKeyDef>
<softKeyDef keyID="DND">
<tag>63</tag>
<eventID>69</eventID>
<helpID>369</helpID>
</softKeyDef>
<softKeyDef keyID="DivAll">
<tag>64</tag>
<eventID>70</eventID>
<helpID>370</helpID>
</softKeyDef>
</typeSoftKey>
<softKeySets>
<softKeySet id="On Hook">
<softKey keyID="Redial"></softKey>
<softKey keyID="NewCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="DND"></softKey>
<softKey keyID="CfwdAll"></softKey>
<softKey keyID="DivAll"></softKey>
<softKey keyID="SetWtch"></softKey>
</softKeySet>
<softKeySet id="Connected">
<softKey keyID="Hold"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="ImmDiv"></softKey>
<softKey keyID="Confrn"></softKey>
<softKey keyID="ConfList"></softKey>
<softKey keyID="Trnsfer"></softKey>
<softKey keyID="TrnsfVM"></softKey>
<softKey keyID="DND"></softKey>
<softKey keyID="Select"></softKey>
<softKey keyID="Join"></softKey>
<softKey keyID="DirTrfr"></softKey>
<softKey keyID="RmLstC"></softKey>
<softKey keyID="Park"></softKey>
<softKey keyID="DivAll"></softKey>
<softKey keyID="SetWtch"></softKey>
</softKeySet>
<softKeySet id="On Hold">
<softKey keyID="Resume"></softKey>
<softKey keyID="NewCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="TrnsfVM"></softKey>
<softKey keyID="ImmDiv"></softKey>
<softKey keyID="DND"></softKey>
<softKey keyID="Select"></softKey>
<softKey keyID="Join"></softKey>
<softKey keyID="DirTrfr"></softKey>
<softKey keyID="SetWtch"></softKey>
</softKeySet>
<softKeySet id="Ring In">
<softKey keyID="Answer"></softKey>
<softKey keyID="ImmDiv"></softKey>
<softKey keyID="CfwdBusy"></softKey>
<softKey keyID="TrnsfVM"></softKey>
<softKey keyID="DivAll"></softKey>
<softKey keyID="DND"></softKey>
<softKey keyID="SetWtch"></softKey>
</softKeySet>
<softKeySet id="Off Hook">
<softKey keyID="Redial"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="PickUp"></softKey>
<softKey keyID="GPickUp"></softKey>
<softKey keyID="CfwdAll"></softKey>
<softKey keyID="MeetMe"></softKey>
</softKeySet>
<softKeySet id="Connected Transfer">
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Trnsfer"></softKey>
</softKeySet>
<softKeySet id="Digits After First">
<softKey keyID="&lt;&lt;"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
</softKeySet>
<softKeySet id="Connected Conference">
<softKey keyID="Intrcpt"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Confrn"></softKey>
</softKeySet>
<softKeySet id="Ring Out">
<softKey keyID="EndCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
</softKeySet>
<softKeySet id="Off Hook With Feature">
<softKey keyID="Redial"></softKey>
<softKey keyID="EndCall"></softKey>
<softKey keyID="Intrcpt"></softKey>
</softKeySet>
<softKeySet id="Remote In Use">
<softKey keyID="Barge"></softKey>
<softKey keyID="NewCall"></softKey>
<softKey keyID="cBarge"></softKey>
</softKeySet>
</softKeySets>
</softKeyCfg>

Cisco 7911G firmware 8.4.1 SR1S configuration example



<device xsi:type="axl:XIPPhone" ctiid="1566023366">
<deviceProtocol>SIP</deviceProtocol>
<sshUserId>cisco</sshUserId>
<sshPassword>cisco</sshPassword>
<devicePool>
<dateTimeSetting>
<dateTemplate>D-M-YA</dateTemplate>
<timeZone>UTC Standard/Daylight Time</timeZone>
</dateTimeSetting>
<callManagerGroup>
<members>
<member priority="0">
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName>10.10.1.1</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</devicePool>
<sipProfile>
<sipProxies>
<backupProxy></backupProxy>
<backupProxyPort></backupProxyPort>
<emergencyProxy></emergencyProxy>
<emergencyProxyPort></emergencyProxyPort>
<outboundProxy></outboundProxy>
<outboundProxyPort></outboundProxyPort>
<registerWithProxy>true</registerWithProxy>
</sipProxies>
<sipCallFeatures>
<cnfJoinEnabled>true</cnfJoinEnabled>
<callForwardURI>x--serviceuri-cfwdall</callForwardURI>
<callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
<callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
<callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
<meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
<abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
<rfc2543Hold>false</rfc2543Hold>
<callHoldRingback>2</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>2</anonymousCallBlock>
<callerIdBlocking>2</callerIdBlocking>
<dndControl>0</dndControl>
<remoteCcEnable>true</remoteCcEnable>
</sipCallFeatures>
<sipStack>
<sipInviteRetx>6</sipInviteRetx>
<sipRetx>10</sipRetx>
<timerInviteExpires>180</timerInviteExpires>
<timerRegisterExpires>3600</timerRegisterExpires>
<timerRegisterDelta>5</timerRegisterDelta>
<timerKeepAliveExpires>120</timerKeepAliveExpires>
<timerSubscribeExpires>120</timerSubscribeExpires>
<timerSubscribeDelta>5</timerSubscribeDelta>
<timerT1>500</timerT1>
<timerT2>4000</timerT2>
<maxRedirects>70</maxRedirects>
<remotePartyID>false</remotePartyID>
<userInfo>None</userInfo>
</sipStack>
<autoAnswerTimer>1</autoAnswerTimer>
<autoAnswerAltBehavior>false</autoAnswerAltBehavior>
<autoAnswerOverride>true</autoAnswerOverride>
<transferOnhookEnabled>false</transferOnhookEnabled>
<enableVad>false</enableVad>
<dtmfAvtPayload>101</dtmfAvtPayload>
<dtmfDbLevel>3</dtmfDbLevel>
<dtmfOutofBand>avt</dtmfOutofBand>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
<kpml>3</kpml>
<phoneLabel>1109</phoneLabel>
<stutterMsgWaiting>1</stutterMsgWaiting>
<callStats>false</callStats>
<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>
<sipLines>
<line
button="1">
<featureID>9</featureID>
<featureLabel>Asterisk</featureLabel>
<proxy>10.10.1.1</proxy>
<port>5060</port>
<name>1109</name>

<displayName>Francisco</displayName>
<autoAnswer>
<autoAnswerEnabled>2</autoAnswerEnabled>
</autoAnswer>
<callWaiting>3</callWaiting>
<authName>1109</authName>
<authPassword>1000</authPassword>

<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>1</messageWaitingLampPolicy>
<messagesNumber>700</messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<contact>1109</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
</line>
<line
button="2">
<featureID>21</featureID>
<featureLabel>speed dial name goes here</featureLabel>
<speedDialNumber>speed dial actual number goes in here</speedDialNumber>
</line>
</sipLines>
<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<dialTemplate>dialplan.xml</dialTemplate>
</sipProfile>
<commonProfile>
<phonePassword></phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<loadInformation>SIP11.8-4-1SR1S</loadInformation>

<vendorConfig>
<disableSpeaker>false</disableSpeaker>
<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
<pcPort>0</pcPort>
<settingsAccess>1</settingsAccess>
<garp>0</garp>
<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>0</autoSelectLineEnable>
<webAccess>1</webAccess>
<daysDisplayNotActive>1,2,3,4,5,6,7</daysDisplayNotActive>
<displayOnTime>00:00</displayOnTime>
<displayOnDuration>00:00</displayOnDuration>
<displayIdleTimeout>00:00</displayIdleTimeout>
<spanToPCPort>1</spanToPCPort>
<loggingDisplay>1</loggingDisplay>
<loadServer></loadServer>
</vendorConfig>
<versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp>
<networkLocale>New_Zealand</networkLocale>

<networkLocaleInfo>
<name>New_Zealand</name>
<version>5.0(2)</version>
</networkLocaleInfo>

<deviceSecurityMode>1</deviceSecurityMode>
<authenticationURL>http://www/ipphone/authenticate.php</authenticationURL>
<directoryURL>http://www/ipphone/directory.xml</directoryURL>
<idleURL></idleURL>
<informationURL>http://www/ipphone/GetTelecasterHelpText.jsp</informationURL>
<messagesURL></messagesURL>
<proxyServerURL>proxy:3128</proxyServerURL>
<servicesURL>http://www/ipphone/services.xml</servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>4</transportLayerProtocol>
<capfAuthMode>0</capfAuthMode>
<capfList>
<capf>
<phonePort>3804</phonePort>
</capf>
</capfList>

<certHash></certHash>
<encrConfig>false</encrConfig>

</device>


View count: 630436

Created by: reuben, Last modification: Sun 20 of Jul, 2014 (20:36 UTC) by crothe
Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - Find us on Google+