Configuring Cisco Jabber Problem Reporting

Cisco Jabber has an administrative feature allowing users to submit problem reports directly from the user interface. When troubleshooting issues with Jabber this is usually one of the first steps. I consider this a better method instead of having the user save the PRT zip file, subsequently lose it on their computer, and then clogging your inbox.

The nuts and bolts of how this works is briefly described in the Cisco Jabber installation and configuration guide. You need a method to submit the problem report and a method to retrieve the problem report. This post is purely focusing on how to submit the problem report to a server and it’s up to you on how to retrieve it. If you’re anticipating using this frequently or in an enterprise you’re going to need to do some light file handling on the server side. The Cisco problem reporting upload mechanism doesn’t randomize file names during the upload.

I’m working with my FreeBSD server specialized for Jabber functions so underneath I have Apache and PHP. The disclaimer I’m going to insert is that is up to YOU to secure your installation. Creating a free-for-all upload location on your network poses a big security risk. My goal here is to give you the basics with Jabber and what it is doing.

Cisco Jabber does an HTTP POST directly to the URL you specified in your jabber-config.xml. This HTTP POST contains the following information so this is merely informational if you would like use a different upload method. The “ciscoID” portion of the POST is generated by the Cisco JID.

POST /uploadprt.php HTTP/1.1
Request Method: POST
Host: yuengling.brewery.com
Full request URI: http://yuengling.brewery.com/uploadprt.php
Type: multipart/form-data
Content-Disposition: form-data; name="zipFileName"; filename="PROBLEM_FEEDBACK_Cisco_Jabber_ciscoID.zip"

Now that you know how Cisco Jabber uploads to your server you need a corresponding catch-all script to accept the upload. Cisco gives you an example HTML form that you can put on your server. This form is optional and not necessary to have Cisco Jabber automatically upload PRTs. The goal was to provide you an example of how you need to accept the ‘zipFileName’ form data.

uploadprt.html

<form name="uploadPrt" action="http://yuengling.brewery.com/uploadprt.php" method="post" enctype="multipart/form-data">
<input type="file" name="zipFileName" id="zipFileName" />

<input type="submit" name="submitBtn" id="submitBtn" value="Upload File" />
</form>

The next piece of the puzzle is the uploadprt.php file and how it interacts with the incoming HTTP POST from Jabber. Jabber uploads a file name that is exactly “PROBLEM_FEEDBACK_Cisco_Jabber_ciscoID.zip” and if you do nothing else to the file name the user will continually overwrite the same file. So I decided to go ahead and add a time-stamp which you can see below in the $uploadfile variable.

I do not recommend you use this code without adding in proper file handling controls. I’m working in a sealed environment so this is the bare essential method to accept the upload. Obviously the $uploaddir needs to be set to your server location you want to store the files.

uploadprt.php

<?php
$uploaddir = '/usr/local/www/apache22/data/uploads/';
$uploadfile = $uploaddir . date('Y_m_d_H_i_s') . basename($_FILES['zipFileName']['name']);
move_uploaded_file($_FILES['zipFileName']['tmp_name'], $uploadfile);
?>

So you’ve put all this together and as always I’m ready to tell Jabber via the jabber-config.xml file where to upload problem reports. It’s important to note that the PrtLogServerUrl parameter points to your upload PHP script and not the HTML form provided in the documentation.

jabber-config.xml

<?xml version="1.0" encoding="utf-8"?>
<config version="1.0">
<Client>
<PrtLogServerUrl>http://yuengling.brewery.com/uploadprt.php</PrtLogServerUrl>
</Client>
</config>

The end result is I have a directory on the server that houses the Jabber problem reports as “2014_12_10_20_19_50PROBLEM_FEEDBACK_Cisco_Jabber_ciscoID.zip”. From here you can work this into any further automation methods such as e-mailing or FTP. The first goal has been met to get the file from the client to the server and from there further automate.

If everything is working you’ll end up with a little window that looks like this. Happy Jabber-ing!

Jabber_PRT_success

Configuring Cisco Jabber Automatic Updates

With Jabber releases coming from Cisco on a near monthly basis there is a way to keep everyone updated. You can find a section in the installation guide about automatic updates, but it isn’t super clear. I’ll show you from a live installation how it is put together. You’ll want to only do this starting with version 10.5.

First of all you’re going to need a place to host an XML file and the installation files that will be downloaded by the clients. Some may choose Windows/IIS because of familiarity, but I’m a #FreeBSD fan. It’s also something to notice that some of the other application servers from Cisco like Jabber Guest are built on CentOS Linux so you may want to go that route.

Once you’ve found a suitable location you need to create the update.xml file which Jabber checks for changes. If you have thousands of clients in your environment be prepared for that.

<?xml version="1.0" encoding="utf-8"?>
<JabberUpdate>
<App name="JabberMac">
<LatestBuildNum>191164</LatestBuildNum>
<LatestVersion>10.5.0</LatestVersion>
<DownloadURL>http://yuengling.brewery.com/jabber/Cisco-Jabber-Mac-10.5.0.191164-56574006-MCwCFF7lmx_A_Q1b6iK97ETn7QBfP_N9AhQOKTx6TgnCyw3Z4NfjVqdactMcgA!!.zip</DownloadURL>
</App>
<App name="JabberWin">
<LatestBuildNum>37889</LatestBuildNum>
<LatestVersion>10.5.0</LatestVersion>
<DownloadURL>http://yuengling.brewery.com/jabber/CiscoJabberSetup.msi</DownloadURL>
</App>
</JabberUpdate>

Now that you’ve prepared your server and update.xml just upload those files to your server. The Jabber for Mac version requires the DSA signature in the file name and you can find that in the release notes from the download. I haven’t tried this on IIS but I do hear it requires a few modifications to host this file on IIS considering the name.

root@yuengling:/usr/local/www/apache22/data/jabber # ll
total 56100
-rw-r--r-- 1 upload www 56574006 Sep 22 10:50 Cisco-Jabber-Mac-10.5.0.191164-56574006-MCwCFF7lmx_A_Q1b6iK97ETn7QBfP_N9AhQOKTx6TgnCyw3Z4NfjVqdactMcgA!!.zip
-rw-r--r-- 1 upload www 786432 Nov 1 17:47 CiscoJabberSetup.msi
-rw-r--r-- 1 upload www 557 Sep 25 19:33 update.xml

From here you need to test downloading each of these files and once that works you can proceed updating your jabber-config.xml. Recall that your jabber-config.xml file is hosted on CUCM so be prepared to update that file, upload to CUCM, and restart TFTP services. Please remember to upload to all your TFTP nodes in the cluster.

<config version="1.0">
<Client>
<UpdateUrl>http://yuengling.brewery.com/jabber/update.xml</UpdateUrl>
</Client>
</config>

You can add a piece of code into your jabber-config.xml that will give users a display of information. I haven’t found that really useful at this stage, but I may do it for the Jabber 10.6 update that is coming ‘soon’.

If it displays properly your next task is to load up Jabber, click Help and “Check for Updates”. If everything pieced together properly you should get the following.

Jabber-up-to-date-pic