<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7226.0">
<TITLE>Range header parsing</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Ross,<BR>
<BR>
I would note that within the parseRangeHeader function (in the file liveMedia/RTSPServer.cpp), the Range header is parsed expecting spaces to be present between the elements of the NPT specification.&nbsp; See below:<BR>
<BR>
&nbsp;&nbsp;&nbsp; 590&nbsp;&nbsp; float start, end;<BR>
&nbsp;&nbsp;&nbsp; 591&nbsp;&nbsp; if (sscanf(fields, &quot;npt = %f - %f&quot;, &amp;start, &amp;end) == 2) {<BR>
&nbsp;&nbsp;&nbsp; 592&nbsp;&nbsp;&nbsp;&nbsp; rangeStart = start;<BR>
&nbsp;&nbsp;&nbsp; 593&nbsp;&nbsp;&nbsp;&nbsp; rangeEnd = end;<BR>
&nbsp;&nbsp;&nbsp; 594&nbsp;&nbsp; } else if (sscanf(fields, &quot;npt = %f -&quot;, &amp;start) == 1) {<BR>
&nbsp;&nbsp;&nbsp; 595&nbsp;&nbsp;&nbsp;&nbsp; rangeStart = start;<BR>
&nbsp;&nbsp;&nbsp; 596&nbsp;&nbsp; } else {<BR>
&nbsp;&nbsp;&nbsp; 597&nbsp;&nbsp;&nbsp;&nbsp; return False; // The header is malformed<BR>
&nbsp;&nbsp;&nbsp; 598&nbsp;&nbsp; }<BR>
<BR>
Is there a reason for the parsing of NPT information in this manner?&nbsp; The specification of NPT within RFC2326 does not appear to include spaces between NPT elements.&nbsp; And I would additionally note that even when Range headers are returned by the liveMedia library, these do not include spaces between NPT elements.<BR>
<BR>
As such I would propose the following amendment of this code (which maintains operability with existing code which may depend upon this specification of NPT information):<BR>
<BR>
&nbsp;&nbsp;&nbsp; 590&nbsp;&nbsp; float start, end;<BR>
&nbsp;&nbsp;&nbsp; 591&nbsp;&nbsp; if (sscanf(fields, &quot;npt = %f - %f&quot;, &amp;start, &amp;end) == 2 ||<BR>
&nbsp;&nbsp;&nbsp; 592&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sscanf(fields, &quot;npt=%f-%f&quot;, &amp;start, &amp;end) == 2) {<BR>
&nbsp;&nbsp;&nbsp; 593&nbsp;&nbsp;&nbsp;&nbsp; rangeStart = start;<BR>
&nbsp;&nbsp;&nbsp; 594&nbsp;&nbsp;&nbsp;&nbsp; rangeEnd = end;<BR>
&nbsp;&nbsp;&nbsp; 595&nbsp;&nbsp; } else if (sscanf(fields, &quot;npt = %f -&quot;, &amp;start) == 1 ||<BR>
&nbsp;&nbsp;&nbsp; 596&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sscanf(fields, &quot;npt=%f-&quot;, &amp;start) == 1) {<BR>
&nbsp;&nbsp;&nbsp; 597&nbsp;&nbsp;&nbsp;&nbsp; rangeStart = start;<BR>
&nbsp;&nbsp;&nbsp; 598&nbsp;&nbsp; } else {<BR>
&nbsp;&nbsp;&nbsp; 599&nbsp;&nbsp;&nbsp;&nbsp; return False; // The header is malformed<BR>
&nbsp;&nbsp;&nbsp; 600&nbsp;&nbsp; }<BR>
<BR>
Regards,<BR>
Rob<BR>
</FONT>
</P>

</BODY>
</HTML>