Peer hierarchy [EXPERIMENTAL]
=============================

Service		net.connman
Interface	net.connman.Peer
Object path	[variable prefix]/{peer0,peer1,...}

Methods		dict GetProperties() [deprecated]

			Returns properties for the peer object. See the
			properties sections for available properties.

			Usage of this method is highly discouraged. Use
			the Manager.GetPeers() method instead.

			Possible Errors: [service].Error.InvalidArguments

		void Connect() [experimental]

			Connect this peer.

			This method call will only return in case of an error
			or when the peer is fully connected. So setting a
			longer D-Bus timeout might be a really good idea.

			Possible Errors: [service].Error.InvalidArguments

		void Disconnect() [experimental]

			Disconnect this peer. If the peer is not connected, an
			error message will be generated.

			Possible Errors: [service].Error.InvalidArguments

Signals		PropertyChanged(string name, variant value) [experimental]

			This signal indicates a changed value of the given
			property.

Properties	string State [readonly] [experimental]

			The peer state information.

			Valid state are "idle", "failure", "association",
			"configuration", "ready" and "disconnect".

		string Name [readonly] [experimental]

			Name of the peer.

		dict IPv4 [readonly] [experimental]

			string Local [readonly]

				The current peer's local configured IPv4
				address.

			string Remote [readonly]

				The current peer's remote configured IPv4
				address.

		array{dict} Services [readonly] [experimental]

			Array of P2P service specifications consisting of
			either UpnpService and UpnpVersion or BonjourQuery
			and BonjourResponse, but not a mix of these. The
			dict members have the following format:

			String UpnpService [readonly]

				The UPNP service URI.

			int32 UpnpVersion [readonly]

				The UPNP version in use.

			array{byte} BonjourQuery [readonly]

				The bonjour service query data, provided
				through a byte array.

				Note: a Peer object will never show this
				information. When scanning, a device gets
				only the bonjour response data. However,
				this information is mandatory when a bonjour
				service is given through Manager API
				RegisterPeerService and
				UnregisterPeerService.

			array{byte} BonjourResponse [readonly]

				The bonjour service response data, provided
				through a byte array.

				Note: this will be the only bonjour related
				information a Peer object will show.

			array{byte} WiFiDisplayIEs [readonly]

				The TLV formated byte array representing the
				WiFi Display Informations Elements.
