Explicitly check version number when determining which fields are in a stream
authorPierre Ossman <ossman@cendio.se>
Fri, 26 May 2006 07:24:25 +0000 (07:24 +0000)
committerPierre Ossman <ossman@cendio.se>
Fri, 26 May 2006 07:24:25 +0000 (07:24 +0000)
create response.

git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@978 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/polyp/internal.h
src/polyp/stream.c

index d88a1e5..80c2861 100644 (file)
@@ -100,7 +100,6 @@ struct pa_stream {
 
     char *name;
     pa_buffer_attr buffer_attr;
 
     char *name;
     pa_buffer_attr buffer_attr;
-    int buffer_attr_from_server;
     pa_sample_spec sample_spec;
     pa_channel_map channel_map;
     pa_stream_flags_t flags;
     pa_sample_spec sample_spec;
     pa_channel_map channel_map;
     pa_stream_flags_t flags;
index 17884ed..e3f40a3 100644 (file)
@@ -84,7 +84,6 @@ pa_stream *pa_stream_new(pa_context *c, const char *name, const pa_sample_spec *
     s->requested_bytes = 0;
     s->state = PA_STREAM_UNCONNECTED;
     memset(&s->buffer_attr, 0, sizeof(s->buffer_attr));
     s->requested_bytes = 0;
     s->state = PA_STREAM_UNCONNECTED;
     memset(&s->buffer_attr, 0, sizeof(s->buffer_attr));
-    s->buffer_attr_from_server = 0;
 
     s->peek_memchunk.index = 0;
     s->peek_memchunk.length = 0;
 
     s->peek_memchunk.index = 0;
     s->peek_memchunk.length = 0;
@@ -407,38 +406,29 @@ void pa_create_stream_callback(pa_pdispatch *pd, uint32_t command, PA_GCC_UNUSED
         goto finish;
     }
 
         goto finish;
     }
 
-    if (!pa_tagstruct_eof(t)) {
-        
+    if (pa_context_get_server_protocol_version(s->context) >= 9) {
         if (s->direction == PA_STREAM_PLAYBACK) {
         if (s->direction == PA_STREAM_PLAYBACK) {
-
-            /* This is a server 0.9.0 or later */
             if (pa_tagstruct_getu32(t, &s->buffer_attr.maxlength) < 0 ||
                 pa_tagstruct_getu32(t, &s->buffer_attr.tlength) < 0 ||
                 pa_tagstruct_getu32(t, &s->buffer_attr.prebuf) < 0 ||
             if (pa_tagstruct_getu32(t, &s->buffer_attr.maxlength) < 0 ||
                 pa_tagstruct_getu32(t, &s->buffer_attr.tlength) < 0 ||
                 pa_tagstruct_getu32(t, &s->buffer_attr.prebuf) < 0 ||
-                pa_tagstruct_getu32(t, &s->buffer_attr.minreq) < 0 ||
-                !pa_tagstruct_eof(t)) {
+                pa_tagstruct_getu32(t, &s->buffer_attr.minreq) < 0) {
                 pa_context_fail(s->context, PA_ERR_PROTOCOL);
                 goto finish;
             }
                 pa_context_fail(s->context, PA_ERR_PROTOCOL);
                 goto finish;
             }
-
-            s->buffer_attr_from_server = 1;
         } else if (s->direction == PA_STREAM_RECORD) {
         } else if (s->direction == PA_STREAM_RECORD) {
-            
-            /* This is a server 0.9.0 or later */
             if (pa_tagstruct_getu32(t, &s->buffer_attr.maxlength) < 0 ||
             if (pa_tagstruct_getu32(t, &s->buffer_attr.maxlength) < 0 ||
-                pa_tagstruct_getu32(t, &s->buffer_attr.fragsize) < 0 ||
-                !pa_tagstruct_eof(t)) {
+                pa_tagstruct_getu32(t, &s->buffer_attr.fragsize) < 0) {
                 pa_context_fail(s->context, PA_ERR_PROTOCOL);
                 goto finish;
             }
                 pa_context_fail(s->context, PA_ERR_PROTOCOL);
                 goto finish;
             }
-
-            s->buffer_attr_from_server = 1;
-        } else {
-            pa_context_fail(s->context, PA_ERR_PROTOCOL);
-            goto finish;
         }
     }
 
         }
     }
 
+    if (!pa_tagstruct_eof(t)) {
+        pa_context_fail(s->context, PA_ERR_PROTOCOL);
+        goto finish;
+    }
+
     if (s->direction == PA_STREAM_RECORD) {
         assert(!s->record_memblockq);
         
     if (s->direction == PA_STREAM_RECORD) {
         assert(!s->record_memblockq);
         
@@ -1375,7 +1365,8 @@ const pa_buffer_attr* pa_stream_get_buffer_attr(pa_stream *s) {
 
     PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);
     PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);
 
     PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);
     PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);
-    PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->buffer_attr_from_server, PA_ERR_NODATA);
+    PA_CHECK_VALIDITY_RETURN_NULL(s->context,
+        pa_context_get_server_protocol_version(s->context) >= 9, PA_ERR_NODATA);
 
     return &s->buffer_attr;
 }
 
     return &s->buffer_attr;
 }