Proximity

[600.647 - Advanced Topics in Wireless Networks]
Personal Networking Tool

Overview | Design | Implementation | Final implementation | Change log | Download

Implementation

FAQ:

Programming language used: Java.
Supported platforms: Any ad-hoc network (wired or wireless).
Client Server or Peer to Peer or Both: Peer to Peer.
Are we using open source components? Yes, we will probably use OpenJGraph tool for the visualisation of the network of friends.
Are we using GPS? No. There is no need for GPS.
Are we planning on having Wave Relay installed on end user devices? No. There is no need for that.

No other details available yet.

XML support

The format used for storing data and exchanging messages is XML. For converting from XML to objects and vice-versa we used an open source framework Castor. Classes involved in XML operations are:
  • XMLHandler: this class works directly with Castor and provides a way to convert an XML to one of our objects (Profile, HelloMsg, GetKeyMsg, GetKeyResponseMsg, GetProfile, GetProfileResponse, StartChartMsg, StartChartResponseMsg) and to convert from these objects to XML.
  • ProfileStore: this class provides the operations related to profile management:
    • storing and updating a personal profile of the user; the files used for this is profile.xml.
    • storing (caching) profiles of others users; the directory used for this is profiles/.
    From the point of view of the ProfileStore a profile is identified by a fingerprint (hex encoding of a SHA1 hash over the public key; the size of the fingerprint is 40 hex digits)
A XML representation of a profile looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<profile>
    <publicKey>...</publicKey>

    <fingerprint>...</fingerprint>

    <category policy="superPublic">
        <name>UserName</name>
        <value>user</value>
        <version>user</version>
	<signature>user</signature>
    </category>
    <category policy="superPublic">
        <name>ProfileVersion</name>
        <value>1</value>
        <version>1</version>
	<signature>user</signature>
    </category>
    <category policy="public">
        <name>email</name>
        <value>email</value>
        <version>1</version>
	<signature>...</signature>
    </category>
    <category policy="private">
        <name>category1</name>
        <value>value1</value>
        <version>1</version>
	<signature>...</signature>
    </category>
</profile>
For our own profiles the publicKey, fingeprint and all the signature's are automatically computed. There are two special categories in a Profile:
  • ProfileVersion: all the up-to-date categories should have this value in their version field.
  • UserName: this value is publish along with the fingerprint in a priodic Hello message.
A superPublic policy denote a category which will be published in the HelloMsg. A public policy denote a category which will be published and relayed to/by everyone.

Security

The cryptographic support is based on Bouncy Castle Crypto API, a lightweight cryptography API which provides two features we were looking for: AES and RSA. Classes involved in crypto operations are:
  • SecurityManager: this class manages the RSA private/public key and provides function for signing a text, verifying a signed text, encrypting a small text using a public key, decrypting a small text using the private key.
  • SymmetricCrypteer: this class offers a simple way to encrypt and decrypt texts using AES.

GUI

We use the Swing interface from Java toolkit to build the user interface.

Communication

Our application make use of both multicast UDP communication and point to point TCP connections. Multicast is used for sending periodic Hello messages and exchanging information about profiles while TCP connections are used for the chating facility.

Event System

We implemented an event system which allows us an easy way to schedule the events and to implement a back-off algoritm to adapt to the trafic changes.

Future work

Add the functionality to search in profiles.
Encrypt the chat between users. Currently only the UDP communication is encrypted.
Last update: Thursday, 11-Aug-2005 03:12:05 EDT