Ticket #193: fix-tunnel-protocol.patch

File fix-tunnel-protocol.patch, 3.0 KB (added by coling, 4 years ago)

This should allow module-tunnel to work nicely without any hacks to the protocol version. It adds the extra flags now available in 0.9.8/protocol>=12 but they are all hacked to true for now as I don't really know where to get their real values ;)

  • src/modules/module-tunnel.c

     
    129129static void command_stream_killed(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata); 
    130130static void command_overflow(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata); 
    131131static void command_underflow(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata); 
     132static void command_suspend(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata); 
     133static void command_moved(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata); 
    132134 
    133135static const pa_pdispatch_cb_t command_table[PA_COMMAND_MAX] = { 
    134136#ifdef TUNNEL_SINK 
     
    139141    [PA_COMMAND_UNDERFLOW] = command_underflow, 
    140142    [PA_COMMAND_PLAYBACK_STREAM_KILLED] = command_stream_killed, 
    141143    [PA_COMMAND_RECORD_STREAM_KILLED] = command_stream_killed, 
     144    [PA_COMMAND_PLAYBACK_STREAM_SUSPENDED] = command_suspend, 
     145    [PA_COMMAND_RECORD_STREAM_SUSPENDED] = command_suspend, 
     146    [PA_COMMAND_PLAYBACK_STREAM_MOVED] = command_moved, 
     147    [PA_COMMAND_RECORD_STREAM_MOVED] = command_moved, 
    142148}; 
    143149 
    144150struct userdata { 
     
    226232    pa_log_warn("Server signalled buffer underrun."); 
    227233} 
    228234 
     235static void command_suspend(pa_pdispatch *pd, PA_GCC_UNUSED uint32_t command, PA_GCC_UNUSED uint32_t tag, pa_tagstruct *t, void *userdata) { 
     236    struct userdata *u = userdata; 
     237 
     238    pa_assert(pd); 
     239    pa_assert(t); 
     240    pa_assert(u); 
     241    pa_assert(u->pdispatch == pd); 
     242 
     243    pa_log_debug("Server reports a stream suspension."); 
     244} 
     245 
     246static void command_moved(pa_pdispatch *pd, PA_GCC_UNUSED uint32_t command, PA_GCC_UNUSED uint32_t tag, pa_tagstruct *t, void *userdata) { 
     247    struct userdata *u = userdata; 
     248 
     249    pa_assert(pd); 
     250    pa_assert(t); 
     251    pa_assert(u); 
     252    pa_assert(u->pdispatch == pd); 
     253 
     254    pa_log_debug("Server reports a stream move."); 
     255} 
     256 
    229257static void stream_cork(struct userdata *u, pa_bool_t cork) { 
    230258    pa_tagstruct *t; 
    231259    pa_assert(u); 
     
    10581086    pa_tagstruct_putu32(reply, u->fragsize); 
    10591087#endif 
    10601088 
     1089    /* New flags added in 0.9.8 */ 
     1090    if (u->version >= 12) { 
     1091        /* TODO: set these to useful values */ 
     1092        pa_tagstruct_put_boolean(reply, PA_TAG_BOOLEAN_TRUE); /*no_remap*/ 
     1093        pa_tagstruct_put_boolean(reply, PA_TAG_BOOLEAN_TRUE); /*no_remix*/ 
     1094        pa_tagstruct_put_boolean(reply, PA_TAG_BOOLEAN_TRUE); /*fix_format*/ 
     1095        pa_tagstruct_put_boolean(reply, PA_TAG_BOOLEAN_TRUE); /*fix_rate*/ 
     1096        pa_tagstruct_put_boolean(reply, PA_TAG_BOOLEAN_TRUE); /*fix_channels*/ 
     1097        pa_tagstruct_put_boolean(reply, PA_TAG_BOOLEAN_TRUE); /*no_move*/ 
     1098        pa_tagstruct_put_boolean(reply, PA_TAG_BOOLEAN_TRUE); /*variable_rate*/ 
     1099    } 
     1100 
    10611101    pa_pstream_send_tagstruct(u->pstream, reply); 
    10621102    pa_pdispatch_register_reply(u->pdispatch, tag, DEFAULT_TIMEOUT, create_stream_callback, u, NULL); 
    10631103