XMPP

From Wildsong
Jump to navigationJump to search

XMPP is the Jabber protocol. It is also used for GoogleTalk

See here for official documentation or here for the Wikipedia page.

I am interested in it for use with FoxtrotGPS and IncidentView.

I want to pass specific bits of data along from a server to a laptop in the field.

Use cases:

  • E911 Dispatch In IncidentView I want to be able to pass along the information from a 911 dispatch center to a rig.
  • AVL for IncidentView I want to be able track locations on a Web map and convey the location database back to command vehicles.
  • AVL for FoxtrotGPS I want to be able to show the locations of "friends". Aka

"presence information" http://en.wikipedia.org/wiki/Presence_information

Servers

First I need a server. A very popular server is GoogleTalk. But I am not in a Googly mood right now so first order of the day is to get a private server running.

Requirements

  1. Free
  2. Open source
  3. Runs on Linux

Openfire

Openfire - my notes from last attempt pubsub not working 3.8.1 says they have fixed pubsub so I am trying again

Installed from DEB package. The web interface seems reasonable. Supports groups.

Shows active sessions.

Has chat rooms. I think this could be a way to send dispatches to a group of users. I can also use the 'broadcast' plugin.

brian/wildsong bwilson/alseageo iv/iv saint/thebells

PostgreSQL

DOES NOT WORK with Openfire's instructions.

Database URL: jdbc:postgresql://localhost:5432/openfire

I get blocked with this error. "The Openfire database schema does not appear to be installed. Follow the installation guide to fix this error."

MySQL

Okay, mysql is faster and simpler anyway. AND IT WORKS with Openfire on the first try...

cd /usr/share/openfire/resources/database
mysqladmin -u root -p create openfire
mysql -u root -p openfire < openfire_mysql.sql

Via phpmyadmin

CREATE USER 'openfire'@'localhost' IDENTIFIED BY '***';
GRANT USAGE ON * . * TO 'openfire'@'localhost' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT ALL PRIVILEGES ON `openfire` . * TO 'openfire'@'localhost';

Database URL: jdbc:mysql://localhost:3306/openfire?rewriteBatchedStatements=true

Plugins

You can install plugins directly from the web interface.

I installed the Asterisk plugin.

I installed the Broadcast plugin. "The broadcast plugin broadcasts messages to all users in the system or to specific groups. It's primarily useful for sending announcements or notifications."

To send a broadcast message, send a message to all@[serviceName].[serverName] or [group]@[serviceName].[serverName]. For example, if your server is called foo and the default service name is being used, a message to [email protected] would be broadcast to all users connected to the server. For the group staff, a message to [email protected] would be sent to all users in the group staff that are currently online or offline.

Prosody

Prosody - my notes say use this one, but trying out Openfire because of the plugins.

Clients

Python

Following along in the O'Reilly book I will build a simple client using Sleek. Python XMPP Client

Working with .Net

See Jabber.net

Building pidgin

..because I am interested in libpurple for Windows (and pidgin runs on Windows)

Downloaded and unpacked source from pidgin site.

It is easy on Ubuntu 12.04, once you install the build dependencies.

apt-get build-dep pidgin
cd pidgin
./configure 
make
sudo make install

Location

There are two docs to look at: xep-0080 to report where client is located and xep-0255 to ask about the location of an entity.

All about XEP-0080

What is XEP-0080 good for?

  • Supports GPS related attributes (aka xml elements) you expect including {timestamp, lat, lon, alt, speed, bearing, datum}
  • Also has elements for everything you might want (floor, street, country, postalcode etc etc)

XEP-0080 message format could easily support E911 dispatch. It includes 'description', 'url' and a catch-all 'text' element.

Container (what XMPP message should carry the location data?):

  • Location of people should be sent via pub-sub or pep (personal eventing).
  • Tracking non-human users (eg a fire truck) can use other containers.

Musts:

  • Lat / lon are signed decimal degrees
  • Altitude units are metric