blob: 748698c03b371f55701f9da231ec9b5763b470bb [file] [log] [blame]
# 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 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
p2p.add_file('some_payload', 3000)
p2p.add_file('other_payload', 6000)