52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""
|
|
netprotos - Network Protocols
|
|
|
|
This module includes Python implementations of various network protocols to
|
|
use in testing. These protocols can be used either with the kernel network
|
|
stack openning UDP, TCP or RAW sockets or with the simulated network stack
|
|
based on the lansim package.
|
|
|
|
In either case, the interface used requires a Host object providing the
|
|
following interface:
|
|
* Host.ip_addr property, with the host's IP address in plain text.
|
|
* Host.socket(family, sock_type) that returns a new asynchronous socket.
|
|
|
|
An asynchronous socket must have the following interface:
|
|
* listen(ip_addr, port, recv_callback)
|
|
* send(data, ip_addr, port)
|
|
* close()
|
|
|
|
See lansim.host.UDPSocket for details on the utilization of this interface.
|
|
Note that this interface is asynchronous since there's no blocking recv()
|
|
method. Instead, when the main loop event handler receives a packet for
|
|
this socket, the recv_callback passed will be called.
|
|
|
|
|
|
To create new protocols you can follow the example of ZeroconfDaemon and
|
|
CrosP2PDaemon which implement part of those protocols to serve files on
|
|
the LAN.
|
|
|
|
To launch a ZeroconfDaemon on a simulated Host, simply create that
|
|
object for the given Host instance as follows:
|
|
|
|
zero = zeroconf.ZeroconfDaemon(host_b, "host-name-b")
|
|
|
|
Once again, a CrosP2PDaemon requires a ZeroconfDaemon instance to
|
|
interact with, so simply creating the object will make it available.
|
|
Although it is not sharing any file it anounces the num_connections
|
|
attribute among other mDNS records required for P2P to work.
|
|
|
|
p2p = cros_p2p.CrosP2PDaemon(zero)
|
|
|
|
To add files and share them on the P2P server, the interface is the
|
|
following:
|
|
|
|
p2p.add_file('some_payload', 3000)
|
|
p2p.add_file('other_payload', 6000)
|
|
|
|
"""
|