Patent ID: 8539098

Claim:
A method of transferring a file between a first end-user device and a second end-user device comprising the steps of: (a) communicating by the first end-user device, to a server, network contact information of the first end-user device; (b) receiving, at the first end-user device from the server, connection information, for enabling an open network connection between the first and second end-user devices; (c) thereafter, transferring the file from the first end-user device to a second end-user device by, (i) spawning, at the first end-user device, a first virtual machine that virtualizes network capabilities of the first end-user device such that a first virtual network connection is provided to an application running on the first end-user device, the application running external to the first virtual machine, (ii) selecting, at the first end-user device, a routing protocol for the first virtual network connection from among a plurality of available routing protocols for communicating data using the first virtual network connection, said selection being based at least in part on the connection information received from the server, (iii) spawning, at the second end-user device, a second virtual machine that virtualizes network capabilities of the second end-user device such that a second virtual network connection is provided to an application running on the second end-user device, the application running external to the second virtual machine, (iv) spawning, at a third device, a third virtual machine that virtualizes network capabilities of the third device such that a third virtual network connection is provided, (v) establishing a network connection between the first end-user device, via the first virtual network connection, and the second end-user device, via the second virtual network connection, over a network path using the connection information, the network path including the third device, and (vi) for each of a plurality of packets containing data representing the file, (A) transmitting the packet from the first end-user device using the first virtual network connection for communication via the network path, (B) receiving, at the third device using the third virtual network connection, the packet, and communicating the packet onward along the network path, and (C) receiving, at the second end-user device using the second virtual network connection, the packet.