Computer :(


Polycom IP 501 on fedora talk

So the FAD was epically awesome, and Paul sent us all home with gadgets :) This was the toy that I wanted the router bridge set up for; the bridge worked wonderfully after reviving the not dead(1) linksys WRT54Gv5 and putting dd-wrt micro on it. Anyways, yes, SIP Phones for all! And real cool ones at that. I got a Polycom IP 501:

[![Polycom IP 501 SIP Phone](4449476720_0869fc98be_b.jpg)](

It's a nice, extremely hackable phone, and works wonderfully with Fedora Talk. I guess I have to add some stickers to it too :)

(1): I told konqueror to remember the wrong password and username combo and for whatever reason the router never spit out a 403 forbidden, leading me to believe it was dead. oops!

1 Two Configuration Methods to Rule Them All

The phone is primarily designed to be used in corporate environments, and judging by the main configuration methods, this is (sometimes painfully) clear. You can choose between either setting it up via web gui or by hacking the configuration files and setting up a boot server

1.1 WebGUI is fun, i guess

I started off trying to configure this bad boy using the Web GUI since it came with the SIP application preinstalled into the OS (more on that below).


The Web UI is pretty nice, if a little unwieldy. I noticed that it takes about two minutes after the phone boots (that is strange to say :) ) for the Web UI to start up and become accessible. At this point, I put in all of the details taken from the fedora talk setup pages, and put them into the forms:



This mostlyworked. I was able to place outgoing calls, but the phone refused to register with Fedora Talk, and I appeared as Unavailable to everyone. :(


At this point, after trying for a while to make the WebUI bend to my will, I gave up and decided to wipe to Factory Defaults. Unfortunately, I didn't realize how this would effect my phone: without a boot server, the phone was at that point a fancy paper weight. FAIL. So, it was time to learn how to set up a bootserver using tftp, which wasn't that hard as it turns out…. You have to, of course, find the boot rom and applications on the Polycom website, which was a fun task. You'll want to download "[[ IP and SoundStation IP SIP 3.1.6 Legacy [Combined]]]" then run

yum install tftp-server
chkconfig tftp on
mkdir tmp && cd tmp
unzip ../
cp -rf * /var/lib/tftpboot
cd ../ && rm -rf tmp

At this point, you have a working TFTP boot server. congratulations! When you boot your phone, before it has the chance to autostart, jump to the setup dialog and enter the default password (456). At this point, you can set up its network settings; i left DHCP stuff and the IP Gateway alone, but on the Server menu, you'll want to set the Type to Trivial FTP, and the Server Address to the address of, you guessed it, your server! Leave username and password blank. Now allow it to boot, it should load and install the application, and spit you out at an…. unconfigured phone! yay! Wait, what?

1.3 The config files from the deep

In the root of your tftp are a number of config files… The design of the entire system was to allow the config files to cascade to make it easier for enterprise deployment. This is cool and all but…. :)

  • FlashROM config
  • <MAC-address>.cfg
  • 000000000000.cfg
  • phone1316.cfg
  • sip316.cfg

That's a lot of config files. So, I basically did all the configuration in sip316.cfg and 000000000000.cfg which is recommended against in case you ever update your bootrom. Oh well, I don't. :) So I just tinkered with sip316.cfg and phone1316.cfg…. Basically, these are GARGANTUAN xml files describing everything from the SIP login details, to the frequency of the dial tone, to the shading of the buttons. omg. I'll just point you in the right direction in these files, but you can pretty much do anything you want with them just by looking at the various entries' names.

phone1316.cfg contains the server details in phone1->reg->reg.1.*:

<reg reg.1.displayName="Fedora Talk" reg.1.address="" reg.1.label="ftalk" reg.1.type="private" reg.1.lcs="" reg.1. csta="" reg.1.thirdPartyName="Ryan Rix" reg.1.auth.userId="rrix" reg.1.auth.password="$WITHHELD$" reg.1.auth.optimizedInFailover="" reg.1. musicOnHold.uri="" reg.1.server.1.address="" reg.1.server.1.port="5060" reg.1.server.1.transport="DNSnaptr" reg.1.server.2. transport="DNSnaptr" reg.1.server.1.expires="" reg.1.server.1.expires.overlap="" reg.1.server.1.register="1" reg.1.server.1.retryTimeOut="5" reg.1. server.1.retryMaxCount="5" reg.1.server.1.expires.lineSeize="" reg.1.server.1.lcs="" reg.1.outboundProxy.address="" reg.1. outboundProxy.port="5060" reg.1.outboundProxy.transport="DNSnaptr" reg.1.acd-login-logout="0" reg.1.acd-agent-available="0" reg.1.proxyRequire="" reg.1.ringType="2" reg.1.lineKeys="3" reg.1.callsPerLineKey="1" reg.1.bargeInEnabled="" reg.1.serverFeatureControl.dnd="""" reg.1.strictLineSeize="" reg.1.tcpFastFailover=""/>

Which leaves us with:

  • displayName can be whatever you want
  • address is
  • label can be whatever you want, it's what is displayed on the phone
  • thirdPartyName is what appears to other users when you call them
  • auth.userId is fasusername
  • auth.password is the VoIP Password, NOT your FAS password.
  • server.1.address is
  • server.1.port is 5060
  • outboundProxy is 5060

I deleted the config details for server.2. and server.3. since they didn't matter to me.

Then in sip316.cfg I enabled SNTP support so that the time was correct…

<SNTP tcpIpApp.sntp.resyncPeriod="86400" tcpIpApp.sntp.address="" tcpIpApp.sntp.address.overrideDHCP="0" tcpIpApp.sntp. gmtOffset="-7.0" tcpIpApp.sntp.
gmtOffset.overrideDHCP="0" tcpIpApp.sntp.daylightSavings.enable="1" tcpIpApp.sntp.daylightSavings.fixedDayEnable="0" tcpIpApp.sntp.daylightSavings.start.month="3""8" tcpIpApp.sntp.daylightSavings.start.time="2" tcpIpApp. sntp.daylightSavings.start.dayOfWeek="1" tcpIpApp.sntp.daylightSavings.start.dayOfWeek.lastInMonth="0" tcpIpApp.sntp.daylightSavings.stop.month="11""1" tcpIpApp.sntp.daylightSavings.stop.time="2" tcpIpApp.sntp.daylightSavings.stop.dayOfWeek="1" tcpIpApp. sntp.daylightSavings.stop.dayOfWeek.lastInMonth="0"/>

address is the address of the NTP server you want to use. I left the rest of it alone.

1.4 A few final words

I suppose that the way I did this (with a TFTP boot server to configure the phone) was overly complicated in the long run, it gave me a huge amount of control over what I could do with the device. Digging into the phone will be fun; it looks like the main sip application is a Java applet with the source code included. Sweet, if only I enjoyed hacking Java :)

I'll enjoy hacking some of the other parts of this phone, and will detail them when I do… I plan on adding a Fedora background image to the phone's display, for one, and possibly a page for the microbrowser which can query FAS for extensions. More on that later, though :)

In the mean time, I've cooked up a little script to general the XML dictionary files used as the Address Book within these phones. After you edit the file to add your FAS account information and the list of folks you want to be in the book, it will spit out a 000000000000-directory.xml, which you should copy to the root of your tftp server and rename it to match your phone's mac address (available from menu->status->ethernet).

More later!