I am using the Apple iPod Touch (4th Generation) running iOS 4.2.1. To keep things on the same playing field, I am running CUCM 7.1(3b)SU2. The CUCM cluster is integrated with LDAP for directory synchronization and authentication.
I am using version 188.8.131.52 of the Media5-fone client with the Telephony Pack option enabled. Note that version 2.7 of the Media5-fone client for iPhone/iPod Touch/iPad was recently released. It includes some bug fixes, improvements to battery efficiency (which is definitely needed based on my experience with 2.6), SRTP support, and other improvements.
To save readers the time of going back to the other blogs on SIP clients, I will repeat the CUCM configuration steps here.
I like to get the station configured in CUCM before I start playing around with the client. In CUCM you will need to create a SIP device and a user object. You will need to make some associations between the two and perform some other ancillary activities in preparation.
Add a SIP Security Profile
I suppose you could consider this an optional step if you don’t mind SIP endpoints just registering to your CUCM cluster without a password. I do mind this, so we are going to create a SIP security profile that forces the use of Digest Authentication. If you go with the standard SIP security profile, digest authentication is not used. This means that a client can connect by simply providing the extension number and a user ID.
Connect to your CUCM server (http://mycucm/ccmadmin) and go to System->Security Profile->Phone Security Profile. Search for profiles that contain the string “third-party” and copy the profile named “Third-party SIP Device (Basic) – Standard SIP Non-Secure Profile”. Configure the new profile as follows:
Save your settings.
Add the User
Go to User Management->End User. You can add a new user or use an existing user. You can also use a user that was replicated from LDAP using the DirSync service. The information you need to configure (values shown are used in our example):
- User ID: mysipuser
- Password: (this is not used by Media5, but you should always have one)
- PIN: (this is not used by Media5, but … you get the idea)
- Last Name: Bell
- First Name: Bill
- Digest Credentials: ******* (this is used by Media5!)
Click on Save. We will come back to the user object in a moment.
Add the SIP Phone
Go to Device->Phone. Click on Add and select “Third-Party SIP Device (Basic)”. At a minimum, you should configure the following settings (values shown are used in our example):
- MAC Address: DEADBEEF0000 (set it to something unique, it doesn’t matter to Media5)
- Description: Testing My Media5-fone (set it to something meaningful to you, it doesn’t matter to Media5)
- Device Pool: HQ_User-SoftPhone_CSS (You should use a device pool that makes sense in your environment. I like to stick my softphones in a separate bucket.
- Calling Search Space: HQ_User-Std_CSS (this should be a CSS that fits into your dial plan, just like a standard Cisco SCCP station)
- Device Security Profile: Third-party SIP Device (Basic) – Digest Required
- Owner User ID: mysipuser
- Digest User ID: mysipuser
Click on Save. After saving the phone, you can add an extension. Add the extension as you normally would. The bare minimum settings I used for testing:
- Directory Number: 9165551234 (I use 10d extensions)
- Partition: CL_DN-1_PT (place the DN in your “phones” partition)
- CSS: Apply line level CSS per your design
- Voicemail Profile: Use the VM profile that you normally would
- Call Forwarding: Configure Call Forwarding as you would normally, for example CFNA and CFB to voicemail
- Display and Alerting: Configure these as you would like
Click on Save.
Edit User Object
Now go back to the user you are assigning this soft phone to (e.g. mysipuser ). Edit the user object. Go to Device Associations and associate the device you just created.
Click on Save.
I’ll assume that the reader is quite capable of installing an application on their iPhone/iPod Touch. The Media5 application is available from the App Store. After installing the Media5 client, you should see it displayed on your iDevice.
Media5 is a free application, however I recommend purchasing the optional Telephony Pack for 99 cents. You can purchase the optional package by loading the Media5 application and choosing More>Feature Purchases.
After loading the Medi5 client you will need to add and configure an account before the client can register to CUCM. Select the More option at the bottom of the screen. You will see several options, select Settings and then Configure SIP Accounts. You can add a SIP account using the “+” sign in the top-right corner. If you already have a SIP account configured and want to reconfigure it then you can select the arrow next to the account name.
At the main configuration screen for the SIP account (above, bottom-right) you can configure the following options:
- Title: This is just a description field so the value isn’t important
- Username: Set this to the directory number you assigned to the line in CUCM
- Password: Set this to the MD-5 Digest you assigned to the end user in CUCM
Next, select Servers to specify what CUCM node the client should use for registration.
In the Address field enter the IP address or hostname for your CUCM node and leave the Port setting at the default (5060). Media5 will use UDP as the transport. Select Done once you have finished updating the server address.
Next, select Advanced to specify account settings.
At a minimum, configure the following:
- Display Name: This is the display name sent in SIP messages to CUCM
- Auth. Name: This is the CUCM end user’s user ID
- VM Number: If you have a voice mail box assigned to the line add the DN here
It is worth noting that the “Display Name” won’t actually control what is displayed as the calling line ID on a remote (called) phone. This is controlled via CUCM line level configurations. You will see “Display Name” presented in traces on CUCM or Media5, as well as any protocol analyzer traces.
Once you modify your advanced account settings, select Done to go back to the main account screen. Select Done again to save the account configurations. The client will immediately attempt to register. If you register successfully, you will see a message box informing you that all is well and asking you if you want to add options (nice). If registration fails you will receive a generic error message.
One of the nifty features with this client is that it maintains a local log of SIP messages that you can use to troubleshoot registration or call issues. You can access the SIP traces from the More configuration menu. The interface for viewing traces is rather intuitive. However, be prepared to do the ol’ finger scroll to infinity as I didn’t see a search facility.
Testing the Application
I performed basic call testing just to get a feel for how usable the Media5 client is. I found that I definitely like the client interface. There are a few “quirks” and some minor annoyances. I am not making recommendations in this blog series on whether a particular client should be deployed or not. This is simply a “how-to” guide. The only advice I offer is make sure you test any software out before production use.
With that being said, let’s take a tour of the features by stepping through the main client functions.
The Media5 client includes a native “directory” for showing calls that were dialed, missed, or received. This is identical to the functionality seen on a standard Cisco IP phone. The entries are typically stored by the calling name presentation. There doesn’t appear to be a facility for displaying presence status (i.e. BLF for directories) information. The following screen shots provide examples.
Note on BLF: While I didn't see a way for Media5-fone to present presence status, a Cisco phone will
properly present the line status of the Media5-fone.
Media5 can store contacts locally. This feature does not leverage the Corporate Directory functionality on CUCM, nor does it leverage a LDAP repository. Given that this client is not a Cisco client I can certainly understand why it would not integrate with CUCM’s Corporate Directory. However, I think that adding a LDAP client for name/number searches would be an excellent feature.
To add to the contacts list, the user can select a call from one of the call lists (“Recents”) and then choose to add the number to the contact list. Once added, the contact can be edited to include other information. You can also add a new contact from the Dial interface.
In my opinion, there are several caveats with this feature:
- A hyphen is automatically inserting in the number. This is an aesthetic issue and not really all that important. However, when I am adding an abbreviated extension I would expect that either (a) no hyphen is used or (b) the hyphens are inserted from right to left, instead of the opposite direction. IOW, 4-3807 makes more sense to me.
- There is no facility for deleting a contact. You can delete a number assigned to a contact, but I didn’t see a straight-forward way to simply wipe the contact from the contact list.
There are also several problems with navigation as one tries to manage contacts. For example, when I added a number from a call list to an existing contact the contact is displayed on the screen with the new number. Great! Except that I don’t have navigation buttons to go back to the call lists. The screen appears “stuck”. I did find that pressing “Recents” twice does the trick. I also found that trying to edit a contact to change a label on an existing number is also less than intuitive because navigation buttons (like “save” for example) are non-existent.
Favorites is a feature that is related to call lists (“Recents”) and contact lists from an end user perspective. With favorites, a user can add custom speed dials which can come in handy. Only existing contacts can be added to the favorites list. This is like Personal Address book and Fast Dials in the CUCM world. Though, it is more intuitive than that. To access Favorites, choose More and then select favorites from the feature list.
You can assign a favorite by picking a slot that is open (“+”). You will see a list of contacts to choose from. You will also need to select the number you want to assign to the speed dial slot, even if there is only one number assigned to the contact. If you want to delete a favorite then select Edit from the Favorites list and select the entry you want to delete.
The only problems I found with this feature are mostly aesthetic in nature. First, if you had a list of three entries, and you delete the second one, it would be nice if the entries “slid” into position to fill the gap. This isn’t a big deal really and is just a nit of mine.
The second issue I came across is that an entry in Favorites is not linked, in any way, the actual contact used to create the entry. In other words, if I were to change a contact phone number or label assigned to a phone number, those changes are not cascaded to the Favorite’s entry.
It is a phone application and it comes with its own dial pad. I didn’t test this on an iPhone, so I am not sure if Media5 would use the iPhone native dialer or not. On the iPod Touch, the dialer is simple, clean, and intuitive.
As noted earlier, one can use the dialer to create a contact. The interface is a little awkward, but I like the idea. You basically would use the dialer to enter a number and instead of hitting the “dial” button (represented by the green phone icon) you can select the “Add Contact” button which sits under asterisk (*) and to the left of the “dial” button.
It is also worth noting that one can enter a SIP URI from the dial pad. Simply touch the keyboard icon above the number “3”.
The Media5 client includes a special view where one can see messages in voicemail and quick dial the voicemail pilot number. Recall that the voicemail pilot number is programmed into the Media5 client via the Advanced SIP account settings.
I found that the Connect to voicemail button works as expected. I also found that when there is a voicemail message a little red ball hovers above the Voicemail button at the bottom of the client screen. I did encounter an odd issue. You will notice in the above screen shot that the Media5 client thinks I have 4,294,967,295 messages. This is inaccurate as I am clearly not this popular. This issue is easily repeatable and the number is always the same. In traces the only message sent to the station from CUCM is a SIP Notify that indicates that new voice messages are waiting. This could be a flaw in my setup and I do plan on revisiting this “caveat”.
The Media5 client interface for managing calls that in process is very intuitive. When a call (other than voicemail) is connected, the in-call features are presented on screen as shown below.
Mute operates as one would expect. When pressing mute, RTP packets are still sent to the far-end.
Keypad rotates the screen to the DTMF keypad if the user needs to send DTMF digits to the far-end.
Speaker is, well, what do you think? I will note here that audio quality in my testing was excellent. So, the software doesn’t introduce any audio issues.
Transfer is supposed to allow the user to transfer an active call to another extension. I wasn’t able to get this feature to work with my CUCM setup. The Media5 client is attempting a “blind” or non-consultative transfer. CUCM supports blind transfer from SIP clients using the Invite or Refer method with a “replaces” header. From a sniffer trace it appears that Media5 is using a refer method and does include the replaces header. I have tried various configurations and have marked this as something to come back to when time permits. NOTE: a consultative transfer is possible via the “2nd call” feature.
2nd Call is a nifty way for the caller to place the existing call on-hold and call another party. There are several follow on features. When you first select “2nd call” the dial pad is presented to you. You can enter the phone number and click Dial. You can also use the “Recents”, “Contacts”, or “Favorites” list to call the second party.
When you have two call sessions established a screen similar to the following is provided:
In this example, Bart Simpson is the active call and x43807 is placed on hold. The user can touch 43807 to make it the active call (placing Bart on hold) or they can touch the “Swap” button to switch between the active and held calls. A three-way conference can be established by selecting the “Merge” option.
In the above screenshot you can see that a 3-way call is underway. Both calls are listed as active and you have a “Split” option. The “Split” option will tear down the 3-way call, preserve both calls, and make one call active (the other is placed on hold).
The Media5 user has another option when tearing down the 3-way call. They can exit the call themselves and let the other two parties continue the conversation. To do this, the user would establish the 3-way call and then select End Call. A few options are presented to the user.
After pressing End Call the user can select to end both calls (which hangs up on everyone) or Link Calls Together. In essence, this can be used as a consultative transfer. In fact, based on the client interface, it is a transfer action.
It is worth noting that during this 3-way call, media resources on the CUCM or hardware conference resource are not used. The client has a built-in media bridge.
Further Testing and General Opinions
At this point, I have only tested basic call functionality. The client interface is fairly intuitive with a relatively small list of quirky behaviors. You will want to add the Telephony Pack add-on option. Without this option pack, you do not have access to the DTMF keypad during an active call (kinda important for voicemail). You also don’t have access to the “in-call” features like 3-way calling. The add-on option is 99 cents, so not a bad deal at all.
The only issues I found to be overly annoying are that sometimes the client crashes on initial start-up and sometimes the client “loses” my add-on option.
In regards to the first annoyance, I can cold boot the iPod Touch and when I launch the Media5 client, it looks like all interfaces are loading and then it disappears. Then I can select the application icon again and all is well.
In regards to misplacing my add-on options: I did have a recurring issue related to the the add-on features. I found that sometimes when I loaded the client I didn’t have the “in-call” features (e.g. Transfer, 2nd Call, etc.) when placing a call. I also lost the DTMF keypad during an active call. The feature option showed installed (checked) when looking at the Feature Purchases page. I had to kill the app and reload it to set things straight. This could be related to the fact that my lab WiFi network does not have access to the App Store and I need to bounce between networks to load apps. However, the behavior wasn’t consistent.
I guess I should mention a third annoyance that was specific to my configuration. If you are on a network that doesn”t have access to the App Store and you accidentally select an option that causes the client to try and communicate with the App Store, then go get coffee and have a long conversation with a friend. It takes an inordinate amount of time for the client to clue in on the fact it can’t access the App Store.
I plan on conducting more tests as time permits and will update this article as needed.
A Note on CODECs
Codec mismatches seem to cause people trouble when dealing with 3rd party SIP devices. The Sipdroid supports the following CODECs:
- G.722 wideband: With purchase of Professional Edition
- G.711 a-law
- G.711 u-law
- G.729: With purchase of G.729 license (another add-on whether you have the Free or Pro editions installed)
- iSAC: With purchase of Professional Edition
In the CUCM realm, G.711 and G.722 are your likely choices. Though the CUCM supports GSM as well. The important thing is that all call parties need to be able to negotiate a common CODEC that is permissible by the CUCM region (and inter-region) configurations.
Oh, apparently the Media5 team is hard at work on tackling video. This is a rumor at this point but from what I can tell Media5 works pretty hard on incorporate features into their client.