Fix a copy-paste error in PROTOCOL.
pulse: Use more intuitive indexing with port infos in introspect.c.
proplist: Change proplist_name_valid() to be public function pa_proplist_key_valid().

I want to check the validity in pa_tagstruct_get_proplist(),
and I think also client applications might have use for this
function.
tagstruct: Allow NULL proplist with pa_tagstruct_get_proplist().

module-tunnel doesn't care about the proplist contents, so
pa_tagstruct_get_proplist() is only used for removing the
data from the tagstruct buffer. In that case it's more
convenient to just pass NULL as the proplist argument.
conf-parser: Pass parser state in a struct instead of function parameters.

I don't like long function parameter lists, and I plan to
add some more state data to the parser which would make the
parameter lists even longer without this refactoring.
conf-parser: Pass parser state in a struct also for parse callbacks.

As suggested by Maarten Bosmans:
http://article.gmane.org/gmane.comp.audio.pulseaudio.general/12079
conf-parser: Add support for parsing property lists.
alsa-mixer: Add support for defining port property lists in the path configuration files.
native: Send the actual port proplists with card info.
pactl: Print card port properties with the "list" command.
card: Don't crash if someone gives NULL name to pa_card_set_profile().

In my opinion, pa_card_set_profile() should assert that name
is not NULL, and it would be the job of the client interface
to filter out NULLs from the client input, but this is done
this way also when setting sink and source ports, so for
consistency I'll do this this way for now.
sink, source: Always create a hashmap for ports.

Having the hashmap sometimes NULL requires a lot of checking
here and there, so ensuring that the hashmap is always
non-NULL simplifies the code.
card: Ensure that there's always at least one profile.

In practice there is always at least one profile, and I
don't think there will ever be cards without profiles.
Therefore, I added assertions to pa_card_new() stating that
the card new data must always contain at least one profile.
Now a lot of code can be simplified, because it's guaranteed
that the profiles hashmap and the active_profile field are
always non-NULL.
Assume that the profiles hashmap of ports is always non-NULL.

It's a valid assumption nowadays, because the hashmap is
created in pa_device_port_new().
Assume that the ports hashmap of cards is always non-NULL.

The hashmap is created in pa_card_new_data_init().
conf-parser: Initialize the state to zero immediately.

Set the state variable immediately to zero so if we fail to open the
configuration file we don't check an uninitialized pointer and free an
nonexistent proplist.
device-port: Send a subscription event when the offset changes.

When the offset changes a subscription event should be sent to the
relevant card.
Fix spelling of separated: s, sepera, separa, g

The used command for fixing the script is the following.

    $ git grep sepera | cut --delimiter=: --fields=1 | xargs sed -i s,sepera,separa,g

This patch is motivated by a patch in Debian from Martin-Éric Racine [1].

[1] http://anonscm.debian.org/gitweb/?p=pkg-pulseaudio/pulseaudio.git;a=commitdiff;h=70e7261a615141908c0cf366fd49e0fc0f550fbf
introspect: Add functions to handle the latency offset.

This includes updating the native protocol and the client API.
A new command was added to allow setting the latency offset.

Also the card list command now shows the latency offset if there
are ports available.

Update protocol to 27.
pactl: Add set-latency-offset command.

This introduces a new command to allow setting the latency offset.

Also the card list command now shows the latency offset on the ports.