device-restore: Various fixes for the protocol extension.

* Fix extension API function export list.
 * Ensure we trigger a subscription event when things change.
 * Send the index with our subscription events.
 * Clear out any existing formats when saving.
 * Call the correct extension command for subscriptions.
This commit is contained in:
Colin Guthrie 2011-08-08 23:29:47 +02:00
parent 738cea3cc3
commit fc0a6ee239
5 changed files with 39 additions and 6 deletions

View file

@ -324,12 +324,14 @@ pa_operation *pa_ext_device_restore_save_sink_formats(
/* Command function defined in internal.h */
void pa_ext_device_restore_command(pa_context *c, uint32_t tag, pa_tagstruct *t) {
uint32_t subcommand;
uint32_t idx;
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);
pa_assert(t);
if (pa_tagstruct_getu32(t, &subcommand) < 0 ||
pa_tagstruct_getu32(t, &idx) < 0 ||
!pa_tagstruct_eof(t)) {
pa_context_fail(c, PA_ERR_PROTOCOL);
@ -341,6 +343,11 @@ void pa_ext_device_restore_command(pa_context *c, uint32_t tag, pa_tagstruct *t)
return;
}
if (idx == PA_INVALID_INDEX) {
pa_context_fail(c, PA_ERR_PROTOCOL);
return;
}
if (c->ext_device_restore.callback)
c->ext_device_restore.callback(c, c->ext_device_restore.userdata);
c->ext_device_restore.callback(c, idx, c->ext_device_restore.userdata);
}