[xml] [PATCH] xmlIO HTTPS handler using libcurl [version 2]
- From: joel reed <joelwreed gmail com>
- To: xml gnome org
- Subject: [xml] [PATCH] xmlIO HTTPS handler using libcurl [version 2]
- Date: Wed, 21 Mar 2007 12:37:26 -0400
This is version 2 of my xmlIO HTTPS handler using libcurl.
It fixes the following issues:
1) now installs curlhttps.h in include/libxml2/
2) mimics redirect handling of nanohttp.c
There is also now a configuration API for enabling certification
verification via libcurl. Basically:
typedef enum {
XML_HTTPS_VERIFYHOST = 1<<0,
/* verify that the server cert is for the server it is known as */
XML_HTTPS_VERIFYPEER = 1<<1
/* verify the authenticity of the peer's certificate */
} xmlHttpsOption;
XMLPUBFUN int XMLCALL xmlIOHTTPSSetup (int options);
jr
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/config.h.in libxml2-2.6.27-with-https/config.h.in
--- libxml2-2.6.27-orig/config.h.in 2006-10-25 10:47:22.000000000 -0400
+++ libxml2-2.6.27-with-https/config.h.in 2007-03-21 10:56:12.000000000 -0400
@@ -94,6 +94,9 @@
/* Define to 1 if you have the `isnand' function. */
#undef HAVE_ISNAND
+/* Define if libcurl library is available. */
+#undef HAVE_LIBCURL
+
/* Define if history library is there (-lhistory) */
#undef HAVE_LIBHISTORY
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/configure.in libxml2-2.6.27-with-https/configure.in
--- libxml2-2.6.27-orig/configure.in 2006-10-25 10:46:05.000000000 -0400
+++ libxml2-2.6.27-with-https/configure.in 2007-03-21 10:24:10.000000000 -0400
@@ -91,6 +91,8 @@ AC_ARG_WITH(html-subdir, AC_HELP_STRING(
AC_SUBST(HTML_DIR)
AC_ARG_WITH(http,
[ --with-http add the HTTP support (on)])
+AC_ARG_WITH(https,
+[ --with-https add the HTTPS support (off)])
AC_ARG_WITH(iconv,
[ --with-iconv[[=DIR]] add ICONV support (on)])
AC_ARG_WITH(iso8859x,
@@ -960,6 +962,34 @@ fi
AC_SUBST(WITH_HTTP)
AC_SUBST(HTTP_OBJ)
+WITH_HTTPS=0
+HTTPS_OBJ=
+CURL_CFLAGS=""
+CURL_LIBS=""
+
+if test "$with_https" != "no" ; then
+ AC_PATH_PROG(CURL_CONFIG, curl-config, no)
+ if test "$CURL_CONFIG" != "no" ; then
+ CURL_HAS_SSL=`curl-config --feature | grep SSL`
+ if test "$CURL_HAS_SSL" == "SSL" ; then
+ CURL_CFLAGS=`$CURL_CONFIG --cflags`
+ CURL_LIBS=`$CURL_CONFIG --libs`
+ AC_DEFINE(HAVE_LIBCURL, 1, [Define if libcurl library is available.])
+ WITH_HTTPS=1
+ HTTPS_OBJ=curlhttps.o
+ echo Enabled HTTPS support.
+ else
+ echo libcurl does not have SSL support. libxml https NOT enabled.
+ fi
+ else
+ echo curl-config not found. libxml https NOT enabled.
+ fi
+fi
+AC_SUBST(WITH_HTTPS)
+AC_SUBST(HTTPS_OBJ)
+AC_SUBST(CURL_CFLAGS)
+AC_SUBST(CURL_LIBS)
+
if test "$with_legacy" = "no" ; then
echo Disabling deprecated APIs
WITH_LEGACY=0
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/curlhttps.c libxml2-2.6.27-with-https/curlhttps.c
--- libxml2-2.6.27-orig/curlhttps.c 1969-12-31 19:00:00.000000000 -0500
+++ libxml2-2.6.27-with-https/curlhttps.c 2007-03-21 12:16:40.000000000 -0400
@@ -0,0 +1,225 @@
+/*
+ * curlhttps.c: xmlIO handler for https via libcurl
+ *
+ * See Copyright for the status of this software.
+ *
+ * joelwreed gmail com
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <libxml/xinclude.h>
+#include <libxml/xmlIO.h>
+
+#ifdef LIBXML_HTTPS_ENABLED
+
+#define XML_HTTPS_MAX_REDIR 10
+
+#include <libxml/curlhttps.h>
+#include <curl/curl.h>
+
+#if defined(WIN32)
+#pragma comment(lib, "libcurl.lib")
+#pragma comment(lib, "libeay32.lib")
+#pragma comment(lib, "ssleay32.lib")
+#pragma comment(lib, "gdi32.lib")
+#pragma comment(lib, "winmm.lib")
+#pragma comment(lib, "advapi32.lib")
+#pragma comment(lib, "user32.lib")
+#endif
+
+typedef struct _xmlIOHTTPSReadCtxt
+{
+ CURL *curl;
+ xmlChar* uri;
+ char *buffer;
+ int sizeBuffer;
+ int sizeRead;
+} xmlIOHTTPSReadCtxt;
+
+static int xmlIOHTTPSInitialized = 0;
+static int xmlIOHTTPSVerifyPeer = 0;
+static int xmlIOHTTPSVerifyHost = 0;
+
+static size_t
+xmlIOHTTPSReceiveData(void *ptr, size_t size, size_t nmemb, void *c)
+{
+ int len_received;
+ xmlIOHTTPSReadCtxt *context;
+
+ if (c == NULL) return(-1);
+ context = (xmlIOHTTPSReadCtxt*) c;
+
+ len_received = size * nmemb;
+ context->buffer = xmlMemRealloc(context->buffer,
+ context->sizeBuffer + len_received + 1);
+
+ if (context->buffer) {
+ memcpy(&(context->buffer[context->sizeBuffer]), ptr, len_received);
+ context->sizeBuffer += len_received;
+ context->buffer[context->sizeBuffer] = 0;
+ }
+
+ return len_received;
+
+}
+
+/**
+ * xmlIOHTTPSSetup:
+ * @options: a combination of xmlHttpsOption
+ *
+ * Returns 0 in case of success, the set of unknown or unimplemented options
+ * in case of error.
+ */
+int
+xmlIOHTTPSSetup(int options) {
+ if (options & XML_HTTPS_VERIFYHOST) {
+ xmlIOHTTPSVerifyHost = 2;
+ options -= XML_HTTPS_VERIFYHOST;
+ }
+ else if (options & XML_HTTPS_VERIFYPEER) {
+ xmlIOHTTPSVerifyPeer = 1;
+ options -= XML_HTTPS_VERIFYPEER;
+ }
+
+ return options;
+}
+
+/**
+ * xmlIOHTTPSMatch:
+ * @URI: an URI to test
+ *
+ * Check for an https: query
+ *
+ * Returns 1 if yes and 0 if another Input module should be used
+ */
+int
+xmlIOHTTPSMatch(const char * URI) {
+ if ((URI != NULL) && (!strncmp(URI, "https:", 6)))
+ return(1);
+ return(0);
+}
+
+/**
+ * xmlIOHTTPSOpen:
+ * @URI: an URI to open
+ *
+ * Returns an Input context or NULL in case or error
+ */
+void *
+xmlIOHTTPSOpen(const char * URI) {
+ xmlIOHTTPSReadCtxt* context;
+
+ if ((URI == NULL) || (strncmp(URI, "https:", 6)))
+ return(NULL);
+
+ if (!xmlIOHTTPSInitialized) {
+ curl_global_init(CURL_GLOBAL_ALL);
+ xmlIOHTTPSInitialized = 1;
+ }
+
+ context = (xmlIOHTTPSReadCtxt*) xmlMalloc(sizeof(xmlIOHTTPSReadCtxt));
+ if (context == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "creating HTTPS input context");
+ return (NULL);
+ }
+
+ (void) memset(context, 0, sizeof(xmlIOHTTPSReadCtxt));
+
+ context->uri = xmlStrdup((const xmlChar *)URI);
+ if (context->uri == NULL) {
+ xmlGenericError(xmlGenericErrorContext,
+ "copying URI");
+ xmlFree(context);
+ return (NULL);
+ }
+
+ context->curl = curl_easy_init();
+ curl_easy_setopt(context->curl, CURLOPT_URL, context->uri);
+ context->buffer = NULL;
+ context->sizeBuffer = 0;
+
+#ifdef DEBUG_HTTPS
+ curl_easy_setopt(context->curl, CURLOPT_VERBOSE, 1);
+#endif
+
+ curl_easy_setopt(context->curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
+ curl_easy_setopt(context->curl, CURLOPT_FOLLOWLOCATION, 1);
+ curl_easy_setopt(context->curl, CURLOPT_MAXREDIRS, XML_HTTPS_MAX_REDIR);
+ curl_easy_setopt(context->curl, CURLOPT_SSL_VERIFYPEER, xmlIOHTTPSVerifyPeer);
+ curl_easy_setopt(context->curl, CURLOPT_SSL_VERIFYHOST, xmlIOHTTPSVerifyHost);
+ curl_easy_setopt(context->curl, CURLOPT_WRITEFUNCTION, xmlIOHTTPSReceiveData);
+ curl_easy_setopt(context->curl, CURLOPT_WRITEDATA, context);
+
+ return context;
+}
+
+/**
+ * xmlIOHTTPSClose:
+ * @c: the read context
+ *
+ * Close the https: query handler
+ *
+ * Returns 0 or -1 in case of error
+ */
+int
+xmlIOHTTPSClose(void * c) {
+ xmlIOHTTPSReadCtxt *context;
+ if (c == NULL) return(-1);
+
+ context = (xmlIOHTTPSReadCtxt*) c;
+ curl_easy_cleanup(context->curl);
+
+ if (context->uri != NULL)
+ xmlFree(context->uri);
+
+ if (context->buffer != NULL)
+ xmlMemFree(context->buffer);
+
+ xmlFree(context);
+
+ return(0);
+}
+
+/**
+ * xmlIOHTTPSRead:
+ * @c: the read context
+ * @buffer: where to store data
+ * @len: number of bytes to read
+ *
+ * Implement an https: query read.
+ *
+ * Returns the number of bytes read or -1 in case of error
+ */
+int
+xmlIOHTTPSRead(void * c, char * buffer, int len) {
+ int bytesToRead;
+ xmlIOHTTPSReadCtxt *context;
+ CURLcode res;
+
+ if (c == NULL) return(-1);
+ context = (xmlIOHTTPSReadCtxt*) c;
+
+ if (context->buffer == NULL) {
+ res = curl_easy_perform(context->curl);
+ if (res != CURLE_OK) {
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlIOHTTPSRead: %s\n", curl_easy_strerror(res));
+
+ return -1;
+ }
+ }
+
+ bytesToRead = len < (context->sizeBuffer - context->sizeRead) ?
+ len : (context->sizeBuffer - context->sizeRead);
+
+ memcpy(buffer, &(context->buffer[context->sizeRead]), bytesToRead);
+ context->sizeRead += bytesToRead;
+
+ return bytesToRead;
+}
+
+#endif
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/include/libxml/curlhttps.h
libxml2-2.6.27-with-https/include/libxml/curlhttps.h
--- libxml2-2.6.27-orig/include/libxml/curlhttps.h 1969-12-31 19:00:00.000000000 -0500
+++ libxml2-2.6.27-with-https/include/libxml/curlhttps.h 2007-03-21 10:59:45.000000000 -0400
@@ -0,0 +1,49 @@
+/*
+ * Summary: xmlIO HTTPS implementation
+ * Description: xmlIO HTTPS implementation allowing to fetch resources
+ * like external subset.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Joel W. Reed
+ */
+
+#ifndef __CURL_HTTPS_H__
+#define __CURL_HTTPS_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_HTTPS_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**
+ * xmlHttpsOption:
+ *
+ * HTTPS Contxt configuration options.
+ *
+ */
+typedef enum {
+ XML_HTTPS_VERIFYHOST = 1<<0, /* verify that the server cert is for the server it is known as */
+ XML_HTTPS_VERIFYPEER = 1<<1 /* verify the authenticity of the peer's certificate */
+} xmlHttpsOption;
+
+XMLPUBFUN int XMLCALL
+ xmlIOHTTPSSetup (int options);
+XMLPUBFUN int XMLCALL
+ xmlIOHTTPSMatch (const char * URI);
+XMLPUBFUN void * XMLCALL
+ xmlIOHTTPSOpen (const char *URL);
+XMLPUBFUN int XMLCALL
+ xmlIOHTTPSRead (void *ctx,
+ char *dest,
+ int len);
+XMLPUBFUN int XMLCALL
+ xmlIOHTTPSClose (void *ctx);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_HTTPS_ENABLED */
+#endif /* __CURL_HTTPS_H__ */
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/include/libxml/Makefile.am
libxml2-2.6.27-with-https/include/libxml/Makefile.am
--- libxml2-2.6.27-orig/include/libxml/Makefile.am 2005-07-28 15:24:48.000000000 -0400
+++ libxml2-2.6.27-with-https/include/libxml/Makefile.am 2007-03-21 11:18:02.000000000 -0400
@@ -49,7 +49,8 @@ xmlinc_HEADERS = \
chvalid.h \
pattern.h \
xmlsave.h \
- schematron.h
+ schematron.h \
+ curlhttps.h
install-exec-hook:
$(mkinstalldirs) $(DESTDIR)$(xmlincdir)
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/include/libxml/parser.h
libxml2-2.6.27-with-https/include/libxml/parser.h
--- libxml2-2.6.27-orig/include/libxml/parser.h 2006-07-13 02:25:52.000000000 -0400
+++ libxml2-2.6.27-with-https/include/libxml/parser.h 2007-03-21 10:24:10.000000000 -0400
@@ -1207,6 +1207,7 @@ typedef enum {
XML_WITH_DEBUG_MEM = 29,
XML_WITH_DEBUG_RUN = 30,
XML_WITH_ZLIB = 31,
+ XML_WITH_HTTPS = 32,
XML_WITH_NONE = 99999 /* just to be sure of allocation size */
} xmlFeature;
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/include/libxml/xmlversion.h.in
libxml2-2.6.27-with-https/include/libxml/xmlversion.h.in
--- libxml2-2.6.27-orig/include/libxml/xmlversion.h.in 2006-10-11 15:28:04.000000000 -0400
+++ libxml2-2.6.27-with-https/include/libxml/xmlversion.h.in 2007-03-21 10:24:10.000000000 -0400
@@ -178,6 +178,15 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(i
#endif
/**
+ * LIBXML_HTTPS_ENABLED:
+ *
+ * Whether the HTTPS support is configured in
+ */
+#if @WITH_HTTPS@
+#define LIBXML_HTTPS_ENABLED
+#endif
+
+/**
* LIBXML_VALID_ENABLED:
*
* Whether the DTD validation support is configured in
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/libxml-2.0.pc.in
libxml2-2.6.27-with-https/libxml-2.0.pc.in
--- libxml2-2.6.27-orig/libxml-2.0.pc.in 2006-10-11 08:27:12.000000000 -0400
+++ libxml2-2.6.27-with-https/libxml-2.0.pc.in 2007-03-21 10:24:10.000000000 -0400
@@ -9,5 +9,5 @@ Version: @VERSION@
Description: libXML library version2.
Requires:
Libs: -L${libdir} -lxml2
-Libs.private: @THREAD_LIBS@ @Z_LIBS@ @ICONV_LIBS@ @M_LIBS@ @LIBS@
+Libs.private: @THREAD_LIBS@ @Z_LIBS@ @ICONV_LIBS@ @M_LIBS@ @CURL_LIBS@ @LIBS@
Cflags: @XML_INCLUDEDIR@ @XML_CFLAGS@
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/Makefile.am libxml2-2.6.27-with-https/Makefile.am
--- libxml2-2.6.27-orig/Makefile.am 2005-12-06 17:20:12.000000000 -0500
+++ libxml2-2.6.27-with-https/Makefile.am 2007-03-21 10:24:10.000000000 -0400
@@ -4,7 +4,7 @@ SUBDIRS = include . doc example xstc @PY
DIST_SUBDIRS = include . doc example python xstc
-INCLUDES = -I$(top_builddir)/include -I srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
+INCLUDES = -I$(top_builddir)/include -I srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@ @CURL_CFLAGS@
noinst_PROGRAMS=testSchemas testRelax testSAX testHTML testXPath testURI \
testThreads testC14N testAutomata testRegexp \
@@ -15,7 +15,7 @@ bin_PROGRAMS = xmllint xmlcatalog
bin_SCRIPTS=xml2-config
lib_LTLIBRARIES = libxml2.la
-libxml2_la_LIBADD = @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@
+libxml2_la_LIBADD = @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @CURL_LIBS@ @WIN32_EXTRA_LIBADD@
libxml2_la_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@ @WIN32_EXTRA_LDFLAGS@ -version-info @LIBXML_VERSION_INFO@
@MODULE_PLATFORM_LIBS@
@@ -23,7 +23,7 @@ if WITH_TRIO_SOURCES
libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \
parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \
valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \
- xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
+ xpointer.c xinclude.c nanohttp.c nanoftp.c curlhttps.c DOCBparser.c \
catalog.c globals.c threads.c c14n.c xmlstring.c \
xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c \
@@ -33,7 +33,7 @@ else
libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \
parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \
valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \
- xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
+ xpointer.c xinclude.c nanohttp.c nanoftp.c curlhttps.c DOCBparser.c \
catalog.c globals.c threads.c c14n.c xmlstring.c \
xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
xmlreader.c relaxng.c dict.c SAX2.c \
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/parser.c libxml2-2.6.27-with-https/parser.c
--- libxml2-2.6.27-orig/parser.c 2006-10-17 10:28:27.000000000 -0400
+++ libxml2-2.6.27-with-https/parser.c 2007-03-21 10:24:10.000000000 -0400
@@ -687,6 +687,12 @@ xmlHasFeature(xmlFeature feature)
#else
return(0);
#endif
+ case XML_WITH_HTTPS:
+#ifdef LIBXML_HTTPS_ENABLED
+ return(1);
+#else
+ return(0);
+#endif
case XML_WITH_VALID:
#ifdef LIBXML_VALID_ENABLED
return(1);
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/win32/configure.js
libxml2-2.6.27-with-https/win32/configure.js
--- libxml2-2.6.27-orig/win32/configure.js 2005-12-15 06:10:52.000000000 -0500
+++ libxml2-2.6.27-with-https/win32/configure.js 2007-03-21 10:24:10.000000000 -0400
@@ -32,6 +32,7 @@ var withTrio = false;
var withThreads = "native";
var withFtp = true;
var withHttp = true;
+var withHttps = false;
var withHtml = true;
var withC14n = true;
var withCatalog = true;
@@ -115,6 +116,7 @@ function usage()
txt += " threads: Enable thread safety [no|ctls|native|posix] (" + (withThreads) + ") \n";
txt += " ftp: Enable FTP client (" + (withFtp? "yes" : "no") + ")\n";
txt += " http: Enable HTTP client (" + (withHttp? "yes" : "no") + ")\n";
+ txt += " https: Enable HTTPS client (" + (withHttps? "yes" : "no") + ")\n";
txt += " html: Enable HTML processor (" + (withHtml? "yes" : "no") + ")\n";
txt += " c14n: Enable C14N support (" + (withC14n? "yes" : "no") + ")\n";
txt += " catalog: Enable catalog support (" + (withCatalog? "yes" : "no") + ")\n";
@@ -223,6 +225,7 @@ function discoverVersion()
vf.WriteLine("WITH_THREADS=" + withThreads);
vf.WriteLine("WITH_FTP=" + (withFtp? "1" : "0"));
vf.WriteLine("WITH_HTTP=" + (withHttp? "1" : "0"));
+ vf.WriteLine("WITH_HTTPS=" + (withHttps? "1" : "0"));
vf.WriteLine("WITH_HTML=" + (withHtml? "1" : "0"));
vf.WriteLine("WITH_C14N=" + (withC14n? "1" : "0"));
vf.WriteLine("WITH_CATALOG=" + (withCatalog? "1" : "0"));
@@ -300,6 +303,8 @@ function configureLibxml()
of.WriteLine(s.replace(/\ WITH_FTP\@/, withFtp? "1" : "0"));
} else if (s.search(/\ WITH_HTTP\@/) != -1) {
of.WriteLine(s.replace(/\ WITH_HTTP\@/, withHttp? "1" : "0"));
+ } else if (s.search(/\ WITH_HTTPS\@/) != -1) {
+ of.WriteLine(s.replace(/\ WITH_HTTPS\@/, withHttps? "1" : "0"));
} else if (s.search(/\ WITH_HTML\@/) != -1) {
of.WriteLine(s.replace(/\ WITH_HTML\@/, withHtml? "1" : "0"));
} else if (s.search(/\ WITH_C14N\@/) != -1) {
@@ -443,6 +448,8 @@ for (i = 0; (i < WScript.Arguments.lengt
withFtp = strToBool(arg.substring(opt.length + 1, arg.length));
else if (opt == "http")
withHttp = strToBool(arg.substring(opt.length + 1, arg.length));
+ else if (opt == "https")
+ withHttps = strToBool(arg.substring(opt.length + 1, arg.length));
else if (opt == "html")
withHtml = strToBool(arg.substring(opt.length + 1, arg.length));
else if (opt == "c14n")
@@ -629,6 +636,7 @@ txtOut += " Trio: " + boolT
txtOut += " Thread safety: " + withThreads + "\n";
txtOut += " FTP client: " + boolToStr(withFtp) + "\n";
txtOut += " HTTP client: " + boolToStr(withHttp) + "\n";
+txtOut += " HTTPS client: " + boolToStr(withHttps) + "\n";
txtOut += " HTML processor: " + boolToStr(withHtml) + "\n";
txtOut += " C14N support: " + boolToStr(withC14n) + "\n";
txtOut += " Catalog support: " + boolToStr(withCatalog) + "\n";
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/win32/Makefile.bcb
libxml2-2.6.27-with-https/win32/Makefile.bcb
--- libxml2-2.6.27-orig/win32/Makefile.bcb 2006-03-09 03:39:59.000000000 -0500
+++ libxml2-2.6.27-with-https/win32/Makefile.bcb 2007-03-21 10:24:10.000000000 -0400
@@ -68,6 +68,9 @@ CFLAGS = $(CFLAGS) -DHAVE_PTHREAD_H
!if "$(WITH_ZLIB)" == "1"
CFLAGS = $(CFLAGS) -DHAVE_ZLIB_H
!endif
+!if "$(WITH_HTTPS)" == "1"
+CFLAGS = $(CFLAGS) -DCURL_STATICLIB
+!endif
# The linker and its options.
LD = ilink32.exe
@@ -92,6 +95,9 @@ LIBS = $(LIBS) iconvomf.lib
!if "$(WITH_ZLIB)" == "1"
LIBS = $(LIBS) zlibomf.lib
!endif
+!if "$(WITH_HTTPS)" == "1"
+LIBS = $(LIBS) libcurl.lib ssleay32.lib libeay32.lib user32.lib advapi32.lib winmm.lib gdi32.lib
+!endif
!if "$(WITH_THREADS)" == "posix"
LIBS = $(LIBS) pthreadVC.lib
!endif
@@ -130,6 +136,7 @@ XML_OBJS = $(XML_INTDIR)\c14n.obj\
$(XML_INTDIR)\list.obj\
$(XML_INTDIR)\nanoftp.obj\
$(XML_INTDIR)\nanohttp.obj\
+ $(XML_INTDIR)\curlhttps.obj\
$(XML_INTDIR)\parser.obj\
$(XML_INTDIR)\parserInternals.obj\
$(XML_INTDIR)\pattern.obj\
@@ -175,6 +182,7 @@ XML_OBJS_A = $(XML_INTDIR_A)\c14n.obj\
$(XML_INTDIR_A)\list.obj\
$(XML_INTDIR_A)\nanoftp.obj\
$(XML_INTDIR_A)\nanohttp.obj\
+ $(XML_INTDIR_A)\curlhttps.obj\
$(XML_INTDIR_A)\parser.obj\
$(XML_INTDIR_A)\parserInternals.obj\
$(XML_INTDIR_A)\pattern.obj\
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/win32/Makefile.mingw
libxml2-2.6.27-with-https/win32/Makefile.mingw
--- libxml2-2.6.27-orig/win32/Makefile.mingw 2006-02-03 04:42:26.000000000 -0500
+++ libxml2-2.6.27-with-https/win32/Makefile.mingw 2007-03-21 10:24:10.000000000 -0400
@@ -60,6 +60,9 @@ endif
ifeq ($(WITH_ZLIB),1)
CFLAGS += -DHAVE_ZLIB_H
endif
+ifeq ($(WITH_HTTPS),1)
+CFLAGS += -DCURL_STATICLIB
+endif
# The linker and its options.
LD = gcc.exe
@@ -81,6 +84,9 @@ endif
ifeq ($(WITH_ZLIB),1)
LIBS += -lzdll
endif
+ifeq ($(WITH_HTTPS),1)
+LIBS += -leay32 -lcurl -lssleay32 -luser32 -ladvapi32 -lwinmm -lgdi32
+endif
ifeq ($(WITH_THREADS),posix)
LIBS += -lpthreadGC
endif
@@ -120,6 +126,7 @@ XML_OBJS = $(XML_INTDIR)/c14n.o\
$(XML_INTDIR)/list.o\
$(XML_INTDIR)/nanoftp.o\
$(XML_INTDIR)/nanohttp.o\
+ $(XML_INTDIR)/curlhttps.o\
$(XML_INTDIR)/parser.o\
$(XML_INTDIR)/parserInternals.o\
$(XML_INTDIR)/pattern.o\
@@ -167,6 +174,7 @@ XML_OBJS_A = $(XML_INTDIR_A)/c14n.o\
$(XML_INTDIR_A)/list.o\
$(XML_INTDIR_A)/nanoftp.o\
$(XML_INTDIR_A)/nanohttp.o\
+ $(XML_INTDIR_A)/curlhttps.o\
$(XML_INTDIR_A)/parser.o\
$(XML_INTDIR_A)/parserInternals.o\
$(XML_INTDIR_A)/pattern.o\
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/win32/Makefile.msvc
libxml2-2.6.27-with-https/win32/Makefile.msvc
--- libxml2-2.6.27-orig/win32/Makefile.msvc 2006-02-03 04:42:26.000000000 -0500
+++ libxml2-2.6.27-with-https/win32/Makefile.msvc 2007-03-21 10:24:10.000000000 -0400
@@ -56,6 +56,9 @@ CFLAGS = $(CFLAGS) /D "HAVE_PTHREAD_H"
!if "$(WITH_ZLIB)" == "1"
CFLAGS = $(CFLAGS) /D "HAVE_ZLIB_H"
!endif
+!if "$(WITH_HTTPS)" == "1"
+CFLAGS = $(CFLAGS) /D "CURL_STATICLIB"
+!endif
# The linker and its options.
LD = link.exe
@@ -65,6 +68,9 @@ LIBS =
!if "$(WITH_FTP)" == "1" || "$(WITH_HTTP)" == "1"
LIBS = $(LIBS) wsock32.lib
!endif
+!if "$(WITH_HTTPS)" == "1"
+LIBS = $(LIBS) libcurl.lib ssleay32.lib libeay32.lib user32.lib advapi32.lib winmm.lib gdi32.lib
+!endif
!if "$(WITH_ICONV)" == "1"
LIBS = $(LIBS) iconv.lib
!endif
@@ -109,6 +115,7 @@ XML_OBJS = $(XML_INTDIR)\c14n.obj\
$(XML_INTDIR)\list.obj\
$(XML_INTDIR)\nanoftp.obj\
$(XML_INTDIR)\nanohttp.obj\
+ $(XML_INTDIR)\curlhttps.obj\
$(XML_INTDIR)\parser.obj\
$(XML_INTDIR)\parserInternals.obj\
$(XML_INTDIR)\pattern.obj\
@@ -154,6 +161,7 @@ XML_OBJS_A = $(XML_INTDIR_A)\c14n.obj\
$(XML_INTDIR_A)\list.obj\
$(XML_INTDIR_A)\nanoftp.obj\
$(XML_INTDIR_A)\nanohttp.obj\
+ $(XML_INTDIR_A)\curlhttps.obj\
$(XML_INTDIR_A)\parser.obj\
$(XML_INTDIR_A)\parserInternals.obj\
$(XML_INTDIR_A)\pattern.obj\
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/xmlIO.c libxml2-2.6.27-with-https/xmlIO.c
--- libxml2-2.6.27-orig/xmlIO.c 2006-10-13 06:27:09.000000000 -0400
+++ libxml2-2.6.27-with-https/xmlIO.c 2007-03-21 10:24:10.000000000 -0400
@@ -87,6 +87,9 @@
#ifdef LIBXML_CATALOG_ENABLED
#include <libxml/catalog.h>
#endif
+#ifdef LIBXML_HTTPS_ENABLED
+#include <libxml/curlhttps.h>
+#endif
#include <libxml/globals.h>
/* #define VERBOSE_FAILURE */
@@ -2126,6 +2129,11 @@ xmlRegisterDefaultInputCallbacks(void) {
xmlIOHTTPRead, xmlIOHTTPClose);
#endif /* LIBXML_HTTP_ENABLED */
+#ifdef LIBXML_HTTPS_ENABLED
+ xmlRegisterInputCallbacks(xmlIOHTTPSMatch, xmlIOHTTPSOpen,
+ xmlIOHTTPSRead, xmlIOHTTPSClose);
+#endif /* LIBXML_HTTP_ENABLED */
+
#ifdef LIBXML_FTP_ENABLED
xmlRegisterInputCallbacks(xmlIOFTPMatch, xmlIOFTPOpen,
xmlIOFTPRead, xmlIOFTPClose);
diff -up -X libxml2-dont-diff -urN libxml2-2.6.27-orig/xmllint.c libxml2-2.6.27-with-https/xmllint.c
--- libxml2-2.6.27-orig/xmllint.c 2006-10-18 17:21:50.000000000 -0400
+++ libxml2-2.6.27-with-https/xmllint.c 2007-03-21 10:24:10.000000000 -0400
@@ -2782,6 +2782,7 @@ static void showVersion(const char *name
if (xmlHasFeature(XML_WITH_SAX1)) fprintf(stderr, "SAXv1 ");
if (xmlHasFeature(XML_WITH_FTP)) fprintf(stderr, "FTP ");
if (xmlHasFeature(XML_WITH_HTTP)) fprintf(stderr, "HTTP ");
+ if (xmlHasFeature(XML_WITH_HTTPS)) fprintf(stderr, "HTTPS ");
if (xmlHasFeature(XML_WITH_VALID)) fprintf(stderr, "DTDValid ");
if (xmlHasFeature(XML_WITH_HTML)) fprintf(stderr, "HTML ");
if (xmlHasFeature(XML_WITH_LEGACY)) fprintf(stderr, "Legacy ");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]