/Holepoke

Holepoke

Primary LanguageC++

********************
* holepoke overview
********************
Allow a process, potentially behind a firewall, to register itself as a UDP server. Client processes can lookup the server by ID and then connect directly to the server.

server: The process that registers itself with holepoke and receives and ID.
client: The process that lookups a server address by ID.
holepoke: The introduction server.

1. Server Registration
server -> holepoke (assign an ID to my hole)
server <- holepoke (OK, here's your ID)

2. Through some outside mechanism, server communicates ID to client.
ALTERNATIVELY:
Sender could indicate the client it was interested in. The client then checks in and is immediately connected to the server. For sendoid, this would eliminate the out of band e-mail or chat message to communicate the server ID, but would require some configuration to pick who the receiver should be.

3. Client Check-in
client -> holepoke (where is the hole for this ID?)

4. Server tells peers about each other (either order could occur)
server <- holepoke (a client at this address wants to connect to you)
receiver <- holepoke (the hole is at this address and port)

5. Peers attempt to connect to each other.

********************
* Building on OS X
********************
1. sudo port install protobuf-cpp
2. make

To build in debug mode, run:
make DEBUGON=1

*********************
* Building on Windows
*********************
1. Download Google Protocol Buffers sources for version 2.4.1
2. ./configure
3. make && make install
4. Build NetworkHelper Visual C++ project