<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fooling Around &#187; HTTP</title>
	<atom:link href="http://alax.info/blog/tag/http/feed" rel="self" type="application/rss+xml" />
	<link>http://alax.info/blog</link>
	<description>Software Production Line</description>
	<lastBuildDate>Tue, 03 Aug 2010 09:48:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MediaTools: Fix for Motion JPEG video</title>
		<link>http://alax.info/blog/1073</link>
		<comments>http://alax.info/blog/1073#comments</comments>
		<pubDate>Tue, 06 Oct 2009 19:16:29 +0000</pubDate>
		<dc:creator>Roman</dc:creator>
				<category><![CDATA[Media Tools]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[JPEG]]></category>
		<category><![CDATA[M-JPEG]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://alax.info/blog/?p=1073</guid>
		<description><![CDATA[A small fix for M-JPEG video streams retrieved by HTTP Stream Source Filter:

Username and password contained in URL are honored for Basic HTTP authentication
Correctly parsed HTTP response headers with quotes, e.g.:
Content-Type: multipart/x-mixed-replace; boundary=&#8220;myboundary&#8220;

Partial Visual C++ .NET 2008 source code is available from SVN, release binary included.
]]></description>
			<content:encoded><![CDATA[<p>A small fix for <a href="http://en.wikipedia.org/wiki/Motion_JPEG">M-JPEG</a> video streams retrieved by <a href="http://alax.info/blog/741">HTTP Stream Source Filter</a>:</p>
<ul>
<li>Username and password contained in URL are honored for <a href="http://en.wikipedia.org/wiki/Basic_access_authentication">Basic HTTP authentication</a></li>
<li>Correctly parsed HTTP response headers with quotes, e.g.:<br />
<em>Content-Type: multipart/x-mixed-replace; boundary=<strong><span style="color: #ff0000;">&#8220;</span></strong>myboundary<strong><span style="color: #ff0000;">&#8220;</span></strong></em></li>
</ul>
<p>Partial Visual C++ .NET 2008 source code is <a href="http://code.assembla.com/roatl-utilities/subversion/nodes/trunk/MediaTools/">available from SVN</a>, release binary <a href="http://code.assembla.com/roatl-utilities/subversion/nodes/trunk/MediaTools/_Bin/Release Trace">included</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://alax.info/blog/1073/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MediaTools: HTTP Stream File Renderer Filter and more</title>
		<link>http://alax.info/blog/817</link>
		<comments>http://alax.info/blog/817#comments</comments>
		<pubDate>Sat, 14 Feb 2009 18:08:53 +0000</pubDate>
		<dc:creator>Roman</dc:creator>
				<category><![CDATA[ATL]]></category>
		<category><![CDATA[Media Tools]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[WTL]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[DirectShow]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[JPEG]]></category>
		<category><![CDATA[M-JPEG]]></category>

		<guid isPermaLink="false">http://alax.info/blog/?p=817</guid>
		<description><![CDATA[In order to better troubleshoot network cameras and other devices, I added a new DirectShow filter to write HTTP response headers and body into a single file, one file (actually a pairs of files, the second file contains UTF-8 formatted HTTP response headers) per HTTP response.
While troubleshootting JPEG artefact issue with I used the following [...]]]></description>
			<content:encoded><![CDATA[<p>In order to better troubleshoot network cameras and other devices, I added a new DirectShow filter to write HTTP response headers and body into a single file, one file (actually a pairs of files, the second file contains UTF-8 formatted HTTP response headers) per HTTP response.</p>
<p>While troubleshootting <a href="http://ijg.org">JPEG</a> artefact issue with I used the following graph:</p>
<p><a href="http://alax.info/blog/wp-content/uploads/2009/02/14-image001.png"><img class="alignnone size-medium wp-image-818" title="HTTP Stream File Renderer Filter in Filter Graph" src="http://alax.info/blog/wp-content/uploads/2009/02/14-image001-300x188.png" alt="HTTP Stream File Renderer Filter in Filter Graph" width="300" height="188" /></a></p>
<p>which started <a href="http://en.wikipedia.org/wiki/Motion_JPEG#M-JPEG_over_HTTP">M-JPEG</a> streaming from a camera and had entire stream written into <em>Response-01586228-0001-0001-Headers.txt</em> (Headers) and <em>Response-01586228-0001-0001.dat</em> (Data) files, while parsed JPEG frames were also written into individual files and were available for comparison.</p>
<p>Other changes include:</p>
<ul>
<li>new HTTP Stream File Renderer Filter (details are below)</li>
<li>attachable media types on internally used memory allocators, which enable filters to effectively reagree media types in running state</li>
<li>workaround for <a href="http://panasonic.co.jp/pcc/products/en/netwkcam/lineup/bl-c140/index.html">Panasonic BL-C140</a> camera (may be also helpful for other models), details <a href="http://alax.info/blog/741/comment-page-1#comment-5669">here</a></li>
</ul>
<p>There also seems to be a bug in <a href="http://www.intel.com/cd/software/products/asmo-na/eng/302910.htm">Intel IPP 6.0</a> JPEG decoder that leaves bottom right image block incorrectly decoded, only when a sequence of images is decoded and the frame is not the first in the sequence.</p>
<p>A partial Visual C++ .NET 2008 source code is <a href="http://code.assembla.com/roatl-utilities/subversion/nodes/trunk/Extended7zShell">available from SVN</a>, release binary <a href="http://code.assembla.com/roatl-utilities/subversion/nodes/trunk/MediaTools/_Bin/Release Trace/Acquisition.dll?format=raw">included</a>.</p>
<p><span id="more-817"></span></p>
<h2>File and Class Summary</h2>
<h3>Acqusition.dll</h3>
<p>Acqusition.dll (<a href="http://code.assembla.com/roatl-utilities/subversion/nodes/trunk/MediaTools/_Bin/Release Trace/Acquisition.dll?format=raw">download</a>) hosts the following classes:</p>
<ul>
<li>DirectShow Filters
<ul>
<li><span style="text-decoration: underline;">HTTP Stream File Renderer Filter</span>, to write raw HTTP response headers and data into files</li>
</ul>
</li>
</ul>
<h2>Class Overview</h2>
<h3>HTTP Stream File Renderer Filter</h3>
<p>The filter renders input stream of one or more HTTP responses and write HTTP response headers and data into files, per HTTP response, into provided directory.</p>
<ul>
<li>Filter Executable: Acquisition.dll</li>
<li>Filter CLSID: __uuidof(HttpStreamFileRendererFilter) {B02FDAEF-E851-4380-82D6-04772E33675D}</li>
<li>Filter Property Page CLSID: __uuidof(HttpStreamFileRendererFilterDirectoryPropertyPage), {FAF31D20-842A-46b4-B6F8-E410FB0188A5}</li>
<li>Filter Merit: <a href="http://msdn.microsoft.com/en-us/library/ms787275(VS.85).aspx">MERIT_DO_NOT_USE</a></li>
<li>Filter Category: <a href="http://msdn.microsoft.com/en-us/library/ms783347(VS.85).aspx">CLSID_LegacyAmFilterCategory</a></li>
<li>Filter Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms682273(VS.85).aspx">IPersistStreamInit</a>, <a href="http://msdn.microsoft.com/en-us/library/ms690091(VS.85).aspx">IPersistStream</a>, <a href="http://msdn.microsoft.com/en-us/library/ms695217(VS.85).aspx">ISpecifyPropertyPages</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784601(VS.85).aspx">IBaseFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785914(VS.85).aspx">IMediaFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms688695(VS.85).aspx">IPersist</a>, <a href="http://msdn.microsoft.com/en-us/library/ms683857.aspx"></a><a href="http://msdn.microsoft.com/en-us/library/ms784083(VS.85).aspx">IAMovieSetup</a>, <a href="http://msdn.microsoft.com/en-us/library/ms783950(VS.85).aspx">IAMFilterMiscFlags</a>, IHttpStreamFileRendererFilter, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785712.aspx">IFileSinkFilter2</a> (not available in graphedt.exe process), <a href="http://msdn.microsoft.com/en-us/library/ms785715(VS.85).aspx">IFileSinkFilter</a> (not available in graphedt.exe process)</li>
<li>Filter Pins: single input pin (Input)</li>
<li>Input Pin Media Types: MEDIATYPE_Stream/MEDIASUBTYPE_NULL</li>
<li>Input Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786054(VS.85).aspx">IMemInputPin</a></li>
</ul>
<h4>Remarks</h4>
<p>None.</p>
]]></content:encoded>
			<wfw:commentRss>http://alax.info/blog/817/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MediaTools to deliver video from network/IP cameras and video servers into DirectShow environment</title>
		<link>http://alax.info/blog/741</link>
		<comments>http://alax.info/blog/741#comments</comments>
		<pubDate>Sat, 10 Jan 2009 12:52:46 +0000</pubDate>
		<dc:creator>Roman</dc:creator>
				<category><![CDATA[ATL]]></category>
		<category><![CDATA[Media Tools]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[WTL]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[DirectShow]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[JPEG]]></category>
		<category><![CDATA[M-JPEG]]></category>

		<guid isPermaLink="false">http://alax.info/blog/?p=741</guid>
		<description><![CDATA[I decided to gather DirectShow code and filters related to processing video from network/IP cameras and video servers into a library (in fact, a few libraries) so that it could be easily used for testing, research and other purposes. As time is going to permit, documentation and sample code will be provided, further development will [...]]]></description>
			<content:encoded><![CDATA[<p>I decided to gather DirectShow code and filters related to processing video from network/IP cameras and video servers into a library (in fact, a few libraries) so that it could be easily used for testing, research and other purposes. As time is going to permit, documentation and sample code will be provided, further development will be carried out.</p>
<p>This initial post publishes two libraries (DLLs) which host <a href="http://msdn.microsoft.com/en-us/library/ms783323(VS.85).aspx">DirectShow</a> filters to receive <a href="http://en.wikipedia.org/wiki/JPEG">JPEG</a> or <a href="http://en.wikipedia.org/wiki/MJPEG#M-JPEG_over_HTTP">M-JPEG</a> video from network using HTTP based protocol, decode video with the help of <a href="http://www.intel.com/cd/software/products/asmo-na/eng/302910.htm">Intel IPP 6.0 library</a> (UMC version of the JPEG implementation), as well as perform additional helpful features, including writing series of frames into .JPG files and emulating video feed from saved .JPG files, conversion filters to obtain video in 24-bit and 32-bit <a href="http://fourcc.org/rgb.php#BI_RGB">RGB</a> formats, <a href="http://fourcc.org/yuv.php#YUY2">YUY2</a> and <a href="http://fourcc.org/yuv.php#YV12">YV12</a> formats.</p>
<h2>File and Class Summary</h2>
<h3>Acqusition.dll</h3>
<p>Acqusition.dll (<a href="http://code.assembla.com/roatl-utilities/subversion/nodes/trunk/MediaTools/_Bin/Release Trace/Acquisition.dll?format=raw">download</a>) hosts the following classes:</p>
<ul>
<li>DirectShow Filters
<ul>
<li><span style="text-decoration: underline;">HTTP Stream Source Filter</span>, to receive HTTP content and deliver into DirectShow environment through output pin</li>
<li><span style="text-decoration: underline;">JPEG HTTP Stream Parser Filter</span>, to parse HTTP content (typically received from HTTP Stream Source Filter) of image/jpeg and multipart/x-mixed-replace types and output JPEG frames</li>
<li><span style="text-decoration: underline;">JPEG Multi File Renderer Filter</span>, to write parsed JPEG frames (typically received from JPEG HTTP Stream Parser Filter) into files</li>
<li><span style="text-decoration: underline;">JPEG Multi File Source Filter</span>, to read JPEG files (typically written by JPEG Multi File Renderer Filter) and stream video into DirectShow environmentto emulate video feed</li>
</ul>
</li>
</ul>
<p>Acqusition.dll is dependent only on well known DLLs and does not require presence/redistribution of specific dependency files.</p>
<h3>CodingI.dll</h3>
<p>CodingI.dll (<a href="http://code.assembla.com/roatl-utilities/subversion/nodes/trunk/MediaTools/_Bin/Release%20Trace/CodingI.dll?format=raw">download</a>) hosts the following classes:</p>
<ul>
<li>DirectShow Filters
<ul>
<li><span style="text-decoration: underline;">JPEG Frame Decoder Filter</span>, to parse JPEG data and pass frames downstream with a corresponding mediatype provided with VIDEOINFOHEADER format and correct resolution; in case of resolution changes the filter is capable of dynamically re-agreeing media type with downstream peer</li>
<li><span style="text-decoration: underline;">JPEG Decoder Filter</span>, to decode JPEG data into 24-bit/32-bit RGB (unfortunately Intel IPP codec has limited capabilities of decoding video into YUV pixel formats)</li>
<li><span style="text-decoration: underline;">YUY2 Encoder Filter</span>, to convert RGB data into YUY2 pixel format</li>
<li><span style="text-decoration: underline;">YV12 Encoder Filter</span>, to convert RGB data into YV12 pixel format</li>
</ul>
</li>
<li>Shell Extensions
<ul>
<li><span style="text-decoration: underline;">JPEG File Resolution Shell Property Page</span>, to provide additional information (such as sampling, color format, resolution) about .JPG and .JPEG files through a shell property page</li>
</ul>
</li>
</ul>
<p>CodingI.dll is dependent on <a href="http://www.intel.com/cd/software/products/asmo-na/eng/302910.htm">Intel IPP 6.0 library</a> DLLs and relies on availability of these dependencies in the system. For the CodingI.dll to be operationable, it is required to have a free, trial or registered version of Intel IPP library installed. In particular, the files that are sufficient to be present/redistributed are:</p>
<ul>
<li>libguide40.dll, libiomp5md.dll</li>
<li>ippcore-6.0.dll</li>
<li>ippi-6.0.dll, ippj-6.0.dll, ipps-6.0.dll, ippcc-6.0.dll, ippvc-6.0.dll</li>
<li>ippipx-6.0.dll, ippjpx-6.0.dll, ippspx-6.0.dll, ippccpx-6.0.dll, ippvcpx-6.0.dll</li>
</ul>
<h2>Quick Usage Example</h2>
<p>Given a M-JPEG compatible network camera on IP address 98.76.54.32, the graph constructed as shown below is capable to deliver video data and render it through standard <a href="http://msdn.microsoft.com/en-us/library/ms787917(VS.85).aspx">Video Mixing Renderer Filter</a>.</p>
<p>Assume the camera is <a href="http://www.stardot.com/netcamsc/index.html">StarDot NetCam SC</a> series, with /jpeg.cgi HTTP request to query for JPEG image and /nph-mjpeg.cgi HTTP request to query for M-JPEG video feed.</p>
<p>To construct the graph in <a href="http://msdn.microsoft.com/en-us/library/ms787460(VS.85).aspx">GraphEdit</a> (<a href="http://www.monogram.sk/">GraphStudio</a>), first it is required to manually add <strong>Alax.Info HTTP Stream Source Filter</strong> and provide HTTP URL for the request in the property page:</p>
<p><a href="http://alax.info/blog/wp-content/uploads/2009/01/10-image001.png"><img class="alignnone size-medium wp-image-744" title="HTTP Stream Source Filter Properties" src="http://alax.info/blog/wp-content/uploads/2009/01/10-image001-259x300.png" alt="" width="259" height="300" /></a></p>
<p>Then an <strong>Alax.Info JPEG HTTP Stream Parser Filter</strong> is added and connected downstream to the previously added source filter:</p>
<p><a href="http://alax.info/blog/wp-content/uploads/2009/01/10-image002.png"><img class="alignnone size-medium wp-image-745" title="Rendering JPEG HTTP Stream Parser Filter output pin" src="http://alax.info/blog/wp-content/uploads/2009/01/10-image002-300x153.png" alt="" width="300" height="153" /></a></p>
<p>A this point it is possible to automatically render output pin and DirectShow intelligent connect will add the rest of required filters, <strong>Alax.Info JPEG Frame Decoder (I)</strong>, <strong>Alax.Info JPEG Decoder (I)</strong> and Video Renderer.</p>
<p><a href="http://alax.info/blog/wp-content/uploads/2009/01/10-image003.png"><img class="alignnone size-medium wp-image-746" title="StarDot NetCam SC5 M-JPEG Video Streaming Filter Graph" src="http://alax.info/blog/wp-content/uploads/2009/01/10-image003-300x154.png" alt="" width="300" height="154" /></a></p>
<p>However, in order for the graph to run in GraphEdit it is required to manually provide correct video resolution in the properties of JPEG Frame Decoder Filter and once applied reconnect all downstream connections up to video renderer in order to enforce new media type.</p>
<p><a href="http://alax.info/blog/wp-content/uploads/2009/01/10-image004.png"><img class="alignnone size-medium wp-image-747" title="JPEG Frame Decoder Filter Properties" src="http://alax.info/blog/wp-content/uploads/2009/01/10-image004-259x300.png" alt="" width="259" height="300" /></a></p>
<p>Running the graph will start streaming video.</p>
<h2>Class Overview</h2>
<h3>HTTP Stream Source Filter</h3>
<p>The filter sends one or series of HTTP requests to receive data from network location and stream received data into DirectShow environment.</p>
<p><span id="more-741"></span></p>
<ul>
<li>Filter Executable: Acquisition.dll</li>
<li>Filter CLSID: __uuidof(HttpStreamSourceFilter) {943AC94A-3188-4ABC-9BD0-6CFF37CEBBCE}</li>
<li>Filter Property Page CLSID: __uuidof(HttpStreamSourceFilterLocationPropertyPage), {91EF5CEC-30D1-4e2a-871D-F50A8CB4A7B1}</li>
<li>Filter Merit: <a href="http://msdn.microsoft.com/en-us/library/ms787275(VS.85).aspx">MERIT_UNLIKELY</a></li>
<li>Filter Category: <a href="http://msdn.microsoft.com/en-us/library/ms783347(VS.85).aspx">CLSID_LegacyAmFilterCategory</a></li>
<li>Filter Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms682273(VS.85).aspx">IPersistStreamInit</a>, <a href="http://msdn.microsoft.com/en-us/library/ms690091(VS.85).aspx">IPersistStream</a>, <a href="http://msdn.microsoft.com/en-us/library/ms695217(VS.85).aspx">ISpecifyPropertyPages</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784601(VS.85).aspx">IBaseFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785914(VS.85).aspx">IMediaFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms688695(VS.85).aspx">IPersist</a>, <a href="http://msdn.microsoft.com/en-us/library/ms683857.aspx">IConnectionPointContainer</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784083(VS.85).aspx">IAMovieSetup</a>, <a href="http://msdn.microsoft.com/en-us/library/ms783950(VS.85).aspx">IAMFilterMiscFlags</a>, IHttpStreamSourceFilter, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785718.aspx">IFileSourceFilter</a> (not available in graphedt.exe process)</li>
<li>Filter Pins: single output pin (Output)</li>
<li>Output Pin Media Types: MEDIATYPE_Stream/MEDIASUBTYPE_NULL</li>
<li>Output Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784095(VS.85).aspx">IAMPushSource</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784095(VS.85).aspx">IAMLatency</a></li>
</ul>
<h4>Remarks</h4>
<p>Filter is a live source and delivers raw data received from network HTTP request(s) in an endless manner. In case the HTTP response is of a finite Content-Length, filter will continuously repeat request. Each first media sample of a response is marked with <a href="http://msdn.microsoft.com/en-us/library/ms779271(VS.85).aspx">AM_SAMPLE_DATADISCONTINUITY</a> flag.</p>
<p>Filter exposes connection point and events for the top level application to be able to receive error events as well as callbacks to modify HTTP request verb and object name immediately before the request is sent to network.</p>
<p>Filter is using custom memory allocator through which is exposes <strong>IServiceProvider</strong> interface on the media samples through which downstream filters could gain access to <strong>IHttpStreamSourceHeaders</strong> interface and obtain HTTP response headers.</p>
<h3>JPEG HTTP Stream Parser Filter</h3>
<p>The filter takes data stream on the input and parses streams of <em>image/jpeg</em> and <em>multipart/x-mixed-replace</em> MIME content types into JPEG frames, so that each output media sample contains one JPEG frame.</p>
<ul>
<li>Filter Executable: Acquisition.dll</li>
<li>Filter CLSID: __uuidof(JpegHttpStreamParserFilter) {805469B4-6F03-4532-88C1-7A07A7C8961C}</li>
<li>Filter Property Page CLSID: N/A</li>
<li>Filter Merit: <a href="http://msdn.microsoft.com/en-us/library/ms787275(VS.85).aspx">MERIT_UNLIKELY</a></li>
<li>Filter Category: <a href="http://msdn.microsoft.com/en-us/library/ms783347(VS.85).aspx">CLSID_LegacyAmFilterCategory</a></li>
<li>Filter Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms682273(VS.85).aspx">IPersistStreamInit</a>, <a href="http://msdn.microsoft.com/en-us/library/ms690091(VS.85).aspx">IPersistStream</a>, <a href="http://msdn.microsoft.com/en-us/library/ms695217(VS.85).aspx">ISpecifyPropertyPages</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784601(VS.85).aspx">IBaseFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785914(VS.85).aspx">IMediaFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms688695(VS.85).aspx">IPersist</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784083(VS.85).aspx">IAMovieSetup</a>, <a href="http://msdn.microsoft.com/en-us/library/ms783950(VS.85).aspx">IAMFilterMiscFlags</a>, IJpegHttpStreamParserFilter, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a></li>
<li>Filter Pins: single input and single output pin (Input, Output)</li>
<li>Input Pin Media Types: MEDIATYPE_Stream/MEDIASUBTYPE_NULL</li>
<li>Input Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786054(VS.85).aspx">IMemInputPin</a><a href="http://msdn.microsoft.com/en-us/library/ms784095(VS.85).aspx"></a></li>
<li>Output Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_JPEG (FOURCC &#8216;AIJ0&#8242;), MEDIATYPE_Stream/MEDIASUBTYPE_JPEG (FOURCC &#8216;AIJ0&#8242;)</li>
<li>Output Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786015(VS.85).aspx">IMediaSeeking</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785974(VS.85).aspx">IMediaPosition</a>, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a><a href="http://msdn.microsoft.com/en-us/library/ms784095(VS.85).aspx"></a></li>
</ul>
<h4>Remarks</h4>
<p>Filter is using custom memory allocator through which is exposes <strong>IServiceProvider</strong> interface on the media samples through which downstream filters could gain access to <strong>IHttpStreamSourceHeaders</strong> interface and obtain HTTP response headers, both original response and subheaders of multipart Content-Type parts.</p>
<h3>JPEG MultiFile Renderer Filter</h3>
<p>The filter received JPEG frames and writes data into separate .JPG files, one per frame, into provided directory.</p>
<ul>
<li>Filter Executable: Acquisition.dll</li>
<li>Filter CLSID: __uuidof(JpegMultiFileRendererFilter) {4194A70D-7FB0-4362-973E-B58EA5690FE6}</li>
<li>Filter Property Page CLSID: __uuidof(JpegMultiFileRendererFilterDirectoryPropertyPage), {300AAAC6-9D89-4633-A7A8-CF7F22D5492F}</li>
<li>Filter Merit: <a href="http://msdn.microsoft.com/en-us/library/ms787275(VS.85).aspx">MERIT_DO_NOT_USE</a></li>
<li>Filter Category: <a href="http://msdn.microsoft.com/en-us/library/ms783347(VS.85).aspx">CLSID_LegacyAmFilterCategory</a></li>
<li>Filter Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms682273(VS.85).aspx">IPersistStreamInit</a>, <a href="http://msdn.microsoft.com/en-us/library/ms690091(VS.85).aspx">IPersistStream</a>, <a href="http://msdn.microsoft.com/en-us/library/ms695217(VS.85).aspx">ISpecifyPropertyPages</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784601(VS.85).aspx">IBaseFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785914(VS.85).aspx">IMediaFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms688695(VS.85).aspx">IPersist</a>, <a href="http://msdn.microsoft.com/en-us/library/ms683857.aspx">IConnectionPointContainer</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784083(VS.85).aspx">IAMovieSetup</a>, <a href="http://msdn.microsoft.com/en-us/library/ms783950(VS.85).aspx">IAMFilterMiscFlags</a>, IJpegMultiFileRendererFilter, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785712.aspx">IFileSinkFilter2</a> (not available in graphedt.exe process), <a href="http://msdn.microsoft.com/en-us/library/ms785715(VS.85).aspx">IFileSinkFilter</a> (not available in graphedt.exe process)</li>
<li>Filter Pins: single input pin (Input)</li>
<li>Input Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_JPEG (FOURCC &#8216;AIJ0&#8242;)</li>
<li>Input Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786054(VS.85).aspx">IMemInputPin</a><a href="http://msdn.microsoft.com/en-us/library/ms784095(VS.85).aspx"></a></li>
</ul>
<h4>Remarks</h4>
<p>None.</p>
<h3>JPEG MultiFile Source Filter</h3>
<p>The filter reads contents of provided directory and stream contained .JPG files emulating a video feed.</p>
<ul>
<li>Filter Executable: Acquisition.dll</li>
<li>Filter CLSID: __uuidof(JpegMultiFileSourceFilter) {B749D696-E479-44dc-AF17-220EBEDFAAE8}</li>
<li>Filter Property Page CLSID: __uuidof(JpegMultiFileSourceFilterDirectoryPropertyPage), {DE611B46-F6BA-4de5-A714-BEDE243A0BAC}</li>
<li>Filter Merit: <a href="http://msdn.microsoft.com/en-us/library/ms787275(VS.85).aspx">MERIT_DO_NOT_USE</a></li>
<li>Filter Category: <a href="http://msdn.microsoft.com/en-us/library/ms783347(VS.85).aspx">CLSID_LegacyAmFilterCategory</a></li>
<li>Filter Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms682273(VS.85).aspx">IPersistStreamInit</a>, <a href="http://msdn.microsoft.com/en-us/library/ms690091(VS.85).aspx">IPersistStream</a>, <a href="http://msdn.microsoft.com/en-us/library/ms695217(VS.85).aspx">ISpecifyPropertyPages</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784601(VS.85).aspx">IBaseFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785914(VS.85).aspx">IMediaFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms688695(VS.85).aspx">IPersist</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784083(VS.85).aspx">IAMovieSetup</a>, <a href="http://msdn.microsoft.com/en-us/library/ms783950(VS.85).aspx">IAMFilterMiscFlags</a>, IJpegMultiFileSourceFilter, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785718.aspx">IFileSourceFilter</a> (not available in graphedt.exe process)</li>
<li>Filter Pins: single output pin (Output)</li>
<li>Output Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_JPEG (FOURCC &#8216;AIJ0&#8242;), MEDIATYPE_Stream/MEDIASUBTYPE_JPEG (FOURCC &#8216;AIJ0&#8242;)</li>
<li>Output Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784095(VS.85).aspx">IAMPushSource</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784095(VS.85).aspx">IAMLatency</a></li>
</ul>
<h4>Remarks</h4>
<p>The filter converts file time stamps into media sample time stamps to convert file write rate into DirectShow rendering/playback rate.</p>
<h3>JPEG Frame Decoder Filter</h3>
<p>The filter takes raw JPEG input media samples in the input, parses JPEG headers and outputs media samples supplied with valid <a href="http://msdn.microsoft.com/en-us/library/ms787915(VS.85).aspx">VIDEOINFOHEADER</a> format with correct resolution.</p>
<ul>
<li>Filter Executable: CodingI.dll</li>
<li>Filter CLSID: __uuidof(JpegFrameDecoderFilter) {EA070483-8D39-4782-8C7B-489AD8B6177F}</li>
<li>Filter Property Page CLSID: __uuidof(JpegFrameDecoderFilterResolutionPropertyPage), {E14A1F56-A683-4ec2-86B0-F7B6EABF7DC6}</li>
<li>Filter Merit: <a href="http://msdn.microsoft.com/en-us/library/ms787275(VS.85).aspx">MERIT_UNLIKELY &#8211; 1<br />
</a></li>
<li>Filter Category: <a href="http://msdn.microsoft.com/en-us/library/ms783347(VS.85).aspx">CLSID_LegacyAmFilterCategory</a></li>
<li>Filter Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms682273(VS.85).aspx">IPersistStreamInit</a>, <a href="http://msdn.microsoft.com/en-us/library/ms690091(VS.85).aspx">IPersistStream</a>, <a href="http://msdn.microsoft.com/en-us/library/ms695217(VS.85).aspx">ISpecifyPropertyPages</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784601(VS.85).aspx">IBaseFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785914(VS.85).aspx">IMediaFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms688695(VS.85).aspx">IPersist</a>, <a href="http://msdn.microsoft.com/en-us/library/ms683857.aspx">IConnectionPointContainer</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784083(VS.85).aspx">IAMovieSetup</a>, <a href="http://msdn.microsoft.com/en-us/library/ms783950(VS.85).aspx">IAMFilterMiscFlags</a>, IJpegFrameDecoderFilter, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a></li>
<li>Filter Pins: single input and single output pin (Input, Output)</li>
<li>Input Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_JPEG (FOURCC &#8216;AIJ0&#8242;)</li>
<li>Input Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786054(VS.85).aspx">IMemInputPin</a></li>
<li>Output Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_JPEG (FOURCC &#8216;AIJ0&#8242;)/FORMAT_VideoInfo</li>
<li>Output Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786015(VS.85).aspx">IMediaSeeking</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785974(VS.85).aspx">IMediaPosition</a>, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a></li>
</ul>
<h4>Remarks</h4>
<p>Filter is attempting to dynamically re-agree media type with downstream filter in case media type changes. Initialially in absence of data about effective video resolution, the filter uses default resolution (320&#215;240 or overridden through private interface <strong>IJpegFrameDecoderFilter</strong>.</p>
<p>Filter is attempting to share memory allocators on input and output pins to be able to pass media samples transparently without copying data.</p>
<p>Filter exposes connection point and events for the top level application to be able to receive resolution change events.</p>
<h3>JPEG Decoder Filter</h3>
<p>The filter decodes input media samples of JPEG  format and outputs 24-bit/32-bit RGB media samples.</p>
<ul>
<li>Filter Executable: CodingI.dll</li>
<li>Filter CLSID: __uuidof(JpegFrameFilter) {28A8C753-363C-460a-9D99-74E534A5114F}</li>
<li>Filter Property Page CLSID: N/A</li>
<li>Filter Merit: <a href="http://msdn.microsoft.com/en-us/library/ms787275(VS.85).aspx">MERIT_NORMAL + 0&#215;10<br />
</a></li>
<li>Filter Category: <a href="http://msdn.microsoft.com/en-us/library/ms783347(VS.85).aspx">CLSID_LegacyAmFilterCategory</a></li>
<li>Filter Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms682273(VS.85).aspx">IPersistStreamInit</a>, <a href="http://msdn.microsoft.com/en-us/library/ms690091(VS.85).aspx">IPersistStream</a>, <a href="http://msdn.microsoft.com/en-us/library/ms695217(VS.85).aspx">ISpecifyPropertyPages</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784601(VS.85).aspx">IBaseFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785914(VS.85).aspx">IMediaFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms688695(VS.85).aspx">IPersist</a>, <a href="http://msdn.microsoft.com/en-us/library/ms683857.aspx">IConnectionPointContainer</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784083(VS.85).aspx">IAMovieSetup</a>, <a href="http://msdn.microsoft.com/en-us/library/ms783950(VS.85).aspx">IAMFilterMiscFlags</a>, IJpegDecoderFilter, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a></li>
<li>Filter Pins: single input and single output pin (Input, Output)</li>
<li>Input Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_JPEG (FOURCC &#8216;AIJ0&#8242;)/FORMAT_VideoInfo</li>
<li>Input Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786054(VS.85).aspx">IMemInputPin</a></li>
<li>Output Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_RGB24/FORMAT_VideoInfo, MEDIATYPE_Video/MEDIASUBTYPE_RGB32/FORMAT_VideoInfo</li>
<li>Output Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786015(VS.85).aspx">IMediaSeeking</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785974(VS.85).aspx">IMediaPosition</a>, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a></li>
</ul>
<h4>Remarks</h4>
<p>Filter is attempting to re-agree media type on the output pin in case it receives a request to change media type on the input pin, in order to transparently support dynamic resolution change.</p>
<h3>YUY2 Encoder Filter</h3>
<p>The filter converts 24-bit and 32-bit RGB media samples into <a href="http://fourcc.org/yuv.php#YUY2">YUY2</a> pixel format.</p>
<ul>
<li>Filter Executable: CodingI.dll</li>
<li>Filter CLSID: __uuidof(Yuy2EncoderFilter) {5302581E-A3B2-408b-BC23-71ECA8BC8885}</li>
<li>Filter Property Page CLSID: N/A</li>
<li>Filter Merit: <a href="http://msdn.microsoft.com/en-us/library/ms787275(VS.85).aspx">MERIT_DO_NOT_USE + 0&#215;10<br />
</a></li>
<li>Filter Category: <a href="http://msdn.microsoft.com/en-us/library/ms783347(VS.85).aspx">CLSID_LegacyAmFilterCategory</a></li>
<li>Filter Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms784601(VS.85).aspx">IBaseFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785914(VS.85).aspx">IMediaFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms688695(VS.85).aspx">IPersist</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784083(VS.85).aspx">IAMovieSetup</a>, <a href="http://msdn.microsoft.com/en-us/library/ms783950(VS.85).aspx">IAMFilterMiscFlags</a></li>
<li>Filter Pins: single input and single output pin (Input, Output)</li>
<li>Input Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_RGB24/FORMAT_VideoInfo, MEDIATYPE_Video/MEDIASUBTYPE_RGB32/FORMAT_VideoInfo</li>
<li>Input Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786054(VS.85).aspx">IMemInputPin</a></li>
<li>Output Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_YUY2/FORMAT_VideoInfo,</li>
<li>Output Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786015(VS.85).aspx">IMediaSeeking</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785974(VS.85).aspx">IMediaPosition</a>, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a></li>
</ul>
<h4>Remarks</h4>
<p>Filter is attempting to re-agree media type on the output pin in case it receives a request to change media type on the input pin, in order to transparently support dynamic resolution change.</p>
<h3>YV12 Encoder Filter</h3>
<p>The filter converts 24-bit and 32-bit RGB media samples into <a href="http://fourcc.org/yuv.php#YV12">YV12</a> pixel format.</p>
<ul>
<li>Filter Executable: CodingI.dll</li>
<li>Filter CLSID: __uuidof(Yv12EncoderFilter) {CDC777A0-0DB0-4a01-9C42-F23F053F9F36}</li>
<li>Filter Property Page CLSID: N/A</li>
<li>Filter Merit: <a href="http://msdn.microsoft.com/en-us/library/ms787275(VS.85).aspx">MERIT_DO_NOT_USE + 0&#215;10<br />
</a></li>
<li>Filter Category: <a href="http://msdn.microsoft.com/en-us/library/ms783347(VS.85).aspx">CLSID_LegacyAmFilterCategory</a></li>
<li>Filter Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms784601(VS.85).aspx">IBaseFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785914(VS.85).aspx">IMediaFilter</a>, <a href="http://msdn.microsoft.com/en-us/library/ms688695(VS.85).aspx">IPersist</a>, <a href="http://msdn.microsoft.com/en-us/library/ms784083(VS.85).aspx">IAMovieSetup</a>, <a href="http://msdn.microsoft.com/en-us/library/ms783950(VS.85).aspx">IAMFilterMiscFlags</a></li>
<li>Filter Pins: single input and single output pin (Input, Output)</li>
<li>Input Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_RGB24/FORMAT_VideoInfo, MEDIATYPE_Video/MEDIASUBTYPE_RGB32/FORMAT_VideoInfo</li>
<li>Input Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786054(VS.85).aspx">IMemInputPin</a></li>
<li>Output Pin Media Types: MEDIATYPE_Video/MEDIASUBTYPE_YV12/FORMAT_VideoInfo,</li>
<li>Output Pin Interfaces: <a href="http://msdn.microsoft.com/en-us/library/ms786565(VS.85).aspx">IPin</a>, <a href="http://msdn.microsoft.com/en-us/library/ms786015(VS.85).aspx">IMediaSeeking</a>, <a href="http://msdn.microsoft.com/en-us/library/ms785974(VS.85).aspx">IMediaPosition</a>, <a href="http://msdn.microsoft.com/en-us/library/ms221608.aspx">IDispatch</a></li>
</ul>
<h4>Remarks</h4>
<p>Filter is attempting to re-agree media type on the output pin in case it receives a request to change media type on the input pin, in order to transparently support dynamic resolution change.</p>
]]></content:encoded>
			<wfw:commentRss>http://alax.info/blog/741/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>WinHTTP escaping problem</title>
		<link>http://alax.info/blog/609</link>
		<comments>http://alax.info/blog/609#comments</comments>
		<pubDate>Tue, 26 Aug 2008 20:07:44 +0000</pubDate>
		<dc:creator>Roman</dc:creator>
				<category><![CDATA[Camera of the Day]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Utilities]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[RFC]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[winhttp]]></category>

		<guid isPermaLink="false">http://alax.info/blog/?p=609</guid>
		<description><![CDATA[WinHttpCrackUrl and WinHttpCreateUrl API functions are breaking URL string into components and recompose back to string. There was a mess with passwords and security issues since when putting password into URL is no more acceptable. Experienced users might remember the times when URL could embed password, e.g. ftp://john:mysecretpassword@host.com/path. Password is lo longer accepted by major [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://msdn.microsoft.com/en-us/library/aa384092(VS.85).aspx">WinHttpCrackUrl</a> and <a href="http://msdn.microsoft.com/en-us/library/aa384093(VS.85).aspx">WinHttpCreateUrl</a> API functions are breaking URL string into components and recompose back to string. There was a mess with passwords and security issues since when putting password into URL is no more acceptable. Experienced users might remember the times when URL could embed password, e.g. <em>ftp://john:mysecretpassword@host.com/path</em>. Password is lo longer accepted by major applications in a typed in string and no more allowed by updated <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986 &#8220;Uniform Resource Identifier (URI): Generic Syntax&#8221;</a>:</p>
<pre>3.2.1.  User Information

   The userinfo subcomponent may consist of a user name and, optionally,
   scheme-specific information about how to gain authorization to access
   the resource.  The user information, if present, is followed by a
   commercial at-sign ("@") that delimits it from the host.

      userinfo    = *( unreserved / pct-encoded / sub-delims / ":" )

   Use of the format "user:password" in the userinfo field is
   deprecated.  <strong>Applications should not render as clear text any data
   after the first colon (":") character found within a userinfo
   subcomponent unless the data after the colon is the empty string
   (indicating no password).
</strong></pre>
<p>What if we don&#8217;t have URLs typed in? But it still convenient to keep password as a part of URL? Luckily there is such thing as compatibility, so we can rely on <a href="http://msdn.microsoft.com/en-us/library/aa384276(VS.85).aspx">WinHTTP</a> subsystem to process passwords for us. The problem however is escapement. The most tricky is that it is not a bug, it is documented but is unintuitive. The cracking part would unescape all components if ICU_DECODE flag is provided. The composing part however will only escape (ICU_ESCAPE) the part to the right from port number (whether it is specified or expected to be)!</p>
<p>For example (see source code below):</p>
<pre>g_ppszUrls[3] http://user:pa<span style="color: #008000;">%40</span>ss@site.com/path?name=value<span style="color: #0000ff;">%20%2F%3A%40</span>
.lpszScheme http
.nScheme 1
.lpszHostName site.com
.nPort 80
.lpszUserName user
.lpszPassword pa@ss
.lpszUrlPath /path
.lpszExtraInfo ?name=value /:@
pszUrl http://user:pa<span style="color: #ff0000;">@</span>ss@site.com/path?name=value<span style="color: #0000ff;"> /:@</span>
pszUrl (ICU_ESCAPE) http://user:pa<span style="color: #ff0000;">@</span>ss@site.com/path?name=value<span style="color: #0000ff;">%20/:@</span></pre>
<p><span id="more-609"></span>So, if you care for proper escapement it appears that you have to do it yourself after/before WinHTTP does the rest of the task.</p>
<p>So let us mention what is the proper RFC-compliant escaping after all:</p>
<pre>  <span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">userinfo</span>      = *( unreserved / pct-encoded / sub-delims / ":" )
...
   pct-encoded   = "%" HEXDIG HEXDIG
   unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
   sub-delims    = "!" / "$" / "&amp;" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="</pre>
<p>Visual Studio C++.NET 2008 source code and binary: <a href="http://alax.info/blog/wp-content/uploads/2008/08/winhttpurl0101.zip">WinHttpUrl01.01.zip</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://alax.info/blog/609/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
