<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-11700</id>
	<title>Nabble - w3.org - lib</title>
	<updated>2009-11-26T07:10:35Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/w3.org---lib-f11700.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/w3.org---lib-f11700.html" />
	<subtitle type="html">Libwww - the W3C Protocol Library. w3.org - lib home is &lt;a href=&quot;http://www.w3.org/Library/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26532919</id>
	<title>Re: trapping set-cookie with SSL</title>
	<published>2009-11-26T07:10:35Z</published>
	<updated>2009-11-26T07:10:35Z</updated>
	<author>
		<name>Mike Vasiljevs</name>
	</author>
	<content type="html">Many thanks! i've noticed it too - cookies are not touched for ssl &amp;nbsp;
&lt;br&gt;sites (i've tried two) and now i know why! need to recompile the &amp;nbsp;
&lt;br&gt;library and try it again sometime...
&lt;br&gt;&lt;br&gt;greetings
&lt;br&gt;&lt;br&gt;mike
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-trapping-set-cookie-with-SSL-tp26532919p26532919.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-24369713</id>
	<title>Libwww on Qnx</title>
	<published>2009-07-06T16:23:10Z</published>
	<updated>2009-07-06T16:23:10Z</updated>
	<author>
		<name>Puneet Sharma-3</name>
	</author>
	<content type="html">Hi All&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;How can i use libwww in a QNX based application. Is it at all possible to port libwww for qnx?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Regards&lt;/div&gt;&lt;div&gt;Puneet&lt;/div&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Libwww-on-Qnx-tp24369713p24369713.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23609469</id>
	<title>Re: 'Regex.h' not found problem when compiling user program under  Visual Studio 2005</title>
	<published>2009-05-18T21:04:02Z</published>
	<updated>2009-05-18T21:04:02Z</updated>
	<author>
		<name>Vic Bancroft-2</name>
	</author>
	<content type="html">Kunsheng Chen wrote:
&lt;br&gt;&amp;gt; I am new here and is working on libwww for part my project.
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Welcome !
&lt;br&gt;&amp;gt; I tested it successfully through ubuntu with the sample code 'showlinks.c'.
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Yes, various flavors of linux seem to have little issue with regular
&lt;br&gt;expression libraries, since it is part of the glibc. &amp;nbsp;For example under
&lt;br&gt;fedora core 10, we have,
&lt;br&gt;&lt;br&gt;&amp;nbsp; $ rpm -qf /usr/include/regexp.h
&lt;br&gt;&amp;nbsp; glibc-headers-2.9-3.x86_64
&lt;br&gt;&lt;br&gt;Where as my a debian system might show,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; $ dpkg-query -S &amp;quot;/usr/include/regexp.h&amp;quot;&amp;quot;
&lt;br&gt;&amp;nbsp; libc6-dev: /usr/include/regexp.h
&lt;br&gt;&lt;br&gt;What is your preferred choice of libc implementations under windows ?
&lt;br&gt;&amp;gt; However while I ported the same code to windows, and trying to compile showlinks.c in Visual Studio, I got following error:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ------------------------------------------------------------------------
&lt;br&gt;&amp;gt; fatal error C1083: Cannot open include file: 'regex.h': No such file or directory &amp;nbsp; &amp;nbsp;c:\documents and settings\administrator\Desktop\w3c-libwww-5.4.0\w3c-libwww-5.4.0\library\src\wwwsys.h &amp;nbsp; &amp;nbsp;1138 &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ------------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Ouch.
&lt;br&gt;&amp;gt; I already installed libwww through binary, downloaded source code to my desktop with extraction and import header files through &amp;lt;property&amp;gt;-&amp;lt;link&amp;gt; &amp;nbsp;in Visual Studio. &amp;nbsp;I searched for that 'regex.h' file and it is really not there, &amp;nbsp;I am not sure what is missing there, do I have to install something else ? 
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;There are some install instructions for a few platforms in the page,
&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;a href=&quot;http://www.w3.org/INSTALL.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/INSTALL.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;However, the some of the links for the windows regular expression
&lt;br&gt;library are broken. &amp;nbsp;I would suggest using cygwin.
&lt;br&gt;&lt;br&gt;Please post more details of your activity, and we can update the windows
&lt;br&gt;section of the documentation . . .
&lt;br&gt;&lt;br&gt;more,
&lt;br&gt;l8r,
&lt;br&gt;v
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;The future is here. It's just not evenly distributed yet.&amp;quot;
&lt;br&gt;&amp;nbsp;-- William Gibson, quoted by Whitfield Diffie
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/%27Regex.h%27-not-found-problem-when-compiling-user-program-under-Visual-Studio-2005-tp23594130p23609469.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23594130</id>
	<title>'Regex.h' not found problem when compiling user program under Visual Studio 2005</title>
	<published>2009-05-17T13:11:23Z</published>
	<updated>2009-05-17T13:11:23Z</updated>
	<author>
		<name>Kunsheng Chen-3</name>
	</author>
	<content type="html">Hello everyone,
&lt;br&gt;&lt;br&gt;&lt;br&gt;I am new here and is working on libwww for part my project.
&lt;br&gt;&lt;br&gt;I tested it successfully through ubuntu with the sample code 'showlinks.c'.
&lt;br&gt;&lt;br&gt;However while I ported the same code to windows, and trying to compile showlinks.c in Visual Studio, I got following error:
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------
&lt;br&gt;fatal error C1083: Cannot open include file: 'regex.h': No such file or directory &amp;nbsp; &amp;nbsp;c:\documents and settings\administrator\Desktop\w3c-libwww-5.4.0\w3c-libwww-5.4.0\library\src\wwwsys.h &amp;nbsp; &amp;nbsp;1138 &amp;nbsp; 
&lt;br&gt;&lt;br&gt;------------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&lt;br&gt;I already installed libwww through binary, downloaded source code to my desktop with extraction and import header files through &amp;lt;property&amp;gt;-&amp;lt;link&amp;gt; &amp;nbsp;in Visual Studio. &amp;nbsp;I searched for that 'regex.h' file and it is really not there, &amp;nbsp;I am not sure what is missing there, do I have to install something else ? 
&lt;br&gt;&lt;br&gt;&lt;br&gt;Any help is well appreciated,
&lt;br&gt;&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;&lt;br&gt;-Kun
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/%27Regex.h%27-not-found-problem-when-compiling-user-program-under-Visual-Studio-2005-tp23594130p23594130.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22921088</id>
	<title>Re: Regarding authentication scheme handling</title>
	<published>2009-04-06T19:17:05Z</published>
	<updated>2009-04-06T19:17:05Z</updated>
	<author>
		<name>Vic Bancroft-2</name>
	</author>
	<content type="html">Pallavi Agrawal wrote:
&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Aloha!
&lt;br&gt;&amp;gt; I am working on libwww.
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Most excellent . . .
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I have one query related to libwww handling of NTLM responses for
&lt;br&gt;&amp;gt; authentication.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Looking at the code in HTInit.c, it seems that only &amp;quot;basic&amp;quot; and &amp;quot;digest&amp;quot;
&lt;br&gt;&amp;gt; authentication schemes are supported.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; PUBLIC void HTAAInit (void)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; HTAA_newModule (&amp;quot;basic&amp;quot;, HTBasic_generate, HTBasic_parse, NULL,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HTBasic_delete);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; #ifdef HT_MD5
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; HTAA_newModule (&amp;quot;digest&amp;quot;, HTDigest_generate, HTDigest_parse, 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HTDigest_updateInfo, &amp;nbsp;HTDigest_delete);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; #endif /* HT_MD5 */
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;Yes, it would be nice to have a few more authentication modules to
&lt;br&gt;handle bits not handled nicely from RFC 2617, or other schemes found in
&lt;br&gt;the wild. &amp;nbsp;Is there a nice specification for NTLM ?
&lt;br&gt;&lt;br&gt;It seems that using this an an authentication handler would force
&lt;br&gt;connection keep alive and perhaps some prior state tracking to determine
&lt;br&gt;when an authentication for some METHOD + URI has already occurred or
&lt;br&gt;that a client initiated reauthentication is expected.
&lt;br&gt;&lt;br&gt;[: Note : &amp;nbsp;There were some reported examples of bad things possible when
&lt;br&gt;using NTLM with particular configurations of specific proxy servers,
&lt;br&gt;though that is more an argument against discarding Via headers, than the
&lt;br&gt;use of weak authentication mechanisms. &amp;nbsp;After all, Basic authentication
&lt;br&gt;is supported :]
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; HTAuthInfoFilter function checks for the available modules(which are basic
&lt;br&gt;&amp;gt; and digest in this case). If the current scheme doesn't match with any of
&lt;br&gt;&amp;gt; them, it will return HT_ERROR. In HTNetcall_executeAfter, this return type
&lt;br&gt;&amp;gt; is not handled going further up.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; PUBLIC int HTNetCall_executeAfter (HTList * list, HTRequest * request,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int status)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; int ret = HT_OK;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; if (status != HT_IGNORE) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTParentAnchor * anchor = HTRequest_anchor(request);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * url = HTAnchor_physical(anchor);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * addr = url ? url : HTAnchor_address((HTAnchor *) anchor);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTResponse * response = HTRequest_response(request);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (list &amp;&amp; request &amp;&amp; addr) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AfterFilter * pres;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (AfterFilter *) HTList_nextObject(list))) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((pres-&amp;gt;status == status || pres-&amp;gt;status ==
&lt;br&gt;&amp;gt; HT_ALL) &amp;&amp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (!pres-&amp;gt;tmplate ||
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(pres-&amp;gt;tmplate &amp;&amp; HTStrMatch(pres-&amp;gt;tmplate,
&lt;br&gt;&amp;gt; addr)))) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTTRACE(CORE_TRACE, &amp;quot;Net After... calling %p
&lt;br&gt;&amp;gt; (request %p, response %p, status %d, context %p)\n&amp;quot; _ 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pres-&amp;gt;after _ request _
&lt;br&gt;&amp;gt; response _ 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; status _ pres-&amp;gt;param);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ret = (*pres-&amp;gt;after)(request, response,
&lt;br&gt;&amp;gt; pres-&amp;gt;param, status);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (ret != HT_OK) break;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /*
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ** &amp;nbsp;Update the address to match against if the
&lt;br&gt;&amp;gt; filter changed
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ** &amp;nbsp;the physical address.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((url = HTAnchor_physical(anchor))) addr =
&lt;br&gt;&amp;gt; url;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!url) {
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(addr); 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; return ret;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; There are many places in code where the return type from this function is
&lt;br&gt;&amp;gt; not handled.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; For example in function HTNet_newClient, following code doesn't handle the
&lt;br&gt;&amp;gt; return value:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; if (HTEvent_isCallbacksRegistered() &amp;&amp; !HTRequest_preemptive(request))
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; createAfterFilterEvent(request, status);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTNet_executeAfterAll(request, status);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This is resulting into browser getting hung and the select call in
&lt;br&gt;&amp;gt; HTEvtLst_loop doesn't return. 
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;Yikes, perhaps a patch is indeed required. &amp;nbsp;Have you already coded an
&lt;br&gt;appropriate set of error handling checks ?
&lt;br&gt;&lt;br&gt;Just peering into the code based on your observations we can see,
&lt;br&gt;&lt;br&gt;&amp;nbsp; $ find . | egrep &amp;quot;\.(c|h)$&amp;quot; | xargs grep HTNet_executeAfterAll
&lt;br&gt;&amp;nbsp; ./Library/src/HTNet.c:PUBLIC int HTNet_executeAfterAll (HTRequest *
&lt;br&gt;request, int status)
&lt;br&gt;&amp;nbsp; ./Library/src/HTNet.c: &amp;nbsp; &amp;nbsp;return HTNet_executeAfterAll(request, status);
&lt;br&gt;&amp;nbsp; ./Library/src/HTNet.c: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HTNet_executeAfterAll(request, status);
&lt;br&gt;&amp;nbsp; ./Library/src/HTNet.c: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HTNet_executeAfterAll(request, status);
&lt;br&gt;&amp;nbsp; ./Library/src/HTNet.c: &amp;nbsp; &amp;nbsp;if (status != HT_IGNORE)
&lt;br&gt;HTNet_executeAfterAll(request, status);
&lt;br&gt;&amp;nbsp; ./Library/src/HTNet.h:extern int HTNet_executeAfterAll (HTRequest *
&lt;br&gt;request, int status);
&lt;br&gt;&lt;br&gt;The last three occurrences in HTNet.c require inspection. &amp;nbsp;The first of
&lt;br&gt;these is in the context of the function HTNet_executeAfterAll, which is
&lt;br&gt;in the scope of handling cases where the HTNet_executeBeforeAll function
&lt;br&gt;has not returned HT_OK. &amp;nbsp;The second of these in the context of
&lt;br&gt;HTNet_newClient is a near identical usage. &amp;nbsp;The last of the occurrences,
&lt;br&gt;in the context of HTNet_delete, seems to suppose that the after filters
&lt;br&gt;would gain the relevant information from the Net object itself, prior to
&lt;br&gt;it's actual deletion. 
&lt;br&gt;&lt;br&gt;How are we to proceed if the after filters are not OK ?
&lt;br&gt;&lt;br&gt;Looking more closely at the definition of HTNet_executeAfterAll, it is
&lt;br&gt;apparent that the real work is done by HTNetCall_executeAfter which
&lt;br&gt;breaks it's iteration the first time an after filter returns not HT_OK. 
&lt;br&gt;This really seems to put us in a difficult spot trying to identify
&lt;br&gt;_which_ after filter would have been the one to signal failure.
&lt;br&gt;&lt;br&gt;The one additional bit of code to examine is along the path of which
&lt;br&gt;functions might actually get registered along the way. &amp;nbsp;Namely, we
&lt;br&gt;search for invocations of HTNetCall_addAfter and therefore at the
&lt;br&gt;invocations of HTRequest_addAfter, e.g.,
&lt;br&gt;&lt;br&gt;&amp;nbsp; $ find . | egrep &amp;quot;\.c$&amp;quot; | xargs grep HTRequest_addAfter
&lt;br&gt;&lt;br&gt;My inclination is to first restrict the reading of code in the Library,
&lt;br&gt;thus only reading the additional files HTAccess.c, HTCache.c and
&lt;br&gt;HTMIME.c . . .
&lt;br&gt;&lt;br&gt;The intent to add an NTLM authentication might be done as a seperate
&lt;br&gt;add-on, since registering the new after filters after core library
&lt;br&gt;initialization will naturally cause them to be executed first at
&lt;br&gt;runtime. &amp;nbsp;An implementation of an NTLM enabled equivalent of
&lt;br&gt;HTAuthFilter could also track prior session state, somewhat like the
&lt;br&gt;HTMemoryCacheFilter.
&lt;br&gt;&lt;br&gt;more,
&lt;br&gt;l8r,
&lt;br&gt;v
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;The future is here. It's just not evenly distributed yet.&amp;quot;
&lt;br&gt;&amp;nbsp;-- William Gibson, quoted by Whitfield Diffie
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Regarding-authentication-scheme-handling-tp22592302p22921088.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22592302</id>
	<title>Regarding authentication scheme handling</title>
	<published>2009-03-18T07:29:40Z</published>
	<updated>2009-03-18T07:29:40Z</updated>
	<author>
		<name>Pallavi Agrawal</name>
	</author>
	<content type="html">&lt;html xmlns:o=&quot;urn:schemas-microsoft-com:office:office&quot; xmlns:w=&quot;urn:schemas-microsoft-com:office:word&quot; xmlns=&quot;http://www.w3.org/TR/REC-html40&quot;&gt;

&lt;head&gt;
&lt;META HTTP-EQUIV=&quot;Content-Type&quot; CONTENT=&quot;text/html; charset=us-ascii&quot;&gt;
&lt;meta name=Generator content=&quot;Microsoft Word 11 (filtered medium)&quot;&gt;


&lt;/head&gt;

&lt;body lang=EN-US link=blue vlink=purple&gt;

&lt;div class=Section1&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;Hi,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;I am working on libwww.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;I have one query related to libwww handling of NTLM
responses for authentication.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;Looking at the code in HTInit.c, it seems that only
&amp;#8220;basic&amp;#8221; and &amp;#8220;digest&amp;#8221; authentication schemes are
supported.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;PUBLIC void HTAAInit (void)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTAA_newModule
(&amp;quot;basic&amp;quot;, HTBasic_generate, HTBasic_parse, NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTBasic_delete);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;#ifdef HT_MD5&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTAA_newModule
(&amp;quot;digest&amp;quot;, HTDigest_generate, HTDigest_parse, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTDigest_updateInfo,&amp;nbsp; HTDigest_delete);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;#endif /* HT_MD5 */&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;HTAuthInfoFilter function checks for the available
modules(which are basic and digest in this case). If the current scheme
doesn&amp;#8217;t match with any of them, it will return HT_ERROR. In
HTNetcall_executeAfter, this return type is not handled going further up.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;PUBLIC int HTNetCall_executeAfter (HTList
* list, HTRequest * request,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; int status)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int ret = HT_OK;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (status !=
HT_IGNORE) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
HTParentAnchor * anchor = HTRequest_anchor(request);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
char * url = HTAnchor_physical(anchor);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
char * addr = url ? url : HTAnchor_address((HTAnchor *) anchor);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
HTResponse * response = HTRequest_response(request);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
if (list &amp;amp;&amp;amp; request &amp;amp;&amp;amp; addr) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; AfterFilter * pres;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((pres = (AfterFilter *) HTList_nextObject(list))) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
if ((pres-&amp;gt;status == status || pres-&amp;gt;status == HT_ALL) &amp;amp;&amp;amp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (!pres-&amp;gt;tmplate ||&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (pres-&amp;gt;tmplate &amp;amp;&amp;amp;
HTStrMatch(pres-&amp;gt;tmplate, addr)))) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; HTTRACE(CORE_TRACE, &amp;quot;Net After... calling %p (request
%p, response %p, status %d, context %p)\n&amp;quot; _ &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
pres-&amp;gt;after _ request _ response _ &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
status _ pres-&amp;gt;param);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = (*pres-&amp;gt;after)(request, response, pres-&amp;gt;param,
status);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;b&gt;&lt;span style='font-weight:bold'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ret != HT_OK) break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;b&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; **&amp;nbsp; Update the address to match against if the filter
changed&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; **&amp;nbsp; the physical address.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((url = HTAnchor_physical(anchor))) addr = url;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
if (!url) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
HT_FREE(addr); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ret;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-style:italic'&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;There are many places in code where the return type from
this function is not handled.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;For example in function HTNet_newClient, following code
doesn&amp;#8217;t handle the return value:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;b&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'&gt;if
(HTEvent_isCallbacksRegistered() &amp;amp;&amp;amp; !HTRequest_preemptive(request))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;b&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; createAfterFilterEvent(request, status);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;b&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
else&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;b&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; HTNet_executeAfterAll(request, status);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;b&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
return YES;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;font-family:Arial'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;This is resulting into browser getting hung and the select
call in HTEvtLst_loop doesn&amp;#8217;t return. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;Please let me know if we have any solution to this problem. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;b&gt;&lt;i&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial;font-weight:bold;font-style:italic'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 color=maroon face=&quot;Bookman Old Style&quot;&gt;&lt;span style='font-size:10.0pt;font-family:&quot;Bookman Old Style&quot;;color:maroon'&gt;Thanks
and Regards,&lt;/span&gt;&lt;/font&gt;&lt;font face=Arial&gt;&lt;span style='font-family:Arial'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 color=maroon face=&quot;Bookman Old Style&quot;&gt;&lt;span style='font-size:10.0pt;font-family:&quot;Bookman Old Style&quot;;color:maroon'&gt;Pallavi
Agrawal,&lt;/span&gt;&lt;/font&gt;&lt;font face=Arial&gt;&lt;span style='font-family:Arial'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 color=maroon face=&quot;Bookman Old Style&quot;&gt;&lt;span style='font-size:10.0pt;font-family:&quot;Bookman Old Style&quot;;color:maroon'&gt;Project
Engineer&lt;/span&gt;&lt;/font&gt;&lt;font face=Arial&gt;&lt;span style='font-family:Arial'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 color=maroon face=&quot;Bookman Old Style&quot;&gt;&lt;span style='font-size:10.0pt;font-family:&quot;Bookman Old Style&quot;;color:maroon'&gt;PDC-1
,Wipro Technologies&lt;/span&gt;&lt;/font&gt;&lt;font face=Arial&gt;&lt;span style='font-family:
Arial'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=3 face=Arial&gt;&lt;span style='font-size:12..0pt;
font-family:Arial'&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10..0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;P&gt;&lt;strong&gt;&lt;span style='font-size:10.0pt;font-family:
&quot;Palatino Linotype&quot;,&quot;serif&quot;;color:green'&gt; Please do not print this email unless it is absolutely necessary. &lt;/span&gt;&lt;/strong&gt;&lt;span style='font-family:&quot;Arial&quot;,&quot;sans-serif&quot;'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;


&lt;p&gt; The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. &lt;/p&gt;

&lt;p&gt;WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. &lt;/p&gt;
&lt;p&gt;
www.wipro.com
&lt;/p&gt;
&lt;/body&gt;

&lt;/html&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Regarding-authentication-scheme-handling-tp22592302p22592302.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22510993</id>
	<title>RE: Build Trouble</title>
	<published>2009-03-14T02:51:50Z</published>
	<updated>2009-03-14T02:51:50Z</updated>
	<author>
		<name>Sinha, Raj (Raj)</name>
	</author>
	<content type="html">This seems to have resolved the build error
&lt;br&gt;#define DIR WIN32_FIND_DATA
&lt;br&gt;&lt;br&gt;In wwwysy.h
&lt;br&gt;Under
&lt;br&gt;#ifdef WWW_MSWINDOWS	 
&lt;br&gt;&lt;br&gt;-----Original Message-----
&lt;br&gt;From: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22510993&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;www-lib-request@...&lt;/a&gt; [mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22510993&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;www-lib-request@...&lt;/a&gt;] On Behalf
&lt;br&gt;Of DootDog
&lt;br&gt;Sent: Thursday, March 12, 2009 6:43 PM
&lt;br&gt;To: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22510993&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;www-lib@...&lt;/a&gt;
&lt;br&gt;Subject: Re: Build Trouble
&lt;br&gt;&lt;br&gt;&lt;br&gt;I've run into this same problem. &amp;nbsp;Was anybody able to solve it? &amp;nbsp;I've
&lt;br&gt;searched through the files and can't find DIR defined anywhere.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Will Amrull wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Hi, I am trying to build libw3 using the latest CVS and MSVC files,
&lt;br&gt;but I
&lt;br&gt;&amp;gt; am
&lt;br&gt;&amp;gt; encountering a problem which causes about 85% of the project builds to
&lt;br&gt;&amp;gt; fail.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; The problem seems to center around HTFile.h Line 102 :
&lt;br&gt;&amp;gt; extern size_t HTFile_dirent_buf_size(DIR * dirp);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; These are the errors I receieve:
&lt;br&gt;&amp;gt; \libwww\Library\src\HTFile.h(102) : error C2143: syntax error :
&lt;br&gt;missing
&lt;br&gt;&amp;gt; ')'
&lt;br&gt;&amp;gt; before '*'
&lt;br&gt;&amp;gt; \libwww\Library\src\HTFile.h(102) : error C2143: syntax error :
&lt;br&gt;missing
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; '{'
&lt;br&gt;&amp;gt; before '*'
&lt;br&gt;&amp;gt; \libwww\Library\src\HTFile.h(102) : error C2059: syntax error : ')'
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; This error happens over and over and over as I try a bach build and I
&lt;br&gt;&amp;gt; can't
&lt;br&gt;&amp;gt; figure out what the problem is..
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Any help would be greatly appreciated.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;View this message in context:
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/Build-Trouble-tp6345170p22486736.html&quot; target=&quot;_top&quot;&gt;http://www.nabble.com/Build-Trouble-tp6345170p22486736.html&lt;/a&gt;&lt;br&gt;Sent from the w3.org - www-lib mailing list archive at Nabble.com.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Build-Trouble-tp6345170p22510993.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22486736</id>
	<title>Re: Build Trouble</title>
	<published>2009-03-12T15:42:57Z</published>
	<updated>2009-03-12T15:42:57Z</updated>
	<author>
		<name>DootDog</name>
	</author>
	<content type="html">&lt;br&gt;I've run into this same problem. &amp;nbsp;Was anybody able to solve it? &amp;nbsp;I've searched through the files and can't find DIR defined anywhere.
&lt;br&gt;&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;Will Amrull wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;Hi, I am trying to build libw3 using the latest CVS and MSVC files, but I am
&lt;br&gt;encountering a problem which causes about 85% of the project builds to fail.
&lt;br&gt;&lt;br&gt;The problem seems to center around HTFile.h Line 102 :
&lt;br&gt;extern size_t HTFile_dirent_buf_size(DIR * dirp);
&lt;br&gt;&lt;br&gt;These are the errors I receieve:
&lt;br&gt;\libwww\Library\src\HTFile.h(102) : error C2143: syntax error : missing ')'
&lt;br&gt;before '*'
&lt;br&gt;\libwww\Library\src\HTFile.h(102) : error C2143: syntax error : missing '{'
&lt;br&gt;before '*'
&lt;br&gt;\libwww\Library\src\HTFile.h(102) : error C2059: syntax error : ')'
&lt;br&gt;&lt;br&gt;This error happens over and over and over as I try a bach build and I can't
&lt;br&gt;figure out what the problem is..
&lt;br&gt;&lt;br&gt;Any help would be greatly appreciated.
&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Build-Trouble-tp6345170p22486736.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-18753717</id>
	<title>FW: HTLoadToChunk() will block for a long period</title>
	<published>2008-07-30T19:56:25Z</published>
	<updated>2008-07-30T19:56:25Z</updated>
	<author>
		<name>Eric Liu-6</name>
	</author>
	<content type="html">&lt;br&gt;Hi, folks:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; if (url) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * cwd = HTGetCurrentDirectoryURL();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * absolute_url = HTParse(url, cwd, PARSE_ALL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chunk = HTLoadToChunk(absolute_url, request);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(absolute_url);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(cwd);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;Using the above code from the chunk.c exmaple, is it possible to set a timeout on the request without using an event loop? If the target server is not responding then the call HTLoadToChunk() will block for a long period.
&lt;br&gt;Is there a simple function to set a timeout, I can't seem to find one in the documentation.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Thanks and Regards
&lt;br&gt;Eric
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/FW%3A-HTLoadToChunk%28%29-will-block-for-a-long-period-tp18753717p18753717.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-16653741</id>
	<title>Re: HTText callback functions for multiple HTRequests</title>
	<published>2008-04-11T22:56:35Z</published>
	<updated>2008-04-11T22:56:35Z</updated>
	<author>
		<name>Vic Bancroft-2</name>
	</author>
	<content type="html">&lt;br&gt;New Developer wrote:
&lt;br&gt;&amp;gt; I'm just starting to use libwww and had a question regarding multiple
&lt;br&gt;&amp;gt; requests. I am using libwww to parse data from websites and fill up my
&lt;br&gt;&amp;gt; internal data structures. I checked the sample codes that are up and
&lt;br&gt;&amp;gt; specifically I am using the techniques used in showtag.c and showtext.c.
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Welcome, that is a good place to start . . .
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; What I a doing right now is registering the callback functions
&lt;br&gt;&amp;gt; beginElement(), endElement() and addText() with:
&lt;br&gt;&amp;gt; HText_registerElementCallback(beginElement, endElement);
&lt;br&gt;&amp;gt; HText_registerTextCallback(addText)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This achieves what I am trying to do. However, these callback functions are
&lt;br&gt;&amp;gt; not tied to a particular HTequest. What if I want to issue two separate
&lt;br&gt;&amp;gt; HTRequests (to different URLs, of course) and want two different sets of
&lt;br&gt;&amp;gt; callback functions to be called once the data start coming back?
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;As has been discussed in the archives, the libwww is not designed to be 
&lt;br&gt;multithreaded. &amp;nbsp;Rather the design is to achieve high throughput with a 
&lt;br&gt;flexible architecture . . .
&lt;br&gt;&amp;gt; Is there any way to tie the HTText_register*() functions with specific
&lt;br&gt;&amp;gt; requests? Or do I have to use the HTStream class to achieve what I am trying
&lt;br&gt;&amp;gt; to do? In case I have to use HTStream class, I'd really appreciate if
&lt;br&gt;&amp;gt; someone can give some high level pointers on how to get started.
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Sure, you might consider constructing a thread safe queue, perhaps using 
&lt;br&gt;a struct which includes the head and tail pointer of an HTList. &amp;nbsp;Each 
&lt;br&gt;queue entry could be a container of your request specific call back 
&lt;br&gt;function pointers . . .
&lt;br&gt;&lt;br&gt;more,
&lt;br&gt;l8r,
&lt;br&gt;v
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;The future is here. It's just not evenly distributed yet.&amp;quot;
&lt;br&gt;&amp;nbsp;-- William Gibson, quoted by Whitfield Diffie
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/HTText-callback-functions-for-multiple-HTRequests-tp16626107p16653741.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-16626107</id>
	<title>HTText callback functions for multiple HTRequests</title>
	<published>2008-04-10T14:07:27Z</published>
	<updated>2008-04-10T14:07:27Z</updated>
	<author>
		<name>New Developer</name>
	</author>
	<content type="html">Hi&lt;br&gt;&lt;br&gt;I&amp;#39;m just starting to use libwww and had a question regarding multiple requests. I am using libwww to parse data from websites and fill up my internal data structures. I checked the sample codes that are up and specifically I am using the techniques used in showtag.c and showtext.c. &lt;br&gt;
&lt;br&gt;What I a doing right now is registering the callback functions beginElement(), endElement() and addText() with:&lt;br&gt;HText_registerElementCallback(beginElement, endElement);&lt;br&gt;HText_registerTextCallback(addText)&lt;br&gt;&lt;br&gt;
This achieves what I am trying to do. However, these callback functions are not tied to a particular HTequest. What if I want to issue two separate HTRequests (to different URLs, of course) and want two different sets of callback functions to be called once the data start coming back? &lt;br&gt;
&lt;br&gt;Is there any way to tie the HTText_register*() functions with specific requests? Or do I have to use the HTStream class to achieve what I am trying to do? In case I have to use HTStream class, I&amp;#39;d really appreciate if someone can give some high level pointers on how to get started.&lt;br&gt;
&lt;br&gt;Thanks in advance!&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/HTText-callback-functions-for-multiple-HTRequests-tp16626107p16626107.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-16343088</id>
	<title>Re: libwww, HTAAUtil.h changes</title>
	<published>2008-03-27T05:31:58Z</published>
	<updated>2008-03-27T05:31:58Z</updated>
	<author>
		<name>Vic Bancroft-2</name>
	</author>
	<content type="html">&lt;br&gt;kordex - wrote:
&lt;br&gt;&amp;gt; I have read this change history: &lt;a href=&quot;http://www.w3.org/Library/User/History.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/User/History.html&lt;/a&gt;&lt;br&gt;&amp;gt; .
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Do you have at least read access to the CVS repository ?
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I have a piece of code which uses HTAAUtil.h and specifically needs this
&lt;br&gt;&amp;gt; section of HTAAUtil.h
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; typedef enum {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; HTAA_UNKNOWN,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; HTAA_NONE,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; HTAA_BASIC,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; HTAA_PUBKEY,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; HTAA_KERBEROS_V4,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; HTAA_KERBEROS_V5,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; HTAA_MAX_SCHEMES &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* THIS MUST ALWAYS BE LAST!
&lt;br&gt;&amp;gt; */
&lt;br&gt;&amp;gt; } HTAAScheme;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;Yes, that was still in
&lt;br&gt;&amp;nbsp; &amp;nbsp; revision 2.4
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1995/11/20 00:13:25; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +7 -9
&lt;br&gt;&amp;nbsp; &amp;nbsp; Merged Error and Dialog system
&lt;br&gt;&amp;gt; There is no mention of removing it or anything on that url. I searched the
&lt;br&gt;&amp;gt; source and it should be mentioned in change log of &amp;quot;Release 4.1b1 May 20
&lt;br&gt;&amp;gt; 1996&amp;quot; as it exists in &amp;quot;Release 4.0D February 12 1996&amp;quot;.
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;The very next commit associated with that file has a simple entry,
&lt;br&gt;&amp;nbsp; &amp;nbsp; revision 2.25
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:00; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: 
&lt;br&gt;+187 -163
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&lt;br&gt;However, as you can see from the appended diff, [1] there were radical 
&lt;br&gt;changes . . .
&lt;br&gt;&lt;br&gt;&amp;gt; The software is an old www-browser (Mosaic) which i am trying to make little
&lt;br&gt;&amp;gt; more closer to modern standards.
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Yes, I recall this project from one of your earlier postings.
&lt;br&gt;&amp;gt; I need to know what were these used for inside libwww and how are they
&lt;br&gt;&amp;gt; replaced.
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;This is an interesting question of cybernetic archeology, though I think 
&lt;br&gt;we could drive such an investigation from the commit date and comment. &amp;nbsp;
&lt;br&gt;The most obvious next step would be to examine the HTAAUtil.c, which was 
&lt;br&gt;modified along with the header file definitions, e.g.,
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; revision 2.19
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:24:59; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: 
&lt;br&gt;+503 -308
&lt;br&gt;&amp;nbsp;
&lt;br&gt;As before, you can see from the appended diff, [2] there were extensive 
&lt;br&gt;changes . . .
&lt;br&gt;&lt;br&gt;Perhaps we can formulate a command that will, for every file, check the 
&lt;br&gt;log for an appropriate revision and pull an appropriate diff. &amp;nbsp;For the 
&lt;br&gt;moment, with a command and some editing, we have
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTAABrow.c,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:24:56; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: 
&lt;br&gt;+247 -736
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTAABrow.html,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:24:58; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: 
&lt;br&gt;+23 -166
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTAAUtil.c,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:24:59; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: 
&lt;br&gt;+503 -308
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTAAUtil.html,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:00; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: 
&lt;br&gt;+187 -163
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTAccess.c,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:01; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +5 -2
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTAccess.html,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:03; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +2 -2
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTAssoc.c,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:04; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +2 -2
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTAssoc.html,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:04; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +23 -1
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTBind.c,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:05; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +2 -1
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTMIME.c,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:08; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +17 -5
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTReq.html,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:09; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +32 -1
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTReqMan.c,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:10; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: 
&lt;br&gt;+47 -25
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTReqMan.html,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:11; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +8 -2
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTTP.c,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:12; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +7 -9
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTTPReq.c,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:13; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +10 -7
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTTPServ.c,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:14; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +1 -1
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp; RCS file: /sources/public/libwww/Library/src/HTUtils.html,v
&lt;br&gt;&amp;nbsp; &amp;nbsp; date: 1996/02/20 19:25:15; &amp;nbsp;author: frystyk; &amp;nbsp;state: Exp; &amp;nbsp;lines: +3 -1
&lt;br&gt;&amp;nbsp; &amp;nbsp; new AA
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;more,
&lt;br&gt;l8r,
&lt;br&gt;v
&lt;br&gt;&lt;br&gt;[1] &amp;nbsp;$ cvs diff -r 2.24 -r 2.25 HTAAUtil.html | tee ~/tmp/HTAAUtil.html.diff
&lt;br&gt;Index: HTAAUtil.html
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /sources/public/libwww/Library/src/HTAAUtil.html,v
&lt;br&gt;retrieving revision 2.24
&lt;br&gt;retrieving revision 2.25
&lt;br&gt;diff -r2.24 -r2.25
&lt;br&gt;3,4c3,4
&lt;br&gt;&amp;lt; &amp;lt;TITLE&amp;gt;Utilities for the Authorization&amp;lt;/TITLE&amp;gt;
&lt;br&gt;&amp;lt; &amp;lt;!-- Changed by: Henrik Frystyk Nielsen, 19-Nov-1995 --&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;TITLE&amp;gt;Authentication Manager&amp;lt;/TITLE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;!-- Changed by: Henrik Frystyk Nielsen, 20-Feb-1996 --&amp;gt;
&lt;br&gt;8,9c8
&lt;br&gt;&amp;lt; &amp;lt;H1&amp;gt;Common Parts of Authorization Module to Both Server And
&lt;br&gt;&amp;lt; Browser&amp;lt;/H1&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H1&amp;gt;Authentication Manager&amp;lt;/H1&amp;gt;
&lt;br&gt;18,39c17,30
&lt;br&gt;&amp;lt; This module is the interface to the common parts of Access
&lt;br&gt;&amp;lt; Authorization (AA) package for both server and browser. Important to
&lt;br&gt;&amp;lt; know about memory allocation:&amp;lt;P&amp;gt;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; Routines in this module use dynamic allocation, but free automatically
&lt;br&gt;&amp;lt; all the memory reserved by them. Therefore the caller never has to
&lt;br&gt;&amp;lt; (and never should) free() any object returned by these functions.&amp;lt;P&amp;gt;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; Therefore also all the strings returned by this package are only valid
&lt;br&gt;&amp;lt; until the next call to the same function is made. This approach is
&lt;br&gt;&amp;lt; selected, because of the nature of access authorization: no string
&lt;br&gt;&amp;lt; returned by the package needs to be valid longer than until the next
&lt;br&gt;&amp;lt; call. &amp;nbsp;This also makes it easy to plug the AA package in: you don't
&lt;br&gt;&amp;lt; have to ponder whether to free() something here or is it done
&lt;br&gt;&amp;lt; somewhere else (because it is always done somewhere else).&amp;lt;P&amp;gt;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; The strings that the package needs to store are copied so the original
&lt;br&gt;&amp;lt; strings given as parameters to AA functions may be freed or modified
&lt;br&gt;&amp;lt; with no side effects.&amp;lt;P&amp;gt;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; Also note: The AA package does not free() anything else than what it
&lt;br&gt;&amp;lt; has itself allocated. &amp;lt;P&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; This module handles the registration of multiple Access authentication
&lt;br&gt;&amp;nbsp;&amp;gt; schemes with support for both clients and servers. The module allows
&lt;br&gt;&amp;nbsp;&amp;gt; multiple authentication schemes to be registered at run time so that
&lt;br&gt;&amp;nbsp;&amp;gt; the client and server easily can extend the set of authentication
&lt;br&gt;&amp;nbsp;&amp;gt; schemes. The Library does already support two welknown schemes from
&lt;br&gt;&amp;nbsp;&amp;gt; the HTTP specification: &amp;lt;B&amp;gt;basic&amp;lt;/B&amp;gt; and &amp;lt;B&amp;gt;digest&amp;lt;/B&amp;gt; but othes can
&lt;br&gt;&amp;nbsp;&amp;gt; be added. &amp;lt;P&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; Authentication information is kept separate from the various
&lt;br&gt;&amp;nbsp;&amp;gt; autehntication schemes so that the management of authentication
&lt;br&gt;&amp;nbsp;&amp;gt; information such as challenges and credentials can be handed
&lt;br&gt;&amp;nbsp;&amp;gt; independent of the scheme used. All information about authentication
&lt;br&gt;&amp;nbsp;&amp;gt; information is stored in a &amp;lt;A HREF=&amp;quot;#authbase&amp;quot;&amp;gt;Authentication
&lt;br&gt;&amp;nbsp;&amp;gt; Information base&amp;lt;/A&amp;gt;.&amp;lt;P&amp;gt;
&lt;br&gt;42,44c33,34
&lt;br&gt;&amp;lt; it is a part of the &amp;lt;A
&lt;br&gt;&amp;lt; HREF=&amp;quot;&lt;a href=&quot;http://www.w3.org/pub/WWW/Library/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/pub/WWW/Library/&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;&amp;lt; W3C Reference Library&amp;lt;/A&amp;gt;.
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; it is a part of the &amp;lt;A HREF=&amp;quot;&lt;a href=&quot;http://www.w3.org/pub/WWW/Library/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/pub/WWW/Library/&lt;/a&gt;&amp;quot;&amp;gt; W3C
&lt;br&gt;&amp;nbsp;&amp;gt; Reference Library&amp;lt;/A&amp;gt;.
&lt;br&gt;49c39
&lt;br&gt;&amp;lt; #include &amp;quot;HTList.h&amp;quot;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; #include &amp;quot;HTAssoc.h&amp;quot;
&lt;br&gt;57c47
&lt;br&gt;&amp;lt; #define PASSWD_FILE &amp;nbsp; &amp;quot;/home2/luotonen/passwd&amp;quot;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; #define PASSWD_FILE &amp;nbsp; &amp;quot;/tmp/passwd&amp;quot;
&lt;br&gt;61c51
&lt;br&gt;&amp;lt; #define GROUP_FILE &amp;nbsp; &amp;nbsp;&amp;quot;/home2/luotonen/group&amp;quot;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; #define GROUP_FILE &amp;nbsp; &amp;nbsp;&amp;quot;/tmp/group&amp;quot;
&lt;br&gt;80,83c70
&lt;br&gt;&amp;lt; HTRequest structure. The AA module is declared in &amp;lt;A
&lt;br&gt;&amp;lt; HREF=&amp;quot;HTAAUtil.html&amp;quot;&amp;gt;HTAAUtil&amp;lt;/A&amp;gt; and &amp;lt;A HREF=&amp;quot;HTAABrow.html&amp;quot;&amp;gt;
&lt;br&gt;&amp;lt; HTAABrow&amp;lt;/A&amp;gt;. The enumeration &amp;lt;CODE&amp;gt;HTAAScheme &amp;lt;/CODE&amp;gt;represents the
&lt;br&gt;&amp;lt; possible authentication schemes used by the WWW Access Authorization.
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; HTRequest object.
&lt;br&gt;86,96d72
&lt;br&gt;&amp;lt; typedef enum {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; HTAA_UNKNOWN,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; HTAA_NONE,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; HTAA_BASIC,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; HTAA_PUBKEY,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; HTAA_KERBEROS_V4,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; HTAA_KERBEROS_V5,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; HTAA_MAX_SCHEMES &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* THIS MUST ALWAYS BE 
&lt;br&gt;LAST! */
&lt;br&gt;&amp;lt; } HTAAScheme;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt;
&lt;br&gt;124c100,160
&lt;br&gt;&amp;lt; &amp;lt;H2&amp;gt;Authentication Schemes&amp;lt;/H2&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H2&amp;gt;Authentication Scheme Registration&amp;lt;/H2&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; Registering an autentication scheme involes the following parts:
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;DL&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;DT&amp;gt;&amp;lt;B&amp;gt;scheme&amp;lt;/B&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;DD&amp;gt;The name of the scheme which is used to identify the scheme, for
&lt;br&gt;&amp;nbsp;&amp;gt; example as the &amp;lt;CODE&amp;gt;&amp;lt;scheme&amp;gt;&amp;lt;/CODE&amp;gt; part of the
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;CODE&amp;gt;WWW-authenticate&amp;lt;/CODE&amp;gt; HTTP header.
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;DT&amp;gt;&amp;lt;B&amp;gt;parser&amp;lt;/B&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;DD&amp;gt;Each scheme must have a &amp;lt;EM&amp;gt;parser&amp;lt;/EM&amp;gt; callback function that can
&lt;br&gt;&amp;nbsp;&amp;gt; parse and interpret either the challenge sent by a server application
&lt;br&gt;&amp;nbsp;&amp;gt; or the credentials sent by the client to see whether they can be
&lt;br&gt;&amp;nbsp;&amp;gt; fulfilled or not. In the case of a client, the parser is called each
&lt;br&gt;&amp;nbsp;&amp;gt; time a request did not optain authorization to access the
&lt;br&gt;&amp;nbsp;&amp;gt; resource. The parser should then parse the challenge and store it so
&lt;br&gt;&amp;nbsp;&amp;gt; that we know what we must fulfill if a new request is issued. If the
&lt;br&gt;&amp;nbsp;&amp;gt; app is a server then the parser should validate that the credentails
&lt;br&gt;&amp;nbsp;&amp;gt; are sufficent for accessing the resource.
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;DT&amp;gt;&amp;lt;B&amp;gt;generator&amp;lt;/B&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;DD&amp;gt;A scheme must also have a &amp;lt;EM&amp;gt;generator&amp;lt;/EM&amp;gt; callback function
&lt;br&gt;&amp;nbsp;&amp;gt; that can be called to generate a valid challenge or credentials to be
&lt;br&gt;&amp;nbsp;&amp;gt; sent to the other part. If a new request is issued and we have a
&lt;br&gt;&amp;nbsp;&amp;gt; challenge for this request then the generator should make sure that we
&lt;br&gt;&amp;nbsp;&amp;gt; get the right credentials. This can for example be by asking the user
&lt;br&gt;&amp;nbsp;&amp;gt; for a user name a and password. In the case of a server, the generator
&lt;br&gt;&amp;nbsp;&amp;gt; should generate a challenge that must be answered in order to access
&lt;br&gt;&amp;nbsp;&amp;gt; the resource.
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;DT&amp;gt;&amp;lt;B&amp;gt;garbage collection&amp;lt;/B&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;DD&amp;gt;The authentication information base has to be able to delete
&lt;br&gt;&amp;nbsp;&amp;gt; authentication information but as it doesn't know the format of the
&lt;br&gt;&amp;nbsp;&amp;gt; scheme specific parts, you must register a garbage collector which
&lt;br&gt;&amp;nbsp;&amp;gt; also is a callback function. The info base manager then calls this
&lt;br&gt;&amp;nbsp;&amp;gt; function each time authentication information is either being deleted
&lt;br&gt;&amp;nbsp;&amp;gt; or updated.
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;/DL&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; The request object has two hooks for the access authentication
&lt;br&gt;&amp;nbsp;&amp;gt; handler: &amp;lt;CODE&amp;gt;challenge&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;credentials.&amp;lt;/CODE&amp;gt;. Both
&lt;br&gt;&amp;nbsp;&amp;gt; are association lists but the format is completely for the
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;CODE&amp;gt;parser&amp;lt;/CODE&amp;gt; and the &amp;lt;CODE&amp;gt;generator&amp;lt;/CODE&amp;gt; callback functions
&lt;br&gt;&amp;nbsp;&amp;gt; to manage. By using callback functions for parsing and generating
&lt;br&gt;&amp;nbsp;&amp;gt; valid authentication/authorization information, this module is
&lt;br&gt;&amp;nbsp;&amp;gt; independent of each scheme and hence allows for highly different
&lt;br&gt;&amp;nbsp;&amp;gt; schemes.
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H3&amp;gt;Callback Functions&amp;lt;/H3&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; The types for the parser and generator callback functions are
&lt;br&gt;&amp;nbsp;&amp;gt; symmetric in that the parser expects an association list of unparsed
&lt;br&gt;&amp;nbsp;&amp;gt; data and returns a scheme dependent data object to be added to the
&lt;br&gt;&amp;nbsp;&amp;gt; authentication information base. The callback functions are made so
&lt;br&gt;&amp;nbsp;&amp;gt; that they can be used both on client side and on server side. The
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;CODE&amp;gt;scheme&amp;lt;/CODE&amp;gt; parameter is to tell the current authentication
&lt;br&gt;&amp;nbsp;&amp;gt; scheme. That way, the same callback functions can be for multiple
&lt;br&gt;&amp;nbsp;&amp;gt; schemes if needed.
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;126,134c162,163
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAAScheme_enum()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRANSLATE SCHEME NAME TO A SCHEME ENUMERATION
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is a string representing the scheme name.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; the enumerated constant for that scheme.
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; extern HTAAScheme HTAAScheme_enum (CONST char* name);
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; typedef BOOL HTAuthParCallback &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(HTRequest * &amp;nbsp; &amp;nbsp;request,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CONST char * &amp;nbsp; scheme);
&lt;br&gt;135a165,168
&lt;br&gt;&amp;nbsp;&amp;gt; typedef BOOL HTAuthGenCallback &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(HTRequest * &amp;nbsp; &amp;nbsp;request,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CONST char * &amp;nbsp; scheme,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;char * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; realm,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;void * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data);
&lt;br&gt;137,147c170,172
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAAScheme_name()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GET THE NAME OF A GIVEN SCHEME
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;scheme &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is one of the scheme enum values:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HTAA_NONE, HTAA_BASIC, HTAA_PUBKEY, ...
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; the name of the scheme, i.e.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;none&amp;quot;, &amp;quot;basic&amp;quot;, &amp;quot;pubkey&amp;quot;, ...
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; extern char *HTAAScheme_name (HTAAScheme scheme);
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; typedef BOOL HTAuthGcCallback (CONST char * &amp;nbsp; scheme,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;void * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;/PRE&amp;gt;
&lt;br&gt;150,172c175
&lt;br&gt;&amp;lt; /* extern &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAA_templateMatch()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;STRING COMPARISON FUNCTION FOR FILE NAMES
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WITH ONE WILDCARD * IN THE TEMPLATE
&lt;br&gt;&amp;lt; ** NOTE:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;This is essentially the same code as in HTRules.c, but it
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;cannot be used because it is embedded in between other code.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;(In fact, HTRules.c should use this routine, but then this
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; routine would have to be more sophisticated... why is life
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; sometimes so hard...)
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;tmplate &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; is a template string to match the file name
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;agaist, may contain a single wildcard
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;character * which matches zero or more
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arbitrary characters.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;filename &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is the filename (or pathname) to be matched
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;agaist the template.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; YES, if filename matches the template.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NO, otherwise.
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; extern BOOL HTAA_templateMatch (CONST char * tmplate, CONST char * 
&lt;br&gt;filename);
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H3&amp;gt;Add an Authentication Scheme&amp;lt;/H3&amp;gt;
&lt;br&gt;173a177,179
&lt;br&gt;&amp;nbsp;&amp;gt; You can add an authentication scheme by using the following
&lt;br&gt;&amp;nbsp;&amp;gt; method. Each of the callback function must have the type as defined
&lt;br&gt;&amp;nbsp;&amp;gt; below.
&lt;br&gt;175,197c181,186
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAA_templateCaseMatch()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;STRING COMPARISON FUNCTION FOR FILE NAMES
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WITH ONE WILDCARD * IN THE TEMPLATE (Case Insensitive)
&lt;br&gt;&amp;lt; ** NOTE:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;This is essentially the same code as in HTAA_templateMatch, but
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;it compares case insensitive (for VMS). Reason for this routine
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;is that HTAA_templateMatch gets called from several places, also
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;there where a case sensitive match is needed, so one cannot just
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;change the HTAA_templateMatch routine for VMS.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;template &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is a template string to match the file name
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;agaist, may contain a single wildcard
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;character * which matches zero or more
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arbitrary characters.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;filename &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is the filename (or pathname) to be matched
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;agaist the template.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; YES, if filename matches the template.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NO, otherwise.
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; extern BOOL HTAA_templateCaseMatch (CONST char * tmpl, CONST char * 
&lt;br&gt;filename);
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; extern BOOL HTAuthCall_add &amp;nbsp; &amp;nbsp;(CONST char * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scheme,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HTAuthParCallback * &amp;nbsp; &amp;nbsp;parser,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HTAuthGenCallback * &amp;nbsp; &amp;nbsp;generator,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HTAuthGcCallback * &amp;nbsp; &amp;nbsp; gc);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;/PRE&amp;gt;
&lt;br&gt;198a188
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H3&amp;gt;Delete an Authentication Scheme&amp;lt;/H3&amp;gt;
&lt;br&gt;200,219c190,194
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;HTAA_makeProtectionTemplate()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CREATE A PROTECTION TEMPLATE FOR THE FILES
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IN THE SAME DIRECTORY AS THE GIVEN FILE
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Used by server if there is no fancier way for
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;it to tell the client, and by browser if server
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;didn't send WWW-ProtectionTemplate: field)
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;docname is the document pathname (from URL).
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns a template matching docname, and other files
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;files in that directory.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;E.g. &amp;nbsp;/foo/bar/x.html &amp;nbsp;=&amp;gt; &amp;nbsp;/foo/bar/ *
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;^
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Space only to prevent it from
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;being a comment marker here,
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;there really isn't any space.
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; extern char *HTAA_makeProtectionTemplate (CONST char * docname);
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; Likewise, you can delete an authentication scheme:
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; extern BOOL HTAuthCall_delete (CONST char * scheme);
&lt;br&gt;&amp;nbsp;&amp;gt; extern BOOL HTAuthCall_deleteAll (void);
&lt;br&gt;221c196,204
&lt;br&gt;&amp;lt; &amp;lt;H2&amp;gt;MIME Argument List Parser&amp;lt;/H2&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H2&amp;gt;Generating Calls to callback functions&amp;lt;/H2&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H3&amp;gt;Call An authentication Scheme Parser&amp;lt;/H3&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; This function looks for a authentication scheme that matches what we
&lt;br&gt;&amp;nbsp;&amp;gt; have in the request object and calls the parser callback function.
&lt;br&gt;&amp;nbsp;&amp;gt; Case is not significant. Return YES or whatever callback returns
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;222a206,207
&lt;br&gt;&amp;nbsp;&amp;gt; extern BOOL HTAuth_parse (HTRequest * request);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;/PRE&amp;gt;
&lt;br&gt;224,250c209,213
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAA_parseArgList()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PARSE AN ARGUMENT LIST GIVEN IN A HEADER FIELD
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;str &amp;nbsp; &amp;nbsp; is a comma-separated list:
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;item, item, item
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;where
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;item ::= value
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | name=value
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | name=&amp;quot;value&amp;quot;
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Leading and trailing whitespace is ignored
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;everywhere except inside quotes, so the following
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;examples are equal:
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name=value,foo=bar
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name=&amp;quot;value&amp;quot;,foo=&amp;quot;bar&amp;quot;
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name = value , &amp;nbsp;foo = bar
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name = &amp;quot;value&amp;quot; , &amp;nbsp;foo = &amp;quot;bar&amp;quot;
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns a list of name-value pairs (actually HTAssocList*).
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;For items with no name, just value, the name is
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the number of order number of that item. E.g.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;1&amp;quot; for the first, etc.
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; extern HTList *HTAA_parseArgList (char * str);
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H3&amp;gt;Call An authentication Scheme Generator&amp;lt;/H3&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; This function looks for a any authentication scheme that protects this
&lt;br&gt;&amp;nbsp;&amp;gt; resource and calls the generator callback in order to make a challenge
&lt;br&gt;&amp;nbsp;&amp;gt; or credentials. Return YES or whatever callback returns
&lt;br&gt;251a215,272
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; extern BOOL HTAuth_generate (HTRequest * request);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;/PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H3&amp;gt;Call An authentication Scheme Garbage Collector&amp;lt;/H3&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; This function looks for a authentication scheme that matches what we
&lt;br&gt;&amp;nbsp;&amp;gt; have in the request object and calls the cleanup callback function.
&lt;br&gt;&amp;nbsp;&amp;gt; Case is not significant. Return YES if callback found else NO
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; extern BOOL HTAuth_cleanup (CONST char * scheme, void * data);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;/PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;A NAME=&amp;quot;authbase&amp;quot;&amp;gt;&amp;lt;H2&amp;gt;Authentication Information Databases&amp;lt;/H2&amp;gt;&amp;lt;/A&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; The authentication information is stored in a database managed by this
&lt;br&gt;&amp;nbsp;&amp;gt; module. In the current implementation, a database is a list of
&lt;br&gt;&amp;nbsp;&amp;gt; sub-authentication databases, each uniquely identified by a hostname
&lt;br&gt;&amp;nbsp;&amp;gt; and a port number. &amp;nbsp;Each database contains a set of templates which
&lt;br&gt;&amp;nbsp;&amp;gt; can be used to predict what information to use in a hierarchical
&lt;br&gt;&amp;nbsp;&amp;gt; tree. All authentication dependent information is stored as opaque
&lt;br&gt;&amp;nbsp;&amp;gt; data in a &amp;lt;CODE&amp;gt;node&amp;lt;/CODE&amp;gt; referenced by a &amp;lt;EM&amp;gt;realm&amp;lt;/EM&amp;gt; and a
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;EM&amp;gt;URL template&amp;lt;/EM&amp;gt;. &amp;lt;P&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; Normally applications would only keep one auth base but if it wants
&lt;br&gt;&amp;nbsp;&amp;gt; different protection setup as a function of different interfaces then
&lt;br&gt;&amp;nbsp;&amp;gt; it can have one auth base representing each interface. &amp;lt;P&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; Server applications can have different authentication setups for each
&lt;br&gt;&amp;nbsp;&amp;gt; hostname and port number they control. For example, a server with
&lt;br&gt;&amp;nbsp;&amp;gt; interfaces &amp;quot;www.foo.com&amp;quot; and &amp;quot;internal.foo.com&amp;quot; can have different
&lt;br&gt;&amp;nbsp;&amp;gt; protection setups for each interface.
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H3&amp;gt;Initialize the Authentication database&amp;lt;/H3&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; extern BOOL HTAuthInfo_init (void);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;/PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H3&amp;gt;Terminate the Database&amp;lt;/H3&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; extern BOOL HTAuthInfo_terminate (void);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;/PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;H3&amp;gt;Add information to the Database&amp;lt;/H3&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; Add an access authentication information node to the database. If
&lt;br&gt;&amp;nbsp;&amp;gt; the entry is already found then it is replaced with the new one.
&lt;br&gt;&amp;nbsp;&amp;gt; The template must follow normal URI syntax but can include a wildcard
&lt;br&gt;&amp;nbsp;&amp;gt; Return YES if added (or replaced), else NO
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; extern BOOL HTAuthInfo_add &amp;nbsp; &amp;nbsp;(CONST char * &amp;nbsp; scheme,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;char * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; url,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;char * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; realm,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;void * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data);
&lt;br&gt;256c277,280
&lt;br&gt;&amp;lt; &amp;lt;/PRE&amp;gt;End of file HTAAUtil.h.&amp;lt;/BODY&amp;gt;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;/PRE&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; End of file declaration
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;lt;/BODY&amp;gt;
&lt;br&gt;&lt;br&gt;[2] &amp;nbsp;$ cvs diff -r 2.18 -r 2.19 HTAAUtil.c | tee ~/tmp/HTAAUtil.c.diff
&lt;br&gt;Index: HTAAUtil.c
&lt;br&gt;===================================================================
&lt;br&gt;RCS file: /sources/public/libwww/Library/src/HTAAUtil.c,v
&lt;br&gt;retrieving revision 2.18
&lt;br&gt;retrieving revision 2.19
&lt;br&gt;diff -r2.18 -r2.19
&lt;br&gt;8,34c8,17
&lt;br&gt;&amp;lt; ** IMPORTANT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;Routines in this module use dynamic allocation, but free
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;automatically all the memory reserved by them.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;Therefore the caller never has to (and never should)
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;free() any object returned by these functions.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;Therefore also all the strings returned by this package
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;are only valid until the next call to the same function
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;is made. This approach is selected, because of the nature
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;of access authorization: no string returned by the package
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;needs to be valid longer than until the next call.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;This also makes it easy to plug the AA package in:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;you don't have to ponder whether to free() something
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;here or is it done somewhere else (because it is always
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;done somewhere else).
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;The strings that the package needs to store are copied
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;so the original strings given as parameters to AA
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;functions may be freed or modified with no side effects.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;The AA package does not free() anything else than what
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;it has itself allocated.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;AA (Access Authorization) package means modules which
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;names start with HTAA.
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;The authentication information is stored in a list of 
&lt;br&gt;authentication
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;data bases, each uniquely identified by a hostname and a port 
&lt;br&gt;number.
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Each data base contains a set of templates which can be used to 
&lt;br&gt;predict
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;what information to use in a hierarchical tree. All authentication
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;dependent information is stored as opaque data in a anode. Normally
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;a server application would only keep one auth base but if it wants
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;different protection setup as a function of different 
&lt;br&gt;interfaces then
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;it can have one auth base representing each interface. For 
&lt;br&gt;example a
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;server with interfaces &amp;quot;www.foo.com&amp;quot; and &amp;quot;internal.foo.com&amp;quot; can 
&lt;br&gt;have
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;different protection setups for each interface.
&lt;br&gt;38a22
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;HFN &amp;nbsp; &amp;nbsp; Henrik Frystyk
&lt;br&gt;43,47d26
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** BUGS:
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; **
&lt;br&gt;54,66c33,76
&lt;br&gt;&amp;lt; #include &amp;quot;HTAAUtil.h&amp;quot; /* Implemented here &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;lt; #include &amp;quot;HTAssoc.h&amp;quot; &amp;nbsp;/* Assoc list &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAAScheme_enum()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TRANSLATE SCHEME NAME INTO
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;A SCHEME ENUMERATION
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is a string representing the scheme name.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; the enumerated constant for that scheme.
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; #include &amp;quot;HTParse.h&amp;quot;
&lt;br&gt;&amp;nbsp;&amp;gt; #include &amp;quot;HTReqMan.h&amp;quot;
&lt;br&gt;&amp;nbsp;&amp;gt; #include &amp;quot;HTAssoc.h&amp;quot;
&lt;br&gt;&amp;nbsp;&amp;gt; #include &amp;quot;HTAAUtil.h&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Implemented 
&lt;br&gt;here */
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; typedef struct _HTAuthScheme {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; char * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;scheme;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTAuthParCallback * &amp;nbsp; &amp;nbsp; &amp;nbsp; parser;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTAuthGenCallback * &amp;nbsp; &amp;nbsp; &amp;nbsp; generator;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTAuthGcCallback * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gc;
&lt;br&gt;&amp;nbsp;&amp;gt; } HTAuthScheme;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE HTList * HTSchemes; &amp;nbsp; /* List of registered authentication 
&lt;br&gt;schemes */
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; typedef struct _HTABase { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Server Authentication info 
&lt;br&gt;base */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; char * &amp;nbsp; &amp;nbsp;host;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; port;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTList * &amp;nbsp;templates; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* List of templates for this 
&lt;br&gt;base */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTList * &amp;nbsp;nodes; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* List of nodes for this 
&lt;br&gt;base */
&lt;br&gt;&amp;nbsp;&amp;gt; } HTABase;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; typedef struct _HTANode { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Authentication scheme 
&lt;br&gt;specifics */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; char * &amp;nbsp; &amp;nbsp;realm;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; char * &amp;nbsp; &amp;nbsp;scheme;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; void * &amp;nbsp; &amp;nbsp;data;
&lt;br&gt;&amp;nbsp;&amp;gt; } HTANode;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; typedef struct _HTATemplate { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Hierarchical 
&lt;br&gt;information */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; char * &amp;nbsp; &amp;nbsp;tmplate;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTANode * node;
&lt;br&gt;&amp;nbsp;&amp;gt; } HTATemplate;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE HTList * AuthBases = NULL; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Current authentication 
&lt;br&gt;base */
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; /* 
&lt;br&gt;------------------------------------------------------------------------- */
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AUTHENTICATION 
&lt;br&gt;SCHEMES &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp;&amp;gt; /* 
&lt;br&gt;------------------------------------------------------------------------- */
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp;HTAuthCall_add
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;--------------
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Register a callback functions that is to be called when we want to
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;parse challenges and to generate credentials - or the other way 
&lt;br&gt;round.
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;If you are a server then you want to do the latter and if you 
&lt;br&gt;are a
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;client then you want to do the former.
&lt;br&gt;68c78,81
&lt;br&gt;&amp;lt; PUBLIC HTAAScheme HTAAScheme_enum (CONST char* name)
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; PUBLIC BOOL HTAuthCall_add (CONST char * &amp;nbsp; &amp;nbsp; &amp;nbsp;scheme,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAuthParCallback * parser,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAuthGenCallback * generator,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAuthGcCallback * &amp;nbsp;gc)
&lt;br&gt;70,71c83,98
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; static char *upcased = NULL;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; char *cur;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (scheme &amp;&amp; parser &amp;&amp; generator &amp;&amp; gc) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAuthScheme * me;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTTrace(&amp;quot;Auth add.... %s with parser %p and generator %p\n&amp;quot;,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scheme, (void *) parser, (void *) generator);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((me = (HTAuthScheme *) HT_CALLOC(1, sizeof(HTAuthScheme))) 
&lt;br&gt;== NULL)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_OUTOFMEM(&amp;quot;HTAuthCall_add&amp;quot;);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; StrAllocCopy(me-&amp;gt;scheme, scheme);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; me-&amp;gt;parser = parser;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; me-&amp;gt;generator = generator;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; me-&amp;gt;gc = gc;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!HTSchemes) HTSchemes = HTList_new();
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return HTList_addObject(HTSchemes, (void *) me);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;73c100,120
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; if (!name) return HTAA_UNKNOWN;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp;HTAuthCall_delete
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;-------------------
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Unregister a authentication scheme from the list
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Return YES if OK, else NO
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PUBLIC BOOL HTAuthCall_delete (CONST char * scheme)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTList * cur = HTSchemes;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (scheme &amp;&amp; cur) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAuthScheme * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTAuthScheme *) HTList_nextObject(cur))) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!strcmp(scheme, pres-&amp;gt;scheme)) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList_removeObject(HTSchemes, (void *) pres);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(pres-&amp;gt;scheme);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(pres);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;75,79c122,139
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; StrAllocCopy(upcased, name);
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; cur = upcased;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; while (*cur) {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; *cur = TOUPPER(*cur);
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; cur++;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp;HTAuthCall_deleteAll
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;----------------------
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Unregisters all call back functions
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Returns YES if OK, else NO
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PUBLIC BOOL HTAuthCall_deleteAll (void)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTList * cur = HTSchemes;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE) HTTrace(&amp;quot;Auth delete. all schemes\n&amp;quot;);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (cur) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAuthScheme * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTAuthScheme *) HTList_nextObject(cur))) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(pres-&amp;gt;scheme);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(pres);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList_delete(HTSchemes);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTSchemes = NULL;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;81,87c141
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; if &amp;nbsp; &amp;nbsp; &amp;nbsp;(!strncmp(upcased, &amp;quot;NONE&amp;quot;, 4)) &amp;nbsp; &amp;nbsp; &amp;nbsp; return HTAA_NONE;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; else if (!strncmp(upcased, &amp;quot;BASIC&amp;quot;, 5)) &amp;nbsp; &amp;nbsp; &amp;nbsp;return HTAA_BASIC;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; else if (!strncmp(upcased, &amp;quot;PUBKEY&amp;quot;, 6)) &amp;nbsp; &amp;nbsp; return HTAA_PUBKEY;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; else if (!strncmp(upcased, &amp;quot;KERBEROSV4&amp;quot;, 10)) &amp;nbsp;return 
&lt;br&gt;HTAA_KERBEROS_V4;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; else if (!strncmp(upcased, &amp;quot;KERBEROSV5&amp;quot;, 10)) &amp;nbsp;return 
&lt;br&gt;HTAA_KERBEROS_V5;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; else &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return HTAA_UNKNOWN;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;89a144,154
&lt;br&gt;&amp;nbsp;&amp;gt; /* 
&lt;br&gt;------------------------------------------------------------------------- */
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AUTHENTICATION INFORMATION DATA 
&lt;br&gt;BASE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp;&amp;gt; /* 
&lt;br&gt;------------------------------------------------------------------------- */
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp;This module maintains an authentication information database
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;which contains informations for generate either credentials or
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;challenges. The database is symmetric for both server and client
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;applications and the implementation can be changed independent 
&lt;br&gt;of the
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;API so if you fell like using a fancy database toolkit then 
&lt;br&gt;feel free
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;to go right ahead :-)
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;91,110c156,171
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAAScheme_name()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GET THE NAME OF A GIVEN SCHEME
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;scheme &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is one of the scheme enum values:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HTAA_NONE, HTAA_BASIC, HTAA_PUBKEY, ...
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; the name of the scheme, i.e.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;None&amp;quot;, &amp;quot;Basic&amp;quot;, &amp;quot;Pubkey&amp;quot;, ...
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; PUBLIC char *HTAAScheme_name (HTAAScheme scheme)
&lt;br&gt;&amp;lt; {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; switch (scheme) {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; case HTAA_NONE: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;None&amp;quot;; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; case HTAA_BASIC: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;Basic&amp;quot;; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; case HTAA_PUBKEY: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;Pubkey&amp;quot;; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; case HTAA_KERBEROS_V4: &amp;nbsp;return &amp;quot;KerberosV4&amp;quot;; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; case HTAA_KERBEROS_V5: &amp;nbsp;return &amp;quot;KerberosV5&amp;quot;; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; case HTAA_UNKNOWN: &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;UNKNOWN&amp;quot;; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; default: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;THIS-IS-A-BUG&amp;quot;;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; /*
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Create a new anode
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Returns new object or NULL if error
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE HTANode * HTANode_new (HTABase * base, CONST char * realm,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CONST char * scheme, void * data)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (base &amp;&amp; realm &amp;&amp; scheme) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTANode * me;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((me = (HTANode *) HT_CALLOC(1, sizeof(HTANode))) == NULL)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_OUTOFMEM(&amp;quot;HTANode_new&amp;quot;);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; StrAllocCopy(me-&amp;gt;realm, realm);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; StrAllocCopy(me-&amp;gt;scheme, scheme);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; me-&amp;gt;data = data;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList_addObject(base-&amp;gt;nodes, (void *) me);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return me;
&lt;br&gt;111a173
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NULL;
&lt;br&gt;113a176,191
&lt;br&gt;&amp;nbsp;&amp;gt; /*
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Delete a node. We call the scheme gc callback to handle the opaque
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;data object.
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE BOOL HTANode_delete (HTABase * base, HTANode * me)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (base &amp;&amp; me) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAuth_cleanup(me-&amp;gt;scheme, me-&amp;gt;data);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(me-&amp;gt;realm);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(me-&amp;gt;scheme);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList_removeObject(base-&amp;gt;nodes, (void *) me);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(me);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;114a193,207
&lt;br&gt;&amp;nbsp;&amp;gt; /*
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Search an authentication base for a matching anode.
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Return the anode object found or NULL if none
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE HTANode * HTANode_find (HTABase * base, CONST char * realm)
&lt;br&gt;&amp;nbsp;&amp;gt; { &amp;nbsp; 
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (base &amp;&amp; base-&amp;gt;nodes &amp;&amp; realm) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList * cur = base-&amp;gt;nodes;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTANode * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTANode *) HTList_nextObject(cur))) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!strcmp(pres-&amp;gt;realm, realm)) return pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NULL;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;116,259c209,226
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAA_templateMatch()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;STRING COMPARISON FUNCTION FOR FILE NAMES
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WITH ONE WILDCARD * IN THE TEMPLATE
&lt;br&gt;&amp;lt; ** NOTE:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;This is essentially the same code as in HTRules.c, but it
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;cannot be used because it is embedded in between other code.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;(In fact, HTRules.c should use this routine, but then this
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; routine would have to be more sophisticated... why is life
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; sometimes so hard...)
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;template &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is a template string to match the file name
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;agaist, may contain a single wildcard
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;character * which matches zero or more
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arbitrary characters.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;filename &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is the filename (or pathname) to be matched
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;agaist the template.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; YES, if filename matches the template.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NO, otherwise.
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; PUBLIC BOOL HTAA_templateMatch (CONST char * tmplate,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CONST char * filename)
&lt;br&gt;&amp;lt; {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; CONST char *p = tmplate;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; CONST char *q = filename;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; int m;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; if (!tmplate || !filename) {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (PROT_TRACE)
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTTrace(&amp;quot;HTAA_templateMatch: invalid param: %s is NULL!!\n&amp;quot;,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (tmplate ? &amp;quot;filename&amp;quot; : &amp;quot;template&amp;quot;));
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; for( ; *p &amp;nbsp;&amp;&amp; &amp;nbsp;*q &amp;nbsp;&amp;&amp; &amp;nbsp;*p == *q; p++, q++) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Find first 
&lt;br&gt;mismatch */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; /* do nothing else */
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; if (!*p &amp;&amp; !*q) &amp;nbsp; return YES; &amp;nbsp; &amp;nbsp; /* Equally long equal strings */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; else if ('*' == *p) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Wildcard */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; p++; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Skip wildcard character */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; m = strlen(q) - strlen(p); &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Amount to match to wildcard */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (m &amp;lt; 0) return NO; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* No match, filename too short */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; else { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Skip the matched characters and 
&lt;br&gt;compare */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (strcmp(p, q+m)) return NO; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Tail mismatch */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return YES; &amp;nbsp; &amp;nbsp; /* Tail match */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; } /* if wildcard */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; else &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return NO; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Length or character mismatch */
&lt;br&gt;&amp;lt; } &amp;nbsp; 
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAA_templateCaseMatch()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;STRING COMPARISON FUNCTION FOR FILE NAMES
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; WITH ONE WILDCARD * IN THE TEMPLATE (Case Insensitive)
&lt;br&gt;&amp;lt; ** NOTE:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;This is essentially the same code as in HTAA_templateMatch, but
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;it compares case insensitive (for VMS). Reason for this routine
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;is that HTAA_templateMatch gets called from several places, also
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;there where a case sensitive match is needed, so one cannot just
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;change the HTAA_templateMatch routine for VMS.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;tmplate &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; is a template string to match the file name
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;agaist, may contain a single wildcard
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;character * which matches zero or more
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arbitrary characters.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;filename &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;is the filename (or pathname) to be matched
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;agaist the template.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; YES, if filename matches the template.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NO, otherwise.
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; PUBLIC BOOL HTAA_templateCaseMatch (CONST char * tmplate,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CONST char * filename)
&lt;br&gt;&amp;lt; {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; CONST char *p = tmplate;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; CONST char *q = filename;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; int m;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; if (!tmplate || !filename) {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (PROT_TRACE)
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTTrace(
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;HTAA_templateCaseMatch: invalid param: %s is NULL!!\n&amp;quot;,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (tmplate ? &amp;quot;filename&amp;quot; : &amp;quot;template&amp;quot;));
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; for( ; *p &amp;nbsp;&amp;&amp; &amp;nbsp;*q &amp;nbsp;&amp;&amp; &amp;nbsp;TOUPPER(*p) == TOUPPER(*q); p++, q++) /* 
&lt;br&gt;Find first mismatch */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; /* do nothing else */
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; if (!*p &amp;&amp; !*q) &amp;nbsp; return YES; &amp;nbsp; &amp;nbsp; /* Equally long equal strings */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; else if ('*' == *p) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Wildcard */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; p++; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Skip wildcard character */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; m = strlen(q) - strlen(p); &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Amount to match to wildcard */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (m &amp;lt; 0) return NO; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* No match, filename too short */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; else { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Skip the matched characters and 
&lt;br&gt;compare */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (strcasecomp(p, q+m)) &amp;nbsp; &amp;nbsp;return NO; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Tail mismatch */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return YES; &amp;nbsp; &amp;nbsp; /* Tail match */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; } /* if wildcard */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; else &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return NO; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Length or character mismatch */
&lt;br&gt;&amp;lt; } &amp;nbsp; 
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;HTAA_makeProtectionTemplate()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CREATE A PROTECTION TEMPLATE FOR THE FILES
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IN THE SAME DIRECTORY AS THE GIVEN FILE
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(Used by server if there is no fancier way for
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;it to tell the client, and by browser if server
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;didn't send WWW-ProtectionTemplate: field)
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;docname is the document pathname (from URL).
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns a template matching docname, and other files
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;files in that directory.
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;E.g. &amp;nbsp;/foo/bar/x.html &amp;nbsp;=&amp;gt; &amp;nbsp;/foo/bar/ *
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;^
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Space only to prevent it from
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;being a comment marker here,
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;there really isn't any space.
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; PUBLIC char *HTAA_makeProtectionTemplate (CONST char * docname)
&lt;br&gt;&amp;lt; {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; char *tmplate = NULL;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; char *slash = NULL;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; if (docname) {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; StrAllocCopy(tmplate, docname);
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; slash = strrchr(tmplate, '/');
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (slash) slash++;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; else slash = tmplate;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; *slash = (char)0;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; StrAllocCat(tmplate, &amp;quot;*&amp;quot;);
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; else StrAllocCopy(tmplate, &amp;quot;*&amp;quot;);
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; if (PROT_TRACE)
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTTrace(&amp;quot;make_template: made template `%s' for file `%s'\n&amp;quot;,
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tmplate, docname);
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; /*
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Create a new template and add to authentication base
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Returns new object or NULL if error
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE HTATemplate * HTATemplate_new (HTABase * base, char * tmplate,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HTANode * node)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (base &amp;&amp; tmplate &amp;&amp; node) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTATemplate * me;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((me = (HTATemplate *) HT_CALLOC(1, sizeof(HTATemplate))) == 
&lt;br&gt;NULL)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_OUTOFMEM(&amp;quot;HTATemplate_new&amp;quot;);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; me-&amp;gt;node = node;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; me-&amp;gt;tmplate = tmplate;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList_addObject(base-&amp;gt;templates, (void *) me);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return me;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NULL;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;261c228,239
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; return tmplate;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; /*
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Delete a template
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE BOOL HTATemplate_delete (HTABase * base, HTATemplate * me)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (base &amp;&amp; me) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(me-&amp;gt;tmplate);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList_removeObject(base-&amp;gt;templates, (void *) me);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(me);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;263a242,261
&lt;br&gt;&amp;nbsp;&amp;gt; /*
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Search an authentication base for a matching template.
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Return the template object found or NULL if none
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE HTATemplate * HTATemplate_find (HTABase * base, CONST char 
&lt;br&gt;*docname)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (base &amp;&amp; base-&amp;gt;templates &amp;&amp; docname) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList * cur = base-&amp;gt;templates;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTATemplate * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTATemplate *) HTList_nextObject(cur))) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (HTStrMatch(pres-&amp;gt;tmplate, docname)) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTTrace(&amp;quot;Template.... `%s' matched `%s'\n&amp;quot;,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; docname, pres-&amp;gt;tmplate);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NULL;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;264a263,282
&lt;br&gt;&amp;nbsp;&amp;gt; /*
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Search an authentication base for a HTATemplate object in order to
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;update it with a new HTANode. We do this whenever we replace a 
&lt;br&gt;anode
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Return YES if OK, else NO
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE BOOL HTATemplate_update (HTABase * base, HTANode * old, 
&lt;br&gt;HTANode *me)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (base &amp;&amp; old &amp;&amp; me) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList * cur = base-&amp;gt;templates;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTATemplate * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTATemplate *) HTList_nextObject(cur))) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (pres-&amp;gt;node == old) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pres-&amp;gt;node = me;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE) HTTrace(&amp;quot;Template.... updating %p\n&amp;quot;, 
&lt;br&gt;pres);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;265a284,303
&lt;br&gt;&amp;nbsp;&amp;gt; /*
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Create a new authentication base
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Returns new object or NULL if error
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE HTABase * HTABase_new (CONST char * host, int port)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (host) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTABase * me;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((me = (HTABase *) HT_CALLOC(1, sizeof(HTABase))) == NULL)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_OUTOFMEM(&amp;quot;HTABase_new&amp;quot;);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; StrAllocCopy(me-&amp;gt;host, host);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; me-&amp;gt;port = (port &amp;gt; 0 ? port : 80);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; me-&amp;gt;templates = HTList_new();
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; me-&amp;gt;nodes = HTList_new();
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList_addObject(AuthBases, (void *) me);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE) HTTrace(&amp;quot;Auth Base... %p created\n&amp;quot;, me);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return me;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NULL;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;268c306
&lt;br&gt;&amp;lt; ** Skip leading whitespace from *s forward
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Delete a complete server tree and everything within it.
&lt;br&gt;270c308,334
&lt;br&gt;&amp;lt; #define SKIPWS(s) while (*s==' ' || *s=='\t') s++;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE BOOL HTABase_delete (HTABase * base)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (base) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList * cur;
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Free all templates */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((cur = base-&amp;gt;templates)) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTATemplate * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTATemplate *) HTList_lastObject(cur)))
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTATemplate_delete(base, pres);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList_delete(base-&amp;gt;templates);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Free all nodes */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((cur = base-&amp;gt;nodes)) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTANode * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTANode *) HTList_lastObject(cur)))
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTANode_delete(base, pres);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList_delete(base-&amp;gt;nodes); &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(base-&amp;gt;host);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(base);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;273c337
&lt;br&gt;&amp;lt; ** Kill trailing whitespace starting from *(s-1) backwords
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Find a authentication base. Return NULL if not found
&lt;br&gt;275c339,350
&lt;br&gt;&amp;lt; #define KILLWS(s) {char *c=s-1; while (*c==' ' || *c=='\t') 
&lt;br&gt;*(c--)=(char)0;}
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE HTABase * HTABase_find (CONST char * host, int port)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTList * cur = AuthBases;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (port &amp;lt;= 0) port = 80;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (host &amp;&amp; cur) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTABase * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTABase *) HTList_nextObject(cur))) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (pres-&amp;gt;port==port &amp;&amp; !strcmp(pres-&amp;gt;host, host)) return pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NULL;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;276a352,385
&lt;br&gt;&amp;nbsp;&amp;gt; /* 
&lt;br&gt;------------------------------------------------------------------------- */
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HANDLING THE AUTHENTICATION INFORMATION 
&lt;br&gt;BASE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;nbsp;&amp;gt; /* 
&lt;br&gt;------------------------------------------------------------------------- */
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp;HTAuthInfo_add
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;--------------
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Add an access authentication information node to the database. If
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;the entry is already found then it is replaced with the new one.
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;The template must follow normal URI syntax but can include a 
&lt;br&gt;wildcard
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Return YES if added (or replaced), else NO
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PUBLIC BOOL HTAuthInfo_add (CONST char * scheme, char * url,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * realm, void * data)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTABase * base;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTANode * anode;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (!scheme || !url || !realm || !data) return NO;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE) HTTrace(&amp;quot;Auth base... adding info for `%s'\n&amp;quot;, url);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (!AuthBases) AuthBases = HTList_new();
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; /* Find an existing authentication base or create new */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * host = HTParse(url, &amp;quot;&amp;quot;, PARSE_HOST);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * colon = strchr(host, ':');
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; int port = 80;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (colon ) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *(colon++) = '\0'; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Chop off port 
&lt;br&gt;number */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; port = atoi(colon);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((base = HTABase_find(host, port)) == NULL)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; base = HTABase_new(host, port);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(host);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!base) return NO; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Couldn't create a new 
&lt;br&gt;base */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;278,343c387,400
&lt;br&gt;&amp;lt; /* PUBLIC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAA_parseArgList()
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PARSE AN ARGUMENT LIST GIVEN IN A HEADER FIELD
&lt;br&gt;&amp;lt; ** ON ENTRY:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;str &amp;nbsp; &amp;nbsp; is a comma-separated list:
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;item, item, item
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;where
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;item ::= value
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | name=value
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | name=&amp;quot;value&amp;quot;
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Leading and trailing whitespace is ignored
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;everywhere except inside quotes, so the following
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;examples are equal:
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name=value,foo=bar
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name=&amp;quot;value&amp;quot;,foo=&amp;quot;bar&amp;quot;
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name = value , &amp;nbsp;foo = bar
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name = &amp;quot;value&amp;quot; , &amp;nbsp;foo = &amp;quot;bar&amp;quot;
&lt;br&gt;&amp;lt; **
&lt;br&gt;&amp;lt; ** ON EXIT:
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp;returns a list of name-value pairs (actually HTAssocList*).
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;For items with no name, just value, the name is
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;the number of order number of that item. E.g.
&lt;br&gt;&amp;lt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;1&amp;quot; for the first, etc.
&lt;br&gt;&amp;lt; */
&lt;br&gt;&amp;lt; PUBLIC HTAssocList *HTAA_parseArgList (char * str)
&lt;br&gt;&amp;lt; {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; HTAssocList *assoc_list = HTAssocList_new();
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; char *cur = NULL;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; char *name = NULL;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; int index = 0;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; if (!str) return assoc_list;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; while (*str) {
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; SKIPWS(str); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Skip leading 
&lt;br&gt;whitespace */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; cur = str;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; index++;
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (*cur &amp;nbsp;&amp;&amp; &amp;nbsp;*cur != '=' &amp;nbsp;&amp;&amp; &amp;nbsp;*cur != ',')
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cur++; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Find end of name (or lonely value without a 
&lt;br&gt;name) */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; KILLWS(cur); &amp;nbsp; &amp;nbsp;/* Kill trailing whitespace */
&lt;br&gt;&amp;lt;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (*cur == '=') { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Name followed by a 
&lt;br&gt;value */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *(cur++) = (char)0; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Terminate name */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; StrAllocCopy(name, str);
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SKIPWS(cur); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Skip WS leading the 
&lt;br&gt;value */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; str = cur;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (*str == '&amp;quot;') { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Quoted value */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; str++;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cur = str;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (*cur &amp;nbsp;&amp;&amp; &amp;nbsp;*cur != '&amp;quot;') cur++;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (*cur == '&amp;quot;')
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *(cur++) = (char)0; /* Terminate value */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* else it is lacking terminating quote */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SKIPWS(cur); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Skip WS leading comma */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (*cur == ',') cur++; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Skip separating colon */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Unquoted value */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (*cur &amp;nbsp;&amp;&amp; &amp;nbsp;*cur != ',') cur++;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; KILLWS(cur); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Kill trailing 
&lt;br&gt;whitespace */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (*cur == ',')
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *(cur++) = (char)0;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* else *cur already NULL */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; /*
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; ** Find a matching anode or create a new one. If we find an 
&lt;br&gt;existing one
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; ** we also update the template pointing to the anode. Otherwise 
&lt;br&gt;we create
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; ** a new template as well.
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTANode * old = HTANode_find(base, realm);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; anode = HTANode_new(base, realm, scheme, data);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (old) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTATemplate_update(base, old, anode);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTANode_delete(base, old);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * docname = HTParse(url, &amp;quot;&amp;quot;, PARSE_PATH);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTATemplate_new(base, docname, anode);
&lt;br&gt;345,356c402,403
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; else { &amp;nbsp;/* No name, just a value */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (*cur == ',')
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *(cur++) = (char)0; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Terminate value */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* else last value on line (already terminated by NULL) */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; StrAllocCopy(name, &amp;quot;nnn&amp;quot;); &amp;nbsp;/* Room for item order number */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sprintf(name, &amp;quot;%d&amp;quot;, index); /* Item order number for name */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAssocList_add(assoc_list, name, str);
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; &amp;nbsp; str = cur;
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; } /* while *str */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; HT_FREE(name); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Henrik 
&lt;br&gt;14/03-94 */
&lt;br&gt;&amp;lt; &amp;nbsp; &amp;nbsp; return assoc_list;
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return anode ? YES : NO;
&lt;br&gt;358a406,465
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp;HTAuthInfo_deleteAll
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;--------------------
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Remove the Database
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PUBLIC BOOL HTAuthInfo_deleteAll (void)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (AuthBases) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList * cur = AuthBases;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTABase * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTABase *) HTList_nextObject(cur)))
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTABase_delete(pres);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTList_delete(AuthBases);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; AuthBases = NULL;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp;AuthInfo_find
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;-------------
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Seaches the set of authentication information bases for a match
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;In order to find an anode we do the following:
&lt;br&gt;&amp;nbsp;&amp;gt; **
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1) Find the right auth base
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2) See if there is a realm match
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3) See if there is a template match for URL
&lt;br&gt;&amp;nbsp;&amp;gt; **
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Return the node found else NULL which means that we don't have any
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;authentication information to hook on to this request or response
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PRIVATE HTANode * HTAuthInfo_find (char * url, char * realm)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTABase * base;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTATemplate * tmplate;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTANode * anode;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTTrace(&amp;quot;Auth base... looking for info on `%s'\n&amp;quot;, url);
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; /* Find an existing authentication base */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * host = HTParse(url, &amp;quot;&amp;quot;, PARSE_HOST);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * colon = strchr(host, ':');
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; int port = 80;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (colon ) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *(colon++) = '\0'; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Chop off port 
&lt;br&gt;number */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; port = atoi(colon);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; base = HTABase_find(host, port);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(host);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (base == NULL) return NULL; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Base not 
&lt;br&gt;found */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; /* Do we have a realm to look for? */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (realm) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((anode = HTANode_find(base, realm)) != NULL) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTTrace(&amp;quot;Auth info... found matching realm `%s\'\n&amp;quot;, 
&lt;br&gt;realm);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return anode;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;359a467,476
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; /* If no realm or realm not found then look for template */
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * docname = HTParse(url, &amp;quot;&amp;quot;, PARSE_PATH);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((tmplate = HTATemplate_find(base, docname)) != NULL)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; anode = tmplate-&amp;gt;node;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FREE(docname);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return anode;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NULL; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* No 
&lt;br&gt;match */
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;360a478,504
&lt;br&gt;&amp;nbsp;&amp;gt; /* 
&lt;br&gt;------------------------------------------------------------------------- */
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PARSE AND GENERATE CHELLENGES AND 
&lt;br&gt;CREDENTIALS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp;&amp;gt; /* 
&lt;br&gt;------------------------------------------------------------------------- */
&lt;br&gt;&amp;nbsp;&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp;HTAuth_parse
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;------------
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;This function looks for a authentication scheme that matches 
&lt;br&gt;what we
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;have in the request object and calls the parser callback function.
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Case is not significant.
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Return YES or whatever callback returns
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PUBLIC BOOL HTAuth_parse (HTRequest * request)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTList * cur = HTSchemes;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (request &amp;&amp; request-&amp;gt;scheme &amp;&amp; request-&amp;gt;challenge &amp;&amp; cur) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAuthScheme * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTAuthScheme *) HTList_nextObject(cur))) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!strcasecomp(request-&amp;gt;scheme, pres-&amp;gt;scheme)) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTTrace(&amp;quot;Auth Calling Parser %p\n&amp;quot;, pres-&amp;gt;parser);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return (*(pres-&amp;gt;parser))(request, pres-&amp;gt;scheme);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE)HTTrace(&amp;quot;Auth Parse.. No challenge or credentials 
&lt;br&gt;found\n&amp;quot;);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;361a506,534
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp;HTAuth_generate
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;---------------
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;This function looks for a any authentication scheme that protects
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;this resource and calls the generator callback in order to make a
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;challenge or setup credentials depending on whether we are a server
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;or a client.
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Return YES or whatever callback returns
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PUBLIC BOOL HTAuth_generate (HTRequest * request)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTList * cur = HTSchemes;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (request &amp;&amp; cur) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; char * url = HTAnchor_physical(request-&amp;gt;anchor);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTANode * node = HTAuthInfo_find(url, request-&amp;gt;realm);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (node &amp;&amp; node-&amp;gt;data) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAuthScheme * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTAuthScheme *) HTList_nextObject(cur))) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!strcasecomp(node-&amp;gt;scheme, pres-&amp;gt;scheme)) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTTrace(&amp;quot;Auth Calling Generator 
&lt;br&gt;%p\n&amp;quot;,pres-&amp;gt;generator);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return (*(pres-&amp;gt;generator))(request, node-&amp;gt;scheme,
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; node-&amp;gt;realm, node-&amp;gt;data);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE)HTTrace(&amp;quot;Auth Gen.... No challenge or credentials 
&lt;br&gt;found\n&amp;quot;);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;362a536,557
&lt;br&gt;&amp;nbsp;&amp;gt; /* &amp;nbsp; &amp;nbsp;HTAuth_cleanup
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;--------------
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;This function looks for a authentication scheme that matches 
&lt;br&gt;what we
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;have in the request object and calls the cleanup callback function.
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Case is not significant. If the scheme is not registered then
&lt;br&gt;&amp;nbsp;&amp;gt; ** &amp;nbsp; &amp;nbsp;Return YES if callback found else NO
&lt;br&gt;&amp;nbsp;&amp;gt; */
&lt;br&gt;&amp;nbsp;&amp;gt; PUBLIC BOOL HTAuth_cleanup (CONST char * scheme, void * data)
&lt;br&gt;&amp;nbsp;&amp;gt; {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; HTList * cur = HTSchemes;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; if (scheme &amp;&amp; cur &amp;&amp; data) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTAuthScheme * pres;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((pres = (HTAuthScheme *) HTList_nextObject(cur))) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!strcasecomp(scheme, pres-&amp;gt;scheme)) {
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (AUTH_TRACE) HTTrace(&amp;quot;Auth Calling gc %p\n&amp;quot;, pres-&amp;gt;gc);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (*(pres-&amp;gt;gc))(scheme, data);
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return YES;
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; return NO;
&lt;br&gt;&amp;nbsp;&amp;gt; }
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;The future is here. It's just not evenly distributed yet.&amp;quot;
&lt;br&gt;&amp;nbsp;-- William Gibson, quoted by Whitfield Diffie
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/libwww%2C-HTAAUtil.h-changes-tp16248180p16343088.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-16248180</id>
	<title>libwww, HTAAUtil.h changes</title>
	<published>2008-03-24T03:22:08Z</published>
	<updated>2008-03-24T03:22:08Z</updated>
	<author>
		<name>kordex -</name>
	</author>
	<content type="html">Hello,&lt;br&gt;&lt;br&gt;I have read this change history: &lt;a href=&quot;http://www.w3.org/Library/User/History.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/User/History.html&lt;/a&gt;.&lt;br&gt;I have a piece of code which uses HTAAUtil.h and specifically needs this section of HTAAUtil.h&lt;br&gt;
&lt;br&gt;typedef enum {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTAA_UNKNOWN,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTAA_NONE,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTAA_BASIC,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTAA_PUBKEY,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTAA_KERBEROS_V4,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTAA_KERBEROS_V5,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTAA_MAX_SCHEMES&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* THIS MUST ALWAYS BE LAST! */&lt;br&gt;
} HTAAScheme;&lt;br&gt;&lt;br&gt;There is no mention of removing it or anything on that url. I searched the source and it should be mentioned in change log of &amp;quot;Release 4.1b1 May 20 1996&amp;quot; as it exists in &lt;a name=&quot;4.0D&quot; target=&quot;_top&quot;&gt;&amp;quot;Release 4.0D February 12 1996&amp;quot;.&lt;br&gt;
&lt;br&gt;The software is an old www-browser (Mosaic) which i am trying to make little more closer to modern standards.&lt;br&gt;I need to know what were these used for inside libwww and how are they replaced.&lt;br&gt;&lt;br&gt;Thank you.&lt;br&gt;&lt;br&gt;
&lt;br&gt;-Mikko Kortelainen&lt;br&gt;&lt;/a&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/libwww%2C-HTAAUtil.h-changes-tp16248180p16248180.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-14984067</id>
	<title>Re: HTHstMan.h is missing #include &lt;netinet/in.h&gt; or #include &quot;wwwsys.h&quot;  or both</title>
	<published>2008-01-19T21:21:38Z</published>
	<updated>2008-01-19T21:21:38Z</updated>
	<author>
		<name>Vic Bancroft-2</name>
	</author>
	<content type="html">&lt;br&gt;kordex - wrote:
&lt;br&gt;&amp;gt; I was porting this old mosaic to new libwww (5.4) and i encountered this
&lt;br&gt;&amp;gt; .../libwww2/HTHstMan.h:94: error: field 'sock_addr' has incomplete type among
&lt;br&gt;&amp;gt; other errors, It was fixed by adding those lines. 
&lt;br&gt;What operating system and compiler version are you using ? &amp;nbsp;Can you post 
&lt;br&gt;a diff of what your environment requires ?
&lt;br&gt;&amp;gt; Surely it can be my fault as I am still learning C or more learning to program C on unix platforms but for my knowledge there should be both lines as there is reference to wwwsys.h but no include to it.
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;Well, a good example is perhaps HTNet.c which before it includes 
&lt;br&gt;HTHstMan.h previously includes wwwsys.h. &amp;nbsp;In my world, the configure 
&lt;br&gt;script must detect the host environment and write out a system specific 
&lt;br&gt;wwwconf.h such that appropriate structures are instantiated.
&lt;br&gt;&lt;br&gt;more,
&lt;br&gt;l8r,
&lt;br&gt;v
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;The future is here. It's just not evenly distributed yet.&amp;quot;
&lt;br&gt;&amp;nbsp;-- William Gibson, quoted by Whitfield Diffie
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/HTHstMan.h-is-missing--include-%3Cnetinet-in.h%3E-or--include-%22wwwsys.h%22-or-both-tp14913673p14984067.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-14876112</id>
	<title>Building a proxy server</title>
	<published>2008-01-16T01:23:28Z</published>
	<updated>2008-01-16T01:23:28Z</updated>
	<author>
		<name>Ashish Parajuli</name>
	</author>
	<content type="html">&lt;HTML&gt;
&lt;HEAD&gt;
&lt;META http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=us-ascii&quot;&gt;


&lt;meta name=Generator content=&quot;Microsoft Word 11 (filtered medium)&quot;&gt;


&lt;/HEAD&gt;
&lt;BODY lang=EN-US link=blue vlink=purple&gt;
&lt;DIV&gt;

&lt;div class=Section1&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;I am trying to build a HTTP proxy. The listening and
accepting module is already ready. I want to use libwww to get the request
(data) from the client, make some modification to it and send it to the destination
server. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;ol style='margin-top:0in' start=1 type=1&gt;
 &lt;li class=MsoNormal style='mso-list:l0 level1 lfo1'&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;font-family:Arial'&gt;A live socket descriptor is
     given after a TCP connection from the client is established.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
 &lt;li class=MsoNormal style='mso-list:l0 level1 lfo1'&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;font-family:Arial'&gt;I need to get HTTP data from this
     descriptor using libwww. (I want all the chunk handling and parsing of
     headers to be done by libwww)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
 &lt;li class=MsoNormal style='mso-list:l0 level1 lfo1'&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;font-family:Arial'&gt;I need to parse this data, do
     some modification to it and send it to the destination server.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
 &lt;li class=MsoNormal style='mso-list:l0 level1 lfo1'&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;font-family:Arial'&gt;I don&amp;#8217;t need to tamper
     any HTTP headers only the data portion needs to be modified.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
 &lt;li class=MsoNormal style='mso-list:l0 level1 lfo1'&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;font-family:Arial'&gt;I also need to create my own
     request and send it to the destination server with anything being sent by
     the client.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;How do I use a live socket and bind it with libwww and get
data to and from client and server.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;Any help will be highly appreciated.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;And does anybody use libwww nowadays I don&amp;#8217;t seem to
find any posts in the mailing list. Has libwww become obsolete.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;/div&gt;

 &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;P CLASS=&quot;MsoNormal&quot;&gt;
&lt;FONT FACE=&quot;Courier New&quot; SIZE=&quot;1&quot;&gt;&lt;SPAN STYLE=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'&quot;&gt;PRIVACY NOTICE&lt;BR&gt;&lt;BR&gt;This email and any attachments may be confidential and/or privileged. Use of the information contained in this email by anyone other than the intended recipient is strictly prohibited. If you have received this email in error, please notify the sender by replying to this message and delete this email.&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;/P&gt;
&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Building-a-proxy-server-tp14876112p14876112.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-14913673</id>
	<title>HTHstMan.h is missing #include &lt;netinet/in.h&gt; or #include &quot;wwwsys.h&quot; or both</title>
	<published>2008-01-15T13:56:55Z</published>
	<updated>2008-01-15T13:56:55Z</updated>
	<author>
		<name>kordex -</name>
	</author>
	<content type="html">I was porting this old mosaic to new libwww (5.4) and i encountered this ../libwww2/HTHstMan.h:94: error: field 'sock_addr' has incomplete type among other errors, It was fixed by adding those lines. Surely it can be my fault as I am still learning C or more learning to program C on unix platforms but for my knowledge 
&lt;br&gt;there should be both lines as there is reference to wwwsys.h but no include to it.&lt;br&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/HTHstMan.h-is-missing--include-%3Cnetinet-in.h%3E-or--include-%22wwwsys.h%22-or-both-tp14913673p14913673.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-14528975</id>
	<title>Problem using libwww in Borland C++6</title>
	<published>2007-12-27T20:40:16Z</published>
	<updated>2007-12-27T20:40:16Z</updated>
	<author>
		<name>Ashish Parajuli</name>
	</author>
	<content type="html">&lt;HTML&gt;
&lt;HEAD&gt;
&lt;META http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=us-ascii&quot;&gt;


&lt;meta name=Generator content=&quot;Microsoft Word 11 (filtered medium)&quot;&gt;


&lt;/HEAD&gt;
&lt;BODY lang=EN-US link=blue vlink=purple&gt;
&lt;DIV&gt;

&lt;div class=Section1&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;I am using Borland C++ 6 and having problems using libwww. I
get a error directive showing conflict in stdarg.h and varargs.h (&amp;#8220;Error:
cant include both starg.h and varargs.h).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;I did some changes in the wwwsys.h file for this, but then a
load of other errors are coming like redefinition of BOOLEAN etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;Can anybody help me out with this please.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt;
font-family:Arial'&gt;Thanks,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class=MsoNormal&gt;&lt;font size=3 face=&quot;Times New Roman&quot;&gt;&lt;span style='font-size:
12.0pt'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;/div&gt;

 &lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;
&lt;P CLASS=&quot;MsoNormal&quot;&gt;
&lt;FONT FACE=&quot;Courier New&quot; SIZE=&quot;1&quot;&gt;&lt;SPAN STYLE=&quot;FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'&quot;&gt;PRIVACY NOTICE&lt;BR&gt;&lt;BR&gt;This email and any attachments may be confidential and/or privileged. Use of the information contained in this email by anyone other than the intended recipient is strictly prohibited. If you have received this email in error, please notify the sender by replying to this message and delete this email.&lt;/SPAN&gt;&lt;/FONT&gt;
&lt;/P&gt;
&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Problem-using-libwww-in-Borland-C%2B%2B6-tp14528975p14528975.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13531264</id>
	<title>POST data and wait for an answer</title>
	<published>2007-11-01T09:42:59Z</published>
	<updated>2007-11-01T09:42:59Z</updated>
	<author>
		<name>kamikaze</name>
	</author>
	<content type="html">hello everybody! My C function needs to make HTTP POST (without form or any field) for data (char *data) to an URL (char *url) and then wait for a HTTP response from server. Actually I see something simillar in Examples (post.c). This code makes POST as I need (just HTTP Headers and data), but then it asks to save a file (index.html for example). I need just to get an answer and return it as &amp;nbsp;char *answer_data. Any suggestions? Do I need to make any kind of callback?
&lt;br&gt;&lt;br&gt;Thanks.&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/POST-data-and-wait-for-an-answer-tp13531264p13531264.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-13363253</id>
	<title>Chunk from Buffer</title>
	<published>2007-10-23T03:57:07Z</published>
	<updated>2007-10-23T03:57:07Z</updated>
	<author>
		<name>Dick Gumshoe</name>
	</author>
	<content type="html">Hello Greetings!&lt;br&gt;&lt;br&gt;I was wondering if I can use libwww for a program that is using libnetfilter_queue.&lt;br&gt;Right now, libnetfilter is getting the http raw packets properly, but I need to extract the headers from the raw packets and I&amp;#39;m planning to use the chunk class for this specifically the HTChunk_fromBuffer function.
&lt;br&gt;&lt;br&gt;I&amp;#39;m putting the raw packets in a char * and I was wondering how to collate and convert these raw packets to a chunk, so I could use the above function.&lt;br&gt;&lt;br&gt;Thanks in advanced!&lt;br&gt;&lt;br&gt;Gumshoe&lt;br&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Chunk-from-Buffer-tp13363253p13363253.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12933396</id>
	<title>Re: problems with HTLoadToFile</title>
	<published>2007-09-27T19:44:32Z</published>
	<updated>2007-09-27T19:44:32Z</updated>
	<author>
		<name>Sam Varshavchik</name>
	</author>
	<content type="html">Vitaliy Yunikov writes:
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I just started working with libwww and I have a question concerning file
&lt;br&gt;&amp;gt; download. To download a file I use HTLoadToFile function, and I want
&lt;br&gt;&amp;gt; to run it in separate thread. I also want to have possibility to stop
&lt;br&gt;&amp;gt; the download by user request. I've read a lot of libwww docs and I've
&lt;br&gt;&amp;gt; seen a lot of examples, but I still don't know how to do this.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; So, is there some API to stop download after it is started?
&lt;br&gt;&lt;br&gt;HTLoadToFile is just a single-purpose convenience function that quickly 
&lt;br&gt;dumps a URL to a file. That's it. No frills. Just a straightforward content 
&lt;br&gt;grab.
&lt;br&gt;&lt;br&gt;The only way to do what you need to do is to manually construct an HTRequest 
&lt;br&gt;object, create your own subclass of HTStreamClass, then use 
&lt;br&gt;HTLoadToStream(), and, in your own stream's putc/puts/putblock callback, 
&lt;br&gt;dump the data to your file. If your callback function returns HT_ERR instead 
&lt;br&gt;of HT_OK, libwww should abort and unwind everything.
&lt;br&gt;&lt;br&gt;You can look at some sample code here:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lpmtool.cvs.sourceforge.net/lpmtool/lpm/www/wwwfuncs.C?view=markup&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lpmtool.cvs.sourceforge.net/lpmtool/lpm/www/wwwfuncs.C?view=markup&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt; &lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;attachment0&lt;/strong&gt; (196 bytes) &lt;a href=&quot;http://old.nabble.com/attachment/12933396/0/attachment0&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/problems-with-HTLoadToFile-tp12933022p12933396.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12933022</id>
	<title>problems with HTLoadToFile</title>
	<published>2007-09-26T08:57:39Z</published>
	<updated>2007-09-26T08:57:39Z</updated>
	<author>
		<name>Vitaliy Yunikov</name>
	</author>
	<content type="html">&lt;br&gt;I just started working with libwww and I have a question concerning file
&lt;br&gt;download. To download a file I use HTLoadToFile function, and I want
&lt;br&gt;to run it in separate thread. I also want to have possibility to stop
&lt;br&gt;the download by user request. I've read a lot of libwww docs and I've
&lt;br&gt;seen a lot of examples, but I still don't know how to do this.
&lt;br&gt;&lt;br&gt;So, is there some API to stop download after it is started?
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Best regards,
&lt;br&gt;&amp;nbsp;Vitaliy &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12933022&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;vyunikov@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/problems-with-HTLoadToFile-tp12933022p12933022.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12449814</id>
	<title>Re: Libwww package for Fedora Core 6</title>
	<published>2007-09-02T08:46:14Z</published>
	<updated>2007-09-02T08:46:14Z</updated>
	<author>
		<name>Kristian Spangsege-2</name>
	</author>
	<content type="html">&lt;br&gt;Here is what I do to test:
&lt;br&gt;&lt;br&gt;rpm -i &lt;a href=&quot;http://download.fedora.redhat.com/pub/fedora/linux/extras/6/SRPMS/w3c-libwww-5.4.1-0.4.20060206cvs.fc6.src.rpm&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://download.fedora.redhat.com/pub/fedora/linux/extras/6/SRPMS/w3c-libwww-5.4.1-0.4.20060206cvs.fc6.src.rpm&lt;/a&gt;&lt;br&gt;patch /usr/src/redhat/SPECS/w3c-libwww.spec &amp;lt;&amp;lt;EOF
&lt;br&gt;77c77
&lt;br&gt;&amp;lt; %configure --enable-shared --disable-static --with-gnu-ld
&lt;br&gt;--with-regex --with-zlib --with-ssl
&lt;br&gt;---
&lt;br&gt;&amp;gt; %configure --enable-shared --disable-static --with-gnu-ld --with-regex --with-zlib --with-ssl --enable-reentrant
&lt;br&gt;EOF
&lt;br&gt;rpmbuild -bb /usr/src/redhat/SPECS/w3c-libwww.spec
&lt;br&gt;rpm -i /usr/src/redhat/RPMS/i386/w3c-libwww-*5.4.1-0.4.20060206cvs.i386.rpm
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;On 9/2/07, Kristian Spangsege &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12449814&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kristian.spangsege@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I should add that I have tried to build and install with
&lt;br&gt;&amp;gt; '--enable-reentrant' om my Fedora Core 6 and I have tested both the
&lt;br&gt;&amp;gt; sample applications that come with Libwww and my own code, and so far
&lt;br&gt;&amp;gt; I found no issues.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On 9/2/07, Kristian Spangsege &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12449814&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kristian.spangsege@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; Hi Andreas
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Are you the current maintainer of the Libwww package for Fedora? Hope so :-)
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; I noticed from the RPM spec file that the flag '--enable-reentrant' is
&lt;br&gt;&amp;gt; &amp;gt; not used on the configure command. Is there a good reason for this?
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; You might know this already, but '--enable-reentrant' makes Libwww
&lt;br&gt;&amp;gt; &amp;gt; attempt to use reentrant system calls such as 'gethostbyname_r'
&lt;br&gt;&amp;gt; &amp;gt; instead of 'gethostbyname'. See for example INSTALL.html.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Since all these reentrant versions are available with current versions
&lt;br&gt;&amp;gt; &amp;gt; of glibc, I suggest that you enable this feature in the packeges.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; The reason I am concerned is that in my code I really depend on the
&lt;br&gt;&amp;gt; &amp;gt; reentrance so I can run other libraries concurrently, and it is just
&lt;br&gt;&amp;gt; &amp;gt; unfortunate that I cannot use the default packages.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Let me know if you have reasons not to do this.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; There is also the alternative, to add a reconfigue option to the spec
&lt;br&gt;&amp;gt; &amp;gt; file so people could do something like rpmbuild --rebuild
&lt;br&gt;&amp;gt; &amp;gt; w3c-libwww.src.rpm --with reentrant
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Regards,
&lt;br&gt;&amp;gt; &amp;gt; Kristian Spangsege
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt; &amp;quot;Will robots inherit the earth? Yes, but they will be our children. We
&lt;br&gt;&amp;gt; &amp;gt; owe our minds to the deaths and lives of all the creatures that were
&lt;br&gt;&amp;gt; &amp;gt; ever engaged in the struggle called Evolution. Our job is to see that
&lt;br&gt;&amp;gt; &amp;gt; all this work shall not end up in meaningless waste.&amp;quot;
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- MARVIN L. MINSKY
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;quot;Will robots inherit the earth? Yes, but they will be our children. We
&lt;br&gt;&amp;gt; owe our minds to the deaths and lives of all the creatures that were
&lt;br&gt;&amp;gt; ever engaged in the struggle called Evolution. Our job is to see that
&lt;br&gt;&amp;gt; all this work shall not end up in meaningless waste.&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- MARVIN L. MINSKY
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;Will robots inherit the earth? Yes, but they will be our children. We
&lt;br&gt;owe our minds to the deaths and lives of all the creatures that were
&lt;br&gt;ever engaged in the struggle called Evolution. Our job is to see that
&lt;br&gt;all this work shall not end up in meaningless waste.&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- MARVIN L. MINSKY
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Libwww-package-for-Fedora-Core-6-tp12449544p12449814.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12449629</id>
	<title>Re: Libwww package for Fedora Core 6</title>
	<published>2007-09-02T08:25:33Z</published>
	<updated>2007-09-02T08:25:33Z</updated>
	<author>
		<name>Kristian Spangsege-2</name>
	</author>
	<content type="html">&lt;br&gt;I should add that I have tried to build and install with
&lt;br&gt;'--enable-reentrant' om my Fedora Core 6 and I have tested both the
&lt;br&gt;sample applications that come with Libwww and my own code, and so far
&lt;br&gt;I found no issues.
&lt;br&gt;&lt;br&gt;On 9/2/07, Kristian Spangsege &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12449629&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kristian.spangsege@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi Andreas
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Are you the current maintainer of the Libwww package for Fedora? Hope so :-)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I noticed from the RPM spec file that the flag '--enable-reentrant' is
&lt;br&gt;&amp;gt; not used on the configure command. Is there a good reason for this?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; You might know this already, but '--enable-reentrant' makes Libwww
&lt;br&gt;&amp;gt; attempt to use reentrant system calls such as 'gethostbyname_r'
&lt;br&gt;&amp;gt; instead of 'gethostbyname'. See for example INSTALL.html.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Since all these reentrant versions are available with current versions
&lt;br&gt;&amp;gt; of glibc, I suggest that you enable this feature in the packeges.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The reason I am concerned is that in my code I really depend on the
&lt;br&gt;&amp;gt; reentrance so I can run other libraries concurrently, and it is just
&lt;br&gt;&amp;gt; unfortunate that I cannot use the default packages.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Let me know if you have reasons not to do this.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; There is also the alternative, to add a reconfigue option to the spec
&lt;br&gt;&amp;gt; file so people could do something like rpmbuild --rebuild
&lt;br&gt;&amp;gt; w3c-libwww.src.rpm --with reentrant
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Regards,
&lt;br&gt;&amp;gt; Kristian Spangsege
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;quot;Will robots inherit the earth? Yes, but they will be our children. We
&lt;br&gt;&amp;gt; owe our minds to the deaths and lives of all the creatures that were
&lt;br&gt;&amp;gt; ever engaged in the struggle called Evolution. Our job is to see that
&lt;br&gt;&amp;gt; all this work shall not end up in meaningless waste.&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- MARVIN L. MINSKY
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;Will robots inherit the earth? Yes, but they will be our children. We
&lt;br&gt;owe our minds to the deaths and lives of all the creatures that were
&lt;br&gt;ever engaged in the struggle called Evolution. Our job is to see that
&lt;br&gt;all this work shall not end up in meaningless waste.&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- MARVIN L. MINSKY
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Libwww-package-for-Fedora-Core-6-tp12449544p12449629.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12449544</id>
	<title>Libwww package for Fedora Core 6</title>
	<published>2007-09-02T08:09:05Z</published>
	<updated>2007-09-02T08:09:05Z</updated>
	<author>
		<name>Kristian Spangsege-2</name>
	</author>
	<content type="html">&lt;br&gt;Hi Andreas
&lt;br&gt;&lt;br&gt;Are you the current maintainer of the Libwww package for Fedora? Hope so :-)
&lt;br&gt;&lt;br&gt;I noticed from the RPM spec file that the flag '--enable-reentrant' is
&lt;br&gt;not used on the configure command. Is there a good reason for this?
&lt;br&gt;&lt;br&gt;You might know this already, but '--enable-reentrant' makes Libwww
&lt;br&gt;attempt to use reentrant system calls such as 'gethostbyname_r'
&lt;br&gt;instead of 'gethostbyname'. See for example INSTALL.html.
&lt;br&gt;&lt;br&gt;Since all these reentrant versions are available with current versions
&lt;br&gt;of glibc, I suggest that you enable this feature in the packeges.
&lt;br&gt;&lt;br&gt;The reason I am concerned is that in my code I really depend on the
&lt;br&gt;reentrance so I can run other libraries concurrently, and it is just
&lt;br&gt;unfortunate that I cannot use the default packages.
&lt;br&gt;&lt;br&gt;Let me know if you have reasons not to do this.
&lt;br&gt;&lt;br&gt;There is also the alternative, to add a reconfigue option to the spec
&lt;br&gt;file so people could do something like rpmbuild --rebuild
&lt;br&gt;w3c-libwww.src.rpm --with reentrant
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;Kristian Spangsege
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;Will robots inherit the earth? Yes, but they will be our children. We
&lt;br&gt;owe our minds to the deaths and lives of all the creatures that were
&lt;br&gt;ever engaged in the struggle called Evolution. Our job is to see that
&lt;br&gt;all this work shall not end up in meaningless waste.&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- MARVIN L. MINSKY
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Libwww-package-for-Fedora-Core-6-tp12449544p12449544.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12384770</id>
	<title>Re: Where is Libwww maintained today</title>
	<published>2007-08-29T04:46:46Z</published>
	<updated>2007-08-29T04:46:46Z</updated>
	<author>
		<name>Kristian Spangsege-2</name>
	</author>
	<content type="html">&lt;br&gt;Hi again
&lt;br&gt;&lt;br&gt;&lt;br&gt;So &lt;a href=&quot;http://www.w3.org/Library/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/&lt;/a&gt;&amp;nbsp;really is the home of the latest version
&lt;br&gt;of Libwww. In that case I think the website should be updated.
&lt;br&gt;Whereever it says something about the latest release, it says 5.4.0:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://www.w3.org/Library/#News&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/#News&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://www.w3.org/Library/User/ReleaseNotes.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/User/ReleaseNotes.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;About the bug:
&lt;br&gt;&lt;br&gt;The bug seems to remain in the latest CVS version.
&lt;br&gt;&lt;br&gt;A very simple test case for me is to use w3c command line utility and
&lt;br&gt;request '&lt;a href=&quot;http://www.google.com'&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.google.com'&lt;/a&gt;. This fails because for some reason
&lt;br&gt;Google decides to redirect to &amp;quot;www.google.dk&amp;quot; (Denmark is where I
&lt;br&gt;live.) It responds with status=302 (Found) and a 'Location' header.
&lt;br&gt;This is supposed to make W3C follow the redirect, but it does not.
&lt;br&gt;&lt;br&gt;The fact that it is supposed to follow, is apparent from the
&lt;br&gt;implementation of HTAfterInit (listed in my original mail.)
&lt;br&gt;&lt;br&gt;The fact that it does not work, is apparent from the lack of output
&lt;br&gt;and inspection of 'w3chttp.out' and in fact is also apparent from
&lt;br&gt;inspecting the source I listed in my first post.
&lt;br&gt;&lt;br&gt;&lt;br&gt;I know this test case may be unavailable to you, but maybe you know of
&lt;br&gt;another site that does a similar thing, or whatever. Anyway tell me if
&lt;br&gt;you want me to also produce a minimal source code test program. The
&lt;br&gt;bug, however, should be entirely obvious by inspecting only the source
&lt;br&gt;I listed in my original post.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;Kristian Spangsege
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;On 8/29/07, Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Kristian Spangsege wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;According to &lt;a href=&quot;http://www.w3.org/Library/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/&lt;/a&gt;&amp;nbsp;the latest version of Libwww
&lt;br&gt;&amp;gt; &amp;gt;is 5.4.1, however the version on my FedorCore 6 is 5.4.1. This leads
&lt;br&gt;&amp;gt; &amp;gt;me to suspect that Libwww is maintained elsewhere these days. Is that
&lt;br&gt;&amp;gt; &amp;gt;correct?
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; Yes, the library will show 5.4.1 if you check out and build as per,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.w3.org/Library/cvs.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/cvs.html&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This will include the updates and authors as listed in the change
&lt;br&gt;&amp;gt; log[1]. &amp;nbsp;The packaging and build is particularly well done by Andreas
&lt;br&gt;&amp;gt; Bierfert for fedora &amp;nbsp;6 extras [2].
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;The reason I'm asking is that I found a bug, and wanted to see if it
&lt;br&gt;&amp;gt; &amp;gt;was fixed in the latest release (or maybe in CVS.)
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;Please advise as to where I can inspect the latest version and
&lt;br&gt;&amp;gt; &amp;gt;potentially report a bug.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; Okay, I will try to check it both places, &amp;nbsp;(just grabbed a copy of the
&lt;br&gt;&amp;gt; SRPMS for FC6).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;The result is that the redirection handler only works for status TEMP_REDIRECT, which obviously is not the intended behaviour:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; What is the simplest test case that exhibits the unintended behavior ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; more,
&lt;br&gt;&amp;gt; l8r,
&lt;br&gt;&amp;gt; v
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;quot;The future is here. It's just not evenly distributed yet.&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp;-- William Gibson, quoted by Whitfield Diffie
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; [1] Changes with libwww 5.4.1
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2006-12-03 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * configure.ac, Library/src/Makefile.am, Library/cvs2sql/Makefile.am, Robot/src/Makefile.am:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; modify configure scripts for mysql_config based autoconf processing
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTSQL.c, Library/src/HTSQL.html, Library/src/HTSQLLog.c: remove
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mysql directory from include directives
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2006-12-02 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Robot/src/RobotMain.c: added flag MR_KEEP_META for -lm last modified option
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; detected by Jan Hutaø
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2006-11-29 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Robot/src/RobotMain.c: added flag MR_KEEP_META for -title option
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; detected by Jan Hutaø
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2006-07-09 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * close leak in HTBound process_boundary() detected by Sam Varshavchik
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; using valgrind; excised old #if 0 snippets from HTMIME.c
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2006-06-18 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTCookie.c: add private function HTCookie_splitPair to
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; split a KEY=VALUE pair, from Jesse Morgan
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2006-03-14 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * configure.ac: remove unecessary check for appkit.h as
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; suggested by Roger Persson
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2006-03-12 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/wwwsys.html: change genuine angle bracket characters
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; into the angle bracket entities, thanks to Bobby Jack
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2005-11-11 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HT*.html, Library/src/SSL/HT*.html: wrap
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; all header files with extern &amp;quot;C&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTFile, configure.ac: add a basis for
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; addressing Ben's security concerns
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2005-10-16 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTBound.c: libwww security advisory fix from
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sam Varshavchik, fix double-counting of processed bytes,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rewrote HTBoundary_put_block, to fix problematic HTTP 1.1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; byte range requests
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2005-08-01 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/: HTAlert.c, HTHeader.c, HTInit.c, HTNet.c,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTProfil.c, HTProt.c, HTTrans.c: Patch to greatly speed up
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; repeated requests, from Arthur Smith
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2005-07-25 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTSQL.c: modifications to compile without using
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; deprecated mysql functions
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * config/: config.sub, ltmain.sh: updates for recent version of
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; libtool
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2005-04-04 &amp;nbsp; &amp;nbsp; &amp;nbsp; Jose Kahan &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jose@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * INSTALL.html, Library/src/HTEvtLst.c: cleaning
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2005-03-09 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * libwww-config.in: include -lwwwssl, thanks to mgoddard at
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; itgs-presearch.com
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2005-02-28 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/SSL/HTSSLWriter.c: avoids an eternal loop in libwww
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (thanks to Steinar Bang)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2005-02-27 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/SSL/HTSSL.html, Robot/src/RobotMain.c: fix for webbot
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -v option check and documentation addition
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * configure.ac, Library/src/SSL/HTSSL.c,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Library/src/SSL/windows/wwwssl.def, Robot/src/HTRobMan.html,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Robot/src/Makefile.am, Robot/src/RobotMain.c: basic support for
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client side certificates using PEM format
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2005-01-23 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/SSL/: HTSSL.c, HTSSLReader.c, HTSSLWriter.c: add
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; openssl to include for ssl.h and rand.h
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * config/: config.guess, config.sub, ltmain.sh: update after
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; running libtoolize
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Robot/src/Makefile.am: use SSL directory for libwwwssl.la
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Robot/src/RobotMain.c: include HTSSL.h
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * configure.ac: fix aclocal underquoting warnings
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Robot/src/: RobotMain.c, Makefile.am: update to enable https
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; protocol
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2005-01-05 &amp;nbsp; &amp;nbsp; &amp;nbsp; Martin Duerst &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;duerst@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTTPReq.c: fixed , to _ in HTTRACE call
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTTPReq.c: removed LIBWWW_USEIDN, because unnecessary
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * modules/idn/unicode_template.c: forgot one file
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTDNS.html: moved IDN to main branch
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTDNS.c: moved IDN to main branch
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTTPReq.c: added &amp;quot;LIBWWW_USEIDN&amp;quot; conditional
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTTPReq.c: moved IDN to main branch
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2004-01-29 &amp;nbsp; &amp;nbsp; &amp;nbsp; Jose Kahan &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12384770&amp;i=18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jose@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/Overview.html: JK: Added the libwww survey results
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; [2] Fedora Core 6, Extras, source package for w3c-libwww
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://download.fedora.redhat.com/pub/fedora/linux/extras/6/SRPMS/repoview/w3c-libwww.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://download.fedora.redhat.com/pub/fedora/linux/extras/6/SRPMS/repoview/w3c-libwww.html&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;Will robots inherit the earth? Yes, but they will be our children. We
&lt;br&gt;owe our minds to the deaths and lives of all the creatures that were
&lt;br&gt;ever engaged in the struggle called Evolution. Our job is to see that
&lt;br&gt;all this work shall not end up in meaningless waste.&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- MARVIN L. MINSKY
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Where-is-Libwww-maintained-today-tp12378535p12384770.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12380656</id>
	<title>Re: Where is Libwww maintained today</title>
	<published>2007-08-28T22:15:51Z</published>
	<updated>2007-08-28T22:15:51Z</updated>
	<author>
		<name>Vic Bancroft-2</name>
	</author>
	<content type="html">&lt;br&gt;Kristian Spangsege wrote:
&lt;br&gt;&lt;br&gt;&amp;gt;According to &lt;a href=&quot;http://www.w3.org/Library/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/&lt;/a&gt;&amp;nbsp;the latest version of Libwww
&lt;br&gt;&amp;gt;is 5.4.1, however the version on my FedorCore 6 is 5.4.1. This leads
&lt;br&gt;&amp;gt;me to suspect that Libwww is maintained elsewhere these days. Is that
&lt;br&gt;&amp;gt;correct?
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;Yes, the library will show 5.4.1 if you check out and build as per,
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.w3.org/Library/cvs.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/cvs.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;This will include the updates and authors as listed in the change 
&lt;br&gt;log[1]. &amp;nbsp;The packaging and build is particularly well done by Andreas 
&lt;br&gt;Bierfert for fedora &amp;nbsp;6 extras [2].
&lt;br&gt;&lt;br&gt;&amp;gt;The reason I'm asking is that I found a bug, and wanted to see if it
&lt;br&gt;&amp;gt;was fixed in the latest release (or maybe in CVS.)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;Please advise as to where I can inspect the latest version and
&lt;br&gt;&amp;gt;potentially report a bug.
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;Okay, I will try to check it both places, &amp;nbsp;(just grabbed a copy of the 
&lt;br&gt;SRPMS for FC6). 
&lt;br&gt;&lt;br&gt;&amp;gt;The result is that the redirection handler only works for status TEMP_REDIRECT, which obviously is not the intended behaviour:
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;What is the simplest test case that exhibits the unintended behavior ?
&lt;br&gt;&lt;br&gt;more,
&lt;br&gt;l8r,
&lt;br&gt;v
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;The future is here. It's just not evenly distributed yet.&amp;quot;
&lt;br&gt;&amp;nbsp;-- William Gibson, quoted by Whitfield Diffie
&lt;br&gt;&lt;br&gt;[1] Changes with libwww 5.4.1
&lt;br&gt;&lt;br&gt;2006-12-03 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * configure.ac, Library/src/Makefile.am, Library/cvs2sql/Makefile.am, Robot/src/Makefile.am: 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; modify configure scripts for mysql_config based autoconf processing &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTSQL.c, Library/src/HTSQL.html, Library/src/HTSQLLog.c: remove 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mysql directory from include directives	 &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;2006-12-02 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Robot/src/RobotMain.c: added flag MR_KEEP_META for -lm last modified option 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; detected by Jan Hutaø
&lt;br&gt;&lt;br&gt;2006-11-29 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Robot/src/RobotMain.c: added flag MR_KEEP_META for -title option 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; detected by Jan Hutaø
&lt;br&gt;&lt;br&gt;2006-07-09 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * close leak in HTBound process_boundary() detected by Sam Varshavchik
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; using valgrind; excised old #if 0 snippets from HTMIME.c
&lt;br&gt;&lt;br&gt;2006-06-18 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTCookie.c: add private function HTCookie_splitPair to
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; split a KEY=VALUE pair, from Jesse Morgan
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;2006-03-14 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * configure.ac: remove unecessary check for appkit.h as
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; suggested by Roger Persson
&lt;br&gt;&lt;br&gt;2006-03-12 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/wwwsys.html: change genuine angle bracket characters
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; into the angle bracket entities, thanks to Bobby Jack
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;2005-11-11 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HT*.html, Library/src/SSL/HT*.html: wrap
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; all header files with extern &amp;quot;C&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTFile, configure.ac: add a basis for 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; addressing Ben's security concerns
&lt;br&gt;&lt;br&gt;2005-10-16 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTBound.c: libwww security advisory fix from 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sam Varshavchik, fix double-counting of processed bytes,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rewrote HTBoundary_put_block, to fix problematic HTTP 1.1 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; byte range requests
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;2005-08-01 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=9&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/: HTAlert.c, HTHeader.c, HTInit.c, HTNet.c,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HTProfil.c, HTProt.c, HTTrans.c: Patch to greatly speed up
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; repeated requests, from Arthur Smith
&lt;br&gt;&lt;br&gt;2005-07-25 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTSQL.c: modifications to compile without using
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; deprecated mysql functions
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * config/: config.sub, ltmain.sh: updates for recent version of
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; libtool
&lt;br&gt;&lt;br&gt;2005-04-04 &amp;nbsp; &amp;nbsp; &amp;nbsp; Jose Kahan &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=11&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jose@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * INSTALL.html, Library/src/HTEvtLst.c: cleaning
&lt;br&gt;&lt;br&gt;2005-03-09 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * libwww-config.in: include -lwwwssl, thanks to mgoddard at
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; itgs-presearch.com
&lt;br&gt;&lt;br&gt;2005-02-28 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/SSL/HTSSLWriter.c: avoids an eternal loop in libwww
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (thanks to Steinar Bang)
&lt;br&gt;&lt;br&gt;2005-02-27 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=14&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/SSL/HTSSL.html, Robot/src/RobotMain.c: fix for webbot
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -v option check and documentation addition
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * configure.ac, Library/src/SSL/HTSSL.c,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Library/src/SSL/windows/wwwssl.def, Robot/src/HTRobMan.html,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Robot/src/Makefile.am, Robot/src/RobotMain.c: basic support for
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client side certificates using PEM format
&lt;br&gt;&lt;br&gt;2005-01-23 &amp;nbsp; &amp;nbsp; &amp;nbsp; Vic Bancroft &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=15&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bancroft@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/SSL/: HTSSL.c, HTSSLReader.c, HTSSLWriter.c: add
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; openssl to include for ssl.h and rand.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * config/: config.guess, config.sub, ltmain.sh: update after
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; running libtoolize
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Robot/src/Makefile.am: use SSL directory for libwwwssl.la
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Robot/src/RobotMain.c: include HTSSL.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * configure.ac: fix aclocal underquoting warnings
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Robot/src/: RobotMain.c, Makefile.am: update to enable https
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; protocol
&lt;br&gt;&lt;br&gt;2005-01-05 &amp;nbsp; &amp;nbsp; &amp;nbsp; Martin Duerst &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=16&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;duerst@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTTPReq.c: fixed , to _ in HTTRACE call
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTTPReq.c: removed LIBWWW_USEIDN, because unnecessary
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * modules/idn/unicode_template.c: forgot one file
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTDNS.html: moved IDN to main branch
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTDNS.c: moved IDN to main branch
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTTPReq.c: added &amp;quot;LIBWWW_USEIDN&amp;quot; conditional
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/src/HTTPReq.c: moved IDN to main branch
&lt;br&gt;&lt;br&gt;2004-01-29 &amp;nbsp; &amp;nbsp; &amp;nbsp; Jose Kahan &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12380656&amp;i=17&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jose@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * Library/Overview.html: JK: Added the libwww survey results
&lt;br&gt;&lt;br&gt;[2] Fedora Core 6, Extras, source package for w3c-libwww
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://download.fedora.redhat.com/pub/fedora/linux/extras/6/SRPMS/repoview/w3c-libwww.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://download.fedora.redhat.com/pub/fedora/linux/extras/6/SRPMS/repoview/w3c-libwww.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Where-is-Libwww-maintained-today-tp12378535p12380656.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12378537</id>
	<title>Re: Where is Libwww maintained today</title>
	<published>2007-08-28T17:39:56Z</published>
	<updated>2007-08-28T17:39:56Z</updated>
	<author>
		<name>Kristian Spangsege-2</name>
	</author>
	<content type="html">&lt;br&gt;Minor correction: According to &lt;a href=&quot;http://www.w3.org/Library/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/&lt;/a&gt;&amp;nbsp;the latest
&lt;br&gt;version of Libwww is 5.4.0 (not 5.4.1).
&lt;br&gt;&lt;br&gt;On 8/29/07, Kristian Spangsege &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12378537&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;kristian.spangsege@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; According to &lt;a href=&quot;http://www.w3.org/Library/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/&lt;/a&gt;&amp;nbsp;the latest version of Libwww
&lt;br&gt;&amp;gt; is 5.4.1, however the version on my FedorCore 6 is 5.4.1. This leads
&lt;br&gt;&amp;gt; me to suspect that Libwww is maintained elsewhere these days. Is that
&lt;br&gt;&amp;gt; correct?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The reson I'm asking is that I found a bug, and wanted to see if it
&lt;br&gt;&amp;gt; was fixed in the latest release (or maybe in CVS.)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Please advise as to where I can inspect the latest version and
&lt;br&gt;&amp;gt; potentially report a bug.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In case that tourns out negatively, I'll report it right here and right now:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In HTNet.c is the following definition of HTNet_addAfter:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; PUBLIC BOOL HTNet_addAfter (HTNetAfter * after, const char * tmplate,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;void * param, int status, HTFilterOrder order)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;if (!HTAfter) HTAfter = HTList_new();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;else HTNet_deleteAfter(after); /* Ensure not listed twice */
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;return HTNetCall_addAfter(HTAfter, after, tmplate, param, status, order);
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It is apparent that that same filter cannot be added twice, but this
&lt;br&gt;&amp;gt; is in conflict with the implementation of HTAfterInit in HTInit.c.
&lt;br&gt;&amp;gt; Here 'HTRedirectFilter' is added for multiple status codes. The rult
&lt;br&gt;&amp;gt; is that the redirection handler only workds for satatus TEMP_REDIRECT,
&lt;br&gt;&amp;gt; which obviously is not the intended behaviour:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; PUBLIC void HTAfterInit (void)
&lt;br&gt;&amp;gt; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;HTNet_addAfter(HTAuthFilter, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;&amp;gt; HT_NO_ACCESS, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;HTNet_addAfter(HTAuthFilter, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;&amp;gt; HT_REAUTH, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;HTNet_addAfter(HTPEP_afterFilter, &amp;nbsp; &amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;&amp;gt; HT_ALL, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;HTNet_addAfter(HTRedirectFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;&amp;gt; HT_PERM_REDIRECT, HT_FILTER_MIDDLE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;HTNet_addAfter(HTRedirectFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;&amp;gt; HT_FOUND, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;HTNet_addAfter(HTRedirectFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;&amp;gt; HT_SEE_OTHER, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HT_FILTER_MIDDLE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;HTNet_addAfter(HTRedirectFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;&amp;gt; HT_TEMP_REDIRECT, HT_FILTER_MIDDLE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;HTNet_addAfter(HTAuthInfoFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;&amp;gt; HT_ALL, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;HTNet_addAfter(HTUseProxyFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;&amp;gt; HT_USE_PROXY, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;HTNet_addAfter(HTInfoFilter, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;&amp;gt; HT_ALL, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HT_FILTER_LATE);
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Kind regards,
&lt;br&gt;&amp;gt; Kristian Spangsege
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;quot;Will robots inherit the earth? Yes, but they will be our children. We
&lt;br&gt;&amp;gt; owe our minds to the deaths and lives of all the creatures that were
&lt;br&gt;&amp;gt; ever engaged in the struggle called Evolution. Our job is to see that
&lt;br&gt;&amp;gt; all this work shall not end up in meaningless waste.&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- MARVIN L. MINSKY
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Where-is-Libwww-maintained-today-tp12378535p12378537.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12378535</id>
	<title>Where is Libwww maintained today</title>
	<published>2007-08-28T17:38:33Z</published>
	<updated>2007-08-28T17:38:33Z</updated>
	<author>
		<name>Kristian Spangsege-2</name>
	</author>
	<content type="html">&lt;br&gt;Hi
&lt;br&gt;&lt;br&gt;According to &lt;a href=&quot;http://www.w3.org/Library/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/Library/&lt;/a&gt;&amp;nbsp;the latest version of Libwww
&lt;br&gt;is 5.4.1, however the version on my FedorCore 6 is 5.4.1. This leads
&lt;br&gt;me to suspect that Libwww is maintained elsewhere these days. Is that
&lt;br&gt;correct?
&lt;br&gt;&lt;br&gt;The reson I'm asking is that I found a bug, and wanted to see if it
&lt;br&gt;was fixed in the latest release (or maybe in CVS.)
&lt;br&gt;&lt;br&gt;Please advise as to where I can inspect the latest version and
&lt;br&gt;potentially report a bug.
&lt;br&gt;&lt;br&gt;In case that tourns out negatively, I'll report it right here and right now:
&lt;br&gt;&lt;br&gt;In HTNet.c is the following definition of HTNet_addAfter:
&lt;br&gt;&lt;br&gt;PUBLIC BOOL HTNet_addAfter (HTNetAfter * after, const char * tmplate,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;void * param, int status, HTFilterOrder order)
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (!HTAfter) HTAfter = HTList_new();
&lt;br&gt;&amp;nbsp; &amp;nbsp;else HTNet_deleteAfter(after); /* Ensure not listed twice */
&lt;br&gt;&amp;nbsp; &amp;nbsp;return HTNetCall_addAfter(HTAfter, after, tmplate, param, status, order);
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;It is apparent that that same filter cannot be added twice, but this
&lt;br&gt;is in conflict with the implementation of HTAfterInit in HTInit.c.
&lt;br&gt;Here 'HTRedirectFilter' is added for multiple status codes. The rult
&lt;br&gt;is that the redirection handler only workds for satatus TEMP_REDIRECT,
&lt;br&gt;which obviously is not the intended behaviour:
&lt;br&gt;&lt;br&gt;PUBLIC void HTAfterInit (void)
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;HTNet_addAfter(HTAuthFilter, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;HT_NO_ACCESS, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HTNet_addAfter(HTAuthFilter, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;HT_REAUTH, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HTNet_addAfter(HTPEP_afterFilter, &amp;nbsp; &amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;HT_ALL, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HTNet_addAfter(HTRedirectFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;HT_PERM_REDIRECT, HT_FILTER_MIDDLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HTNet_addAfter(HTRedirectFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;HT_FOUND, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HTNet_addAfter(HTRedirectFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;HT_SEE_OTHER, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HT_FILTER_MIDDLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HTNet_addAfter(HTRedirectFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;HT_TEMP_REDIRECT, HT_FILTER_MIDDLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HTNet_addAfter(HTAuthInfoFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;HT_ALL, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HTNet_addAfter(HTUseProxyFilter, &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://*&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://*&lt;/a&gt;&amp;quot;, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;HT_USE_PROXY, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HT_FILTER_MIDDLE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;HTNet_addAfter(HTInfoFilter, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL,
&lt;br&gt;HT_ALL, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HT_FILTER_LATE);
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;&lt;br&gt;Kind regards,
&lt;br&gt;Kristian Spangsege
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;Will robots inherit the earth? Yes, but they will be our children. We
&lt;br&gt;owe our minds to the deaths and lives of all the creatures that were
&lt;br&gt;ever engaged in the struggle called Evolution. Our job is to see that
&lt;br&gt;all this work shall not end up in meaningless waste.&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -- MARVIN L. MINSKY
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Where-is-Libwww-maintained-today-tp12378535p12378535.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12207733</id>
	<title>Re: Forcing Alternate Devices for Traffic</title>
	<published>2007-08-17T15:42:07Z</published>
	<updated>2007-08-17T15:42:07Z</updated>
	<author>
		<name>Andrew Steets-2</name>
	</author>
	<content type="html">&lt;br&gt;On 8/16/07, &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12207733&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dmoore7@...&lt;/a&gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=12207733&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dmoore7@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt; I'm seeking to use webbot to retrieve information and not use the default device
&lt;br&gt;&amp;gt; that it would be assigned by the routing table.
&lt;br&gt;&amp;gt; I believe this is possible, ping, for instance, can take a -I argument to force
&lt;br&gt;&amp;gt; it to work out of a specific device.
&lt;br&gt;&lt;br&gt;The way that ping is able to do this is generally operating system
&lt;br&gt;specific. &amp;nbsp;On most UNIX systems this is accomplished via the use of
&lt;br&gt;raw sockets. &amp;nbsp;Specifically, ping has to construct the IP packet from
&lt;br&gt;scratch, rather than using higher layer APIs. &amp;nbsp;I don't think this is a
&lt;br&gt;practical option for libwww.
&lt;br&gt;&lt;br&gt;&amp;gt; So far it seems as though this would require modification to both the webbot
&lt;br&gt;&amp;gt; program, and also to the libwww library itself, perhaps modifying the format of
&lt;br&gt;&amp;gt; a request object to contain device selection information.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Does this seem feasible? &amp;nbsp;Has anyone heard of such a thing being done before?
&lt;br&gt;&amp;gt; Is there another method of doing this that is easier?
&lt;br&gt;&lt;br&gt;You definitely have options. &amp;nbsp;You haven't said why you want the web
&lt;br&gt;bot traffic to use another interface. &amp;nbsp;That information would probably
&lt;br&gt;help in finding the correct solution, but it sort of seems like a job
&lt;br&gt;for policy routing.
&lt;br&gt;&lt;br&gt;Classical routing decisions are made solely based upon the destination
&lt;br&gt;IP address. &amp;nbsp;However, most modern operating systems have some notion
&lt;br&gt;of policy routing wherein routing decisions can be made based on other
&lt;br&gt;criteria. &amp;nbsp;The available criteria are going to depend on your
&lt;br&gt;operating system. &amp;nbsp;On Linux I would look at the &amp;nbsp;ip(8) and iptables(8)
&lt;br&gt;documentation. &amp;nbsp;You may also want to make routing decisions at an
&lt;br&gt;upstream router (if you have access to those resources).
&lt;br&gt;&lt;br&gt;Hope this helps.
&lt;br&gt;&lt;br&gt;-Andrew
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Forcing-Alternate-Devices-for-Traffic-tp12203591p12207733.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-12203591</id>
	<title>Forcing Alternate Devices for Traffic</title>
	<published>2007-08-16T13:32:38Z</published>
	<updated>2007-08-16T13:32:38Z</updated>
	<author>
		<name>dmoore7</name>
	</author>
	<content type="html">&lt;br&gt;Hello,
&lt;br&gt;I'm seeking to use webbot to retrieve information and not use the default device
&lt;br&gt;that it would be assigned by the routing table.
&lt;br&gt;I believe this is possible, ping, for instance, can take a -I argument to force
&lt;br&gt;it to work out of a specific device.
&lt;br&gt;&lt;br&gt;So far it seems as though this would require modification to both the webbot
&lt;br&gt;program, and also to the libwww library itself, perhaps modifying the format of
&lt;br&gt;a request object to contain device selection information.
&lt;br&gt;&lt;br&gt;Does this seem feasible? &amp;nbsp;Has anyone heard of such a thing being done before? 
&lt;br&gt;Is there another method of doing this that is easier?
&lt;br&gt;&lt;br&gt;I appreciate any input. &amp;nbsp;Thanks,
&lt;br&gt;&amp;nbsp;- David Moore
&lt;br&gt;Grad student at Notre Dame.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Forcing-Alternate-Devices-for-Traffic-tp12203591p12203591.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-11957680</id>
	<title>Re: Did the function HTXML_write forget to write stream to the &quot;target&quot;  stream?</title>
	<published>2007-08-01T21:06:52Z</published>
	<updated>2007-08-01T21:06:52Z</updated>
	<author>
		<name>Vic Bancroft-2</name>
	</author>
	<content type="html">&lt;br&gt;wei wei wrote:
&lt;br&gt;&lt;br&gt;&amp;gt;I traced the program and finally focused to the function HTXML_write(HTStream
&lt;br&gt;&amp;gt;*me, const char *buf, in len) in HTXML.c
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;Okay . . .
&lt;br&gt;&lt;br&gt;&amp;gt;I think this function should write the content to the target stream in the
&lt;br&gt;&amp;gt;param HTStream &amp;quot;me&amp;quot;, after doing the XML_Parse work, just like what it did
&lt;br&gt;&amp;gt;in function HTXML_abort.
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;Interesting . . .
&lt;br&gt;&lt;br&gt;&amp;gt;I added a line of code
&lt;br&gt;&amp;gt; &amp;nbsp; (*me-&amp;gt;target-&amp;gt;isa-&amp;gt;put_block)(me-&amp;gt;target,buf,len);
&lt;br&gt;&amp;gt;before the return of HTXML_write. Then it worked here.
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;Did you check me-&amp;gt;target as well, something like
&lt;br&gt;&lt;br&gt;97a98,99
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(me-&amp;gt;target)
&lt;br&gt;&amp;nbsp;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (*me-&amp;gt;target-&amp;gt;isa-&amp;gt;put_block)(me-&amp;gt;target,buf,len);
&lt;br&gt;&lt;br&gt;more,
&lt;br&gt;l8r,
&lt;br&gt;v
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;The future is here. It's just not evenly distributed yet.&amp;quot;
&lt;br&gt;&amp;nbsp;-- William Gibson, quoted by Whitfield Diffie
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Did-the-function-HTXML_write-forget-to-write-stream-to-the-%22target%22-stream--tp11863038p11957680.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-11863038</id>
	<title>Did the function HTXML_write forget to write stream to the &quot;target&quot; stream?</title>
	<published>2007-07-27T12:24:43Z</published>
	<updated>2007-07-27T12:24:43Z</updated>
	<author>
		<name>broom9</name>
	</author>
	<content type="html">Hi, I&amp;#39;m new to libwww, and have a question about downloading XML with it.&lt;br&gt;I set up the example program, when I used it to download HTML pages and images, it worked well. But when I switch to XML, it failed to write the file to harddisk. According to the log, the program had got the content of the XML, but didn&amp;#39;t write it down.
&lt;br&gt;I traced the program and finally focused to the function &lt;span style=&quot;font-style: italic;&quot;&gt;HTXML_write(HTStream *me, const char *buf, in len)&lt;/span&gt; in &lt;span style=&quot;font-style: italic;&quot;&gt;HTXML.c&lt;br&gt;&lt;/span&gt;I think this function should write the content to the target stream in the param HTStream &amp;quot;me&amp;quot;, after doing the XML_Parse work, just like what it did in function 
&lt;span style=&quot;font-style: italic;&quot;&gt;HTXML_abort.&lt;br&gt;&lt;/span&gt;I added a line of code&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-style: italic;&quot;&gt;(*me-&amp;gt;target-&amp;gt;isa-&amp;gt;put_block)(me-&amp;gt;target,buf,len);&lt;br&gt;&lt;/span&gt;before the return of &lt;span style=&quot;font-style: italic;&quot;&gt;
HTXML_write. &lt;/span&gt;Then it worked here.&lt;br&gt;Is this a bug? Or the fault of my programming? Wish someone can help me. Thank you&lt;br&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;/span&gt;&lt;br&gt;-- &lt;br&gt;Wei Wei
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Did-the-function-HTXML_write-forget-to-write-stream-to-the-%22target%22-stream--tp11863038p11863038.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-11270247</id>
	<title>RE: Visual Studio 2005 support</title>
	<published>2007-06-22T10:09:47Z</published>
	<updated>2007-06-22T10:09:47Z</updated>
	<author>
		<name>Dan Swaney</name>
	</author>
	<content type="html">&lt;br&gt;Visual Studio can typically upgrade earlier Solution and Project files
&lt;br&gt;as far back as Visual C++ 6.0.
&lt;br&gt;&lt;br&gt;Unfortunately, starting in Visual Studio 2005, Microsoft added a default
&lt;br&gt;option where the WINVER #define defaults to Windows 2003 Server.
&lt;br&gt;&lt;br&gt;What this means is that the compiled library/application will refuse to
&lt;br&gt;run on Windows NT, 2000, and XP. &amp;nbsp;It doesn't even display an error either
&lt;br&gt;-- the app will just do nothing. &amp;nbsp;
&lt;br&gt;&lt;br&gt;What you need to do is make sure to define WINVER to 0x0400 -- which means
&lt;br&gt;allow the app to run on Windows NT and above. &amp;nbsp;You can do this through
&lt;br&gt;the project settings so you don't have to add it to your code.
&lt;br&gt;&lt;br&gt;=Dan=
&lt;br&gt;&lt;br&gt;-----Original Message-----
&lt;br&gt;From: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=11270247&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;www-lib-request@...&lt;/a&gt; [mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=11270247&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;www-lib-request@...&lt;/a&gt;] On Behalf Of
&lt;br&gt;Vic Bancroft
&lt;br&gt;Sent: Wednesday, June 20, 2007 7:48 AM
&lt;br&gt;To: Jack Hughes
&lt;br&gt;Cc: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=11270247&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;www-lib@...&lt;/a&gt;
&lt;br&gt;Subject: Re: Visual Studio 2005 support
&lt;br&gt;&lt;br&gt;&lt;br&gt;Jack Hughes wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; Has anybody had a go at getting www-lib to build under Visual Studio 
&lt;br&gt;&amp;gt; 2005?
&lt;br&gt;&lt;br&gt;Interesting question, my operating system environments are linux and 
&lt;br&gt;NetBSD, though I have recently considered Solaris. &amp;nbsp;If there is a 
&lt;br&gt;general interest in supporting various IDE's, then we should outline 
&lt;br&gt;which have folks willing to contribute the appropriate supporting 
&lt;br&gt;files. &amp;nbsp;For eclipse, one might want to have the .project file under 
&lt;br&gt;version control.
&lt;br&gt;&lt;br&gt;Does the VisualStudio world have methods for detecting the IDE version 
&lt;br&gt;and adapting, or would we need to check in a different file for each ?
&lt;br&gt;&lt;br&gt;more,
&lt;br&gt;l8r,
&lt;br&gt;v
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;The future is here. It's just not evenly distributed yet.&amp;quot;
&lt;br&gt;&amp;nbsp;-- William Gibson, quoted by Whitfield Diffie
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Visual-Studio-2005-support-tp11197101p11270247.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-11211881</id>
	<title>Re: Visual Studio 2005 support</title>
	<published>2007-06-20T05:57:50Z</published>
	<updated>2007-06-20T05:57:50Z</updated>
	<author>
		<name>Jack Hughes-2</name>
	</author>
	<content type="html">&lt;br&gt;I'm afraid that the project files for VS6 &amp; VS 2005 are completely 
&lt;br&gt;different. Whilst upgrading from VS6 project files is supposed to happen 
&lt;br&gt;when VS2005 opens an older project file, unfortunately, in this case 
&lt;br&gt;that doesn't work properly. I've done this myself on a few company 
&lt;br&gt;projects when we upgraded from VS6 to VS2005 and it worked fine. So, it 
&lt;br&gt;would suggest that perhaps there is something going on in the existing 
&lt;br&gt;VS6 based project files that does convert correctly. From what I could 
&lt;br&gt;see, it looked like it was using relative paths to the files that wasn't 
&lt;br&gt;working correctly in VS2005.
&lt;br&gt;&lt;br&gt;I will investigate further and report back.
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;&lt;br&gt;Jack Hughes
&lt;br&gt;OPENXTRA Ltd.
&lt;br&gt;&lt;a href=&quot;http://www.openxtra.co.uk/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.openxtra.co.uk/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Vic Bancroft wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Jack Hughes wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Has anybody had a go at getting www-lib to build under Visual Studio 
&lt;br&gt;&amp;gt;&amp;gt; 2005?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Interesting question, my operating system environments are linux and 
&lt;br&gt;&amp;gt; NetBSD, though I have recently considered Solaris. &amp;nbsp;If there is a 
&lt;br&gt;&amp;gt; general interest in supporting various IDE's, then we should outline 
&lt;br&gt;&amp;gt; which have folks willing to contribute the appropriate supporting 
&lt;br&gt;&amp;gt; files. &amp;nbsp;For eclipse, one might want to have the .project file under 
&lt;br&gt;&amp;gt; version control.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Does the VisualStudio world have methods for detecting the IDE version 
&lt;br&gt;&amp;gt; and adapting, or would we need to check in a different file for each ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; more,
&lt;br&gt;&amp;gt; l8r,
&lt;br&gt;&amp;gt; v
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Visual-Studio-2005-support-tp11197101p11211881.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-11211802</id>
	<title>Re: Visual Studio 2005 support</title>
	<published>2007-06-20T05:48:02Z</published>
	<updated>2007-06-20T05:48:02Z</updated>
	<author>
		<name>Vic Bancroft-2</name>
	</author>
	<content type="html">&lt;br&gt;Jack Hughes wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; Has anybody had a go at getting www-lib to build under Visual Studio 
&lt;br&gt;&amp;gt; 2005?
&lt;br&gt;&lt;br&gt;Interesting question, my operating system environments are linux and 
&lt;br&gt;NetBSD, though I have recently considered Solaris. &amp;nbsp;If there is a 
&lt;br&gt;general interest in supporting various IDE's, then we should outline 
&lt;br&gt;which have folks willing to contribute the appropriate supporting 
&lt;br&gt;files. &amp;nbsp;For eclipse, one might want to have the .project file under 
&lt;br&gt;version control.
&lt;br&gt;&lt;br&gt;Does the VisualStudio world have methods for detecting the IDE version 
&lt;br&gt;and adapting, or would we need to check in a different file for each ?
&lt;br&gt;&lt;br&gt;more,
&lt;br&gt;l8r,
&lt;br&gt;v
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&amp;quot;The future is here. It's just not evenly distributed yet.&amp;quot;
&lt;br&gt;&amp;nbsp;-- William Gibson, quoted by Whitfield Diffie
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/w3.org---www-lib-f11701.html&quot; embed=&quot;fixTarget[11701]&quot; target=&quot;_top&quot; &gt;w3.org - www-lib&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Visual-Studio-2005-support-tp11197101p11211802.html" />
</entry>

</feed>
