Layered View

Layer diagram


The 3 layers of our design include:


1. Connection Manager - responsible for connection and handshake with all peers.


2. Routing Manager - responsible for epidemic routing of all messages by a simple store and forward mechanism.


3. File Discover Manager - responsible for submitting and handling file requests from other devices.




A brief explanation of what each file does is given below.

- This is our main activity file which has the console, the list view and the tabs for the 3 managers.

- This file gives the list view of all possible connections.

- This is our Connection Manager class.We first grab the MAC address,then set up the scan alarm which repeats every 5 seconds when scanning is on. We have an intent filter where we register to receive android wifi p2p intents connection intents and the scan alarm.This class has the following methods:


discoverPeers- once this is called, android throws a PEERS_CHANGED_EVENT if successful


startDiscovery- allow manager to discover peers and connect to other devices


stopDiscovery- stop trying to connect to other devices


closeConnections- removes all connections associated with the channel then calls the disconnect method of each connection


onFailure- this is the callback when an android framework call is not successful


onReceive- this is the method that gets called when a broadcast intent is thrown by the android framework that we registered for during initialization


After a success full discoverPeers call, we get the peer list via the onPeersChanged callback. When a connection is established/broken we grab the network info object and check if a connection was established.


onPeersAvailable - this is the callback from the requestPeers call. This creates a new P2PConenction object based on a null device set the device when we loop through the peers P2PConnection has overridden the equals method so we can compare two objects based on their underlying WifiP2PDevice.


createNewP2PConnection - this is the callback from the clienthandshake/serverhandshake asynctask. clienthandshake/serverhandshake asynctask set up the handshake mechanism between the connected phones.

- This is where we have the connection info and thereby call either sendMessage service or the receiveMessage service.

- This file defines our routing manager class.


The routing manager has an intent register which registers the following intents:


newConnection - When we have a new connection where in all the messages are forwarded.


MessageReceived - this intent is passed when we have an incoming message.


OutgoingApplicationMessage - This intent is passed when the routing manager receives an outgoing application message that needs to be forwarded to all peers.

- This defines the message format for the outgoing and incoming messages.

- This provides a listview for the messages.

- SendMessage service.

- ReceiveMessage service.

- This manager registers incomingApplicationMessage or OutgoingApplicationMessage intents. It then checks where exactly the file is located in the device and returns an appropriate response.

- This defines the filerequest class.

- provides a listview for the requested files.



Our Contributions to multi-hop messaging over Wifi-direct

  • Handshaking protocol is created at the connection layer which has peers exchange necessary information (ports/IP/MAC) that Wifi Direct doesn't provide (only provides info about group owner)
  • A messaging service at the routing layer whose messages are easy to extend and whose service is easy to implement and use
  • We've shown how to pass intents and data between layers so that future developers can easily build out their own layers which implement more advanced management techniques
  • A file request and searching service at file manager layer allows users to send a file request to peers, and search file in their local phone for peers’ file request.