[pulseaudio-discuss] [PATCH] librtp: Accept both LF and CRLF after SDP header
Peter Meerwald
pmeerw at pmeerw.net
Fri Dec 27 00:21:48 PST 2013
Hi,
> RFC 4556 specifies that
>
> > The sequence CRLF (0x0d0a) is used to end a record, although parsers SHOULD be
> > tolerant and also accept records terminated with a single newline character.
>
> PulseAudio is only looking for LF characters, which leads to a few
> problems:
ok, this could be improved
> 1. If the version header ends with CRLF, the packet is rejected. This
> has previously been reported in
> http://lists.freedesktop.org/archives/pulseaudio-discuss/2012-July/014159.html
please include a link to that report in the patch description
> 2. The packets generated by module-rtp-send don't follow the RFC.
any further information?
> 3. Any CR characters are included in the values that are read. This can
> be seen when logging to console in the form of messages like
>
> > )" [pulseaudio] sink-input.c: Freeing input 0 "RTP Stream (foo
>
> . Note how the embedded carriage return leads to the message start being
> overwritten.
ok, not nice
> As for my patch, please disregard it since it's wrong :). I'll come back
> later with a fixed version.
go for it!
you want to accept CR/LF after each line, not just the first one?
> > why is this patch needed?
> > > ---
> > > src/modules/rtp/sdp.c | 7 ++++++-
> > > src/modules/rtp/sdp.h | 2 +-
> > > 2 files changed, 7 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/src/modules/rtp/sdp.c b/src/modules/rtp/sdp.c
> > > index e47a41b..904c35f 100644
> > > --- a/src/modules/rtp/sdp.c
> > > +++ b/src/modules/rtp/sdp.c
> > > @@ -66,7 +66,7 @@ char *pa_sdp_build(int af, const void *src, const void *dst, const char *name, u
> > > pa_assert_se(inet_ntop(af, dst, buf_dst, sizeof(buf_dst)));
> > >
> > > return pa_sprintf_malloc(
> > > - PA_SDP_HEADER
> > > + PA_SDP_HEADER "\n"
> > > "o=%s %lu 0 IN %s %s\n"
> > > "s=%s\n"
> > > "c=IN %s %s\n"
> > > @@ -136,6 +136,11 @@ pa_sdp_info *pa_sdp_parse(const char *t, pa_sdp_info *i, int is_goodbye) {
> > >
> > > t += sizeof(PA_SDP_HEADER)-1;
> > >
> > > + if (*t == '\r')
> > > + t++;
> > > + if (*t == '\n')
> > > + t++;
> > > +
> > > while (*t) {
> > > size_t l;
> > >
> > > diff --git a/src/modules/rtp/sdp.h b/src/modules/rtp/sdp.h
> > > index 4cb3b20..e13ca8a 100644
> > > --- a/src/modules/rtp/sdp.h
> > > +++ b/src/modules/rtp/sdp.h
> > > @@ -28,7 +28,7 @@
> > >
> > > #include <pulse/sample.h>
> > >
> > > -#define PA_SDP_HEADER "v=0\n"
> > > +#define PA_SDP_HEADER "v=0"
> > >
> > > typedef struct pa_sdp_info {
> > > char *origin;
> > >
> >
> > --
> >
> > Peter Meerwald
> > +43-664-2444418 (mobile)
>
--
Peter Meerwald
+43-664-2444418 (mobile)
More information about the pulseaudio-discuss
mailing list