Ivan Milic - Networks expert Ivan Milic CEO Ivan Milic

Top Menu

NAT Traversal , peer-to-peer networking cross platform api

quickP2P goal is to mark new small era in applications development. There are tons and tons of application in Google play or Apple app store lacking NAT Traversal-ed end-to-end connection capabilities so they could not have their full potential. This is usually result of fact that NAT traversal is commonly dark subject for majority of developers. quickP2P enables application development team to instantly solve this matter and to focus on their application primary usage.

  • First easy to use cross-platform NAT traversal/peer-to-peer network API.

    • Publish you voice/video over IP application in a week!
    • Have an live online multiplayer game with 1000000 players supported by just one real server
    • Transfer data directly between peers eliminating security risks of cloud systems
    • Cheap way of real-time control over distant devices/machines/robots over internet
    • Your team is "Green" (Networking)? No worry - all the hard things done by us!
    • State of the art NAT traversal
    • General purpose peer meta information definition and searching
    • Includes secure KEY exchange and AES encryption utilities
    • Built in virtual network/user indexing subsystem
    • General purpose meta information definition and searching for indexing subsystem
  • quickP2P cross-platform API

    Use quickP2P API in any OS you need

    • Native Microsoft .NET api
    • Native C++ 0x (+obj C selector extensions) API portable to any OS
    • JNI wrapper around C++ lib for use in Java/Android SDK

    Native c++ API is portable to any POSIX system supporting BSD or winsock2 socket.

    quickP2P API is based on thread conservative asynchronous event/callback model enabling smooth flow of UI in your applications

    All API versions are very much look-alike. In order of maximizing programming comfort we even developed special "C# look-alike" event/callback system for native c++ CLI api. You can also use for other parts of your application. With it in native c++ you can easily do things like putting anonymous callback method body inside of method that invokes asynchronous function. See code examples...

  • quickP2P - everything you need for your peer-to-peer application

    quickP2P API is everything you need for your peer-to-peer application

    • Easily invoke-able traversal operation will do everything in behind and return to you connected TCP or communication ready UDP socket
    • Connection creation is garanitied. If all traversal methods fail (2% possibility) connection is created using raw relay.
    • You can define any meta-data property for peer object. You can search peers by values of this properties
    • Bulit in instant-message system. Peer-to-peer application commonly need a way to pre-negotiate before real direct communication tunnel is opened between them. This messages can be also put in good use for adding chat feature to your application.
    • Secure KEY exchange and AES encryption included
    • Peer status track. You can register local peer to track remote peers status and get information about changes instantly
    • You have built in index system for virtual users and networks. quickP2P index system is based on mongo DB and gives you permanent meta-data storage. It provides user object management, basic username/password authentication and search-ability by user meta-data. You define any meta-data property as you need. It also defines virtual network object you can assign users to and also search by meta-data.
    • quickP2P server system is scalable. No matter how menu users you have new super-nodes can be easily added. Super-node can contain CHECKPOINT service, HANDSHAKE service, STUN service, INDEX service and RELAY service. Each super-node component can be added to particular super-node multiple times.

    This features cover all common needs outside "application black box" so you can focus on application itself not worrying about additional web services you need to power system infrastructure.

When you want to start developing an application using quickP2P API you first need to register as a provider. Then you should register your application in the network using one of the provider portals hooked up with the network. All entities of your application regarding quickP2P will be enclosed in application scope. This means that although multiple providers having many applications that can be presented in the network, your application sees only objects that belong to it. Of course what is usually common is that you can have your own super-node(s) hosted on your servers for a single application you have.

So, you start by registering as a provider. After successful registration and login, you get to dashboard screen:  This is dashboard screen of provider portal:

Next thing you need to do is to register your application. Click on "Applications" button below provider contact data.

In the bottom left corner, there is a button "New Application Request". There you enter basic information about your application and submit a request to us so we could enable it. It will appear in applications list but it will not have status active until we enable it.

On a picture above you see example of enabled application. Notice 3 buttons:

  • "View Active Peers"  - enables you to have insight in currently active peers in your application and meta-data
  • "List Virtual Networks" - enables you to have insight in created virtual networks and meta-data
  • "List Virtual users" - enables you to have insight in created virtual users and meta-data
  • "List Virtual objects" -  enables you to have insight in created general purpose virtual object and their meta-data

These 4 options are most useful during development. It is so because programmers can easily see if they are making some mistake.

Let's take a look at peers list: 

 

On the picture you can see 3 records of currently active peers we filtered by query:

"Properties.platform":"windows"  (note quotes for later discussions about queries done from API)

 Besides common networking data, we see in records, most important column would be "Properties". You notice that it has some JSON data format like:

{ "someproperty1" : "some value", "someproperty2" : "some value" }

 What is interesting about that is that we can put any property by our will and later be able to search peers by their value. Our query is exactly that "Properties.platform":"windows" ."platform" property would be custom property someone decided it would need meta-data from its application (although he had OS column given automatically from API).

Let us now look at Virtual User List:

Virtual users and Virtual networks are part of the permanent indexing meta-data storage system. Do not mix that with peers. Record about peer exists as long as a peer is online.  VUser and VNetwork on other hands we can imagine like two database tables on which we can do INSERT/UPDATE/DELETE/SELECT operations.

 We also see "Properties" column. Here we can use in the same way as for peers. The difference is that this data stays saved after peer using VUser object closes session with super-node. You notice first property "Username". Because it is so common that peer-to-peer applications have username/password authentication, we explicitly embedded their use. Same stands for VNetwork "name" property. You can add other properties to your will. In special case if you don't need username/password authentication and you need to use permanent meta-data storage, you can just fix them in some way.

VUser has also two additional fields (looking at VNetwork) "Member Of networks" and "Currently bound Peers".

"Member Of networks" iled that stores list of the unique identification of VNetworks VUser belongs to. The list we see on the picture is from an application that does not use VNetworks at all so all are empty.

 "Currently bound Peers"  shows a list of peers that are currently authenticated with VUser object. Multiple peers can be authenticated using the same VUser object.

We will not talk about Virtual networks and objects lists because they are very similar to VUser list. We mentioned all important things regarding this document section.

Next thing towards starting our application development would be to decide what to use because on some platforms you can choose between .NET and native c++. Here is some listing that may help you decide:

.NET API

Native C++ API

Java wrapper for native c++ API

Windows

Normal .Net DLL

.dll +.lib+headers

Dll + java wrapper sources

Linux

Mono

.so + headers

so + java wrapper sources

Mac OS

Mono

Cocoa .a + headers - you can mix with Obj C++ or use  just c++

IOS

Mono

Cocoa touch .a + headers - you can mix with Obj C++

Android

Mono

(NDK) .so + headers

(SDK)so + java wrapper sources

Holest Outsourcing

quickP2P Fast start

quickP2P - Learn more

Partnership / Investment