Replace avhttp with libcurl
authorunknown <mark.roszko@gmail.com>
Tue, 22 Dec 2015 14:19:00 +0000 (15:19 +0100)
committerCarsten Schoenert <c.schoenert@t-online.de>
Wed, 25 Jan 2017 21:38:35 +0000 (21:38 +0000)
Some fixes:
1. Fixed an assumption somebody originally made in the plugin that
   std::string had contiguous storage. This is not specced behavior pre
   C++11 so we gamble by calling .reserve() which should give a far
   better guarantee.

2. Added copy to clipboard information for curl

3. Removed some openssl references in compiling.md

4. Renamed struct vars to be uppercase to match "public var" code style
   policy

Gbp-Pq: Topic fixes
Gbp-Pq: Name Replace-avhttp-with-libcurl.patch

Documentation/development/compiling.md
common/basicframe.cpp
common/kicad_curl/kicad_curl.cpp
common/kicad_curl/kicad_curl_easy.cpp
include/kicad_curl/kicad_curl.h
include/kicad_curl/kicad_curl_easy.h
pcbnew/github/CMakeLists.txt
pcbnew/github/github_getliblist.cpp
pcbnew/github/github_plugin.cpp

index 90cea9557dba64176f7e0ac523a2b08462574980..6a5ac92c30a80bce89a0f07dd14afc86b17a9f91 100644 (file)
@@ -78,14 +78,6 @@ specific patches required to build a working Boost library.  These patches can b
 [patches folder][] in the KiCad source.  These patches are named by the platform name they should
 be applied against.
 
-## OpenSSL Secure Socket Layer Library ## {#openssl}
-
-The [OpenSSL][] library is only required when the KiCad build is configured with the Github plugin
-enabled.  See the [KiCad Build Configuration Options](#build_opts)` section for more information.
-Please note that KiCad will download and build version 1.0.1e of OpenSSL by default.  You should
-probably use the version of OpenSSL installed on your system as it will most likely be more up to
-date and contain the latest security fixes.
-
 ## GLEW OpenGL Extension Wrangler Library ## {#glew}
 
 The [OpenGL Extension Wrangler][GLEW] is an OpenGL helper library used by the KiCad graphics
@@ -299,7 +291,7 @@ the following commands:
               mingw-w64-x86_64-boost \
               mingw-w64-x86_64-cairo \
               mingw-w64-x86_64-glew \
-              mingw-w64-x86_64-openssl \
+              mingw-w64-x86_64-curl \
               mingw-w64-x86_64-wxPython \
               mingw-w64-x86_64-wxWidgets
     cd kicad-source
@@ -311,7 +303,6 @@ the following commands:
           -DCMAKE_PREFIX_PATH=/mingw64 \
           -DCMAKE_INSTALL_PREFIX=/mingw64 \
           -DDEFAULT_INSTALL_PATH=/mingw64 \
-          -DOPENSSL_ROOT_DIR=/mingw64 \
           -DKICAD_SKIP_BOOST=ON \
           -DKICAD_SCRIPTING=ON \
           -DKICAD_SCRIPTING_MODULES=ON \
@@ -408,7 +399,6 @@ Boost patches in the KiCad source [patch folder][].
 [wxWidgets]: http://wxwidgets.org/
 [patches folder]: http://bazaar.launchpad.net/~kicad-product-committers/kicad/product/files/head:/patches/
 [Boost]: http://www.boost.org/
-[OpenSSL]: https://www.openssl.org/
 [GLEW]: http://glew.sourceforge.net/
 [GLUT]: https://www.opengl.org/resources/libraries/glut/
 [Cairo]: http://cairographics.org/
index 46ddd550b841debd2a6c0d55c5f0d6a3b1ef0d42..815247d0779ae40307e6f6c72a040b66e1789c7d 100644 (file)
@@ -28,6 +28,7 @@
  * @brief EDA_BASE_FRAME class implementation.
  */
 
+#include <kicad_curl/kicad_curl.h> /* Include before any wx file */
 #include <wx/aboutdlg.h>
 #include <wx/fontdlg.h>
 #include <wx/clipbrd.h>
@@ -580,6 +581,8 @@ void EDA_BASE_FRAME::CopyVersionInfoToClipboard( wxCommandEvent&  event )
                 << ( BOOST_VERSION / 100 % 1000 ) << wxT( "." )
                 << ( BOOST_VERSION % 100 ) << wxT( "\n" );
 
+    msg_version <<  KICAD_CURL::GetSimpleVersion() << wxT( "\n" );
+
     msg_version << wxT( "         USE_WX_GRAPHICS_CONTEXT=" );
 #ifdef USE_WX_GRAPHICS_CONTEXT
     msg_version << wxT( "ON\n" );
index 7424eec87065115a3839b85ad03d599e4adc3e00..0df2528859787658ad3ae6ae6874856c08e19471 100644 (file)
@@ -51,4 +51,30 @@ std::string KICAD_CURL::GetVersion()
 }
 
 
+std::string KICAD_CURL::GetSimpleVersion()
+{
+    curl_version_info_data *info = curl_version_info(CURLVERSION_NOW);
+
+    std::string res;
+
+    if( info->version )
+    {
+        res += "libcurl version: " + std::string(info->version);
+    }
+
+    res += " (";
+    if( info->features & CURL_VERSION_SSL )
+    {
+        res += "with SSL - ";
+        res += std::string(info->ssl_version);
+    }
+    else
+    {
+        res += "without SSL";
+    }
+    res += ")";
+
+    return res;
+}
+
 bool KICAD_CURL::m_initialized = false;
\ No newline at end of file
index 71a410d0d04bd030a2bf07fa72f24710504bea63..4dadf0439791699b46b97131e083127e54eeca7e 100644 (file)
@@ -43,8 +43,8 @@ KICAD_CURL_EASY::KICAD_CURL_EASY()
         THROW_IO_ERROR( "Unable to initialize CURL session" );
     }
 
-    m_Buffer.payload = (char*)malloc( 1 );
-    m_Buffer.size = 0;
+    m_Buffer.Payload = (char*)malloc( 1 );
+    m_Buffer.Size = 0;
 
     curl_easy_setopt( m_CURL, CURLOPT_WRITEFUNCTION, write_callback );
     curl_easy_setopt( m_CURL, CURLOPT_WRITEDATA, (void *)&m_Buffer );
@@ -53,7 +53,7 @@ KICAD_CURL_EASY::KICAD_CURL_EASY()
 
 KICAD_CURL_EASY::~KICAD_CURL_EASY()
 {
-    free(m_Buffer.payload);
+    free(m_Buffer.Payload);
     curl_easy_cleanup(m_CURL);
 }
 
@@ -110,27 +110,27 @@ static size_t write_callback( void *contents, size_t size, size_t nmemb, void *u
     struct KICAD_EASY_CURL_BUFFER *p = ( struct KICAD_EASY_CURL_BUFFER * ) userp;
 
     /* expand buffer */
-    p->payload = (char *) realloc( p->payload, p->size + realsize + 1 );
+    p->Payload = (char *) realloc( p->Payload, p->Size + realsize + 1 );
 
     /* check buffer */
-    if ( p->payload == NULL )
+    if ( p->Payload == NULL )
     {
         wxLogError( wxT( "Failed to expand buffer in curl_callback" ) );
 
         /* free buffer */
-        free( p->payload );
+        free( p->Payload );
 
         return -1;
     }
 
     /* copy contents to buffer */
-    memcpy( &(p->payload[p->size]), contents, realsize );
+    memcpy( &(p->Payload[p->Size]), contents, realsize );
 
     /* set new buffer size */
-    p->size += realsize;
+    p->Size += realsize;
 
     /* ensure null termination */
-    p->payload[p->size] = 0;
+    p->Payload[p->Size] = 0;
 
     /* return size */
     return realsize;
@@ -144,11 +144,11 @@ void KICAD_CURL_EASY::Perform()
         curl_easy_setopt( m_CURL, CURLOPT_HTTPHEADER, m_headers );
     }
 
-    if( m_Buffer.size > 0 )
+    if( m_Buffer.Size > 0 )
     {
-        free( m_Buffer.payload );
-        m_Buffer.payload = (char*)malloc( 1 );
-        m_Buffer.size = 0;
+        free( m_Buffer.Payload );
+        m_Buffer.Payload = (char*)malloc( 1 );
+        m_Buffer.Size = 0;
     }
 
     CURLcode res = curl_easy_perform( m_CURL );
index 3639400c921c90e66f37c22462303da69129da67..ef49f92df397edae39a527683749cd1f8f3d0d9c 100644 (file)
@@ -75,6 +75,13 @@ public:
      */
     static std::string GetVersion();
 
+    /**
+     * Function GetSimpleVersion
+     * Reports back curl version only and SSL library support
+     *
+     * @return std::string - Generated version string
+     */
+    static std::string GetSimpleVersion();
 private:
     static bool m_initialized;
 };
index a87c3d02b171fa19196fbcc6ee8010f5fa62271e..2273e4893c8c742745e63c4f6d80b8b189bcf9a1 100644 (file)
@@ -52,8 +52,8 @@
  */
 struct KICAD_EASY_CURL_BUFFER
 {
-    char* payload;
-    size_t size;
+    char* Payload;
+    size_t Size;
 };
 
 
@@ -142,7 +142,7 @@ public:
      * @param aArg is the argument being passed to CURL, ensure it is the right type per manual
      * @return CURLcode - CURL error code, will return CURLE_OK unless a problem was encountered
      */
-    template <typename T> CURLcode SetOption( CURLoption aOption, T aArg ) 
+    template <typename T> CURLcode SetOption( CURLoption aOption, T aArg )
     { 
         return curl_easy_setopt( m_CURL, aOption, aArg ); 
     }
index bb37ebf5fac080c6b4116b97de13b1dcedf02c5c..c6615e481b75f8be93734ab7c942f0ca62497182 100644 (file)
@@ -32,8 +32,6 @@ set( GITHUB_PLUGIN_SRCS
 
 add_library( github_plugin STATIC ${GITHUB_PLUGIN_SRCS} )
 
-# No, you don't get github without boost and openssl. Boost_LIBRARIES now moved up
-# into CMakeLists.txt for pcbnew and cvpcb:
 target_link_libraries( github_plugin
     common
     )
index baf5f7c2372f3cf84e3516d7fbbf566403162dfb..6c8f88525e3612a498def853052617b1ddb88c3d 100644 (file)
@@ -212,7 +212,7 @@ bool GITHUB_GETLIBLIST::repoURL2listURL( const wxString& aRepoURL,
 bool GITHUB_GETLIBLIST::remoteGetJSON( const std::string& aFullURLCommand, wxString* aMsgError )
 {
     KICAD_CURL_EASY kcurl;
-    
+
     wxLogDebug( wxT( "Attempting to download: " ) + aFullURLCommand );
 
     kcurl.SetURL(aFullURLCommand);
@@ -223,7 +223,8 @@ bool GITHUB_GETLIBLIST::remoteGetJSON( const std::string& aFullURLCommand, wxStr
     try
     {
         kcurl.Perform();
-        m_image.assign(kcurl.GetBuffer()->payload, kcurl.GetBuffer()->size);
+        m_image.reserve( kcurl.GetBuffer()->Size );
+        m_image.assign( kcurl.GetBuffer()->Payload, kcurl.GetBuffer()->Size );
         return true;
     }
     catch( const IO_ERROR& ioe )
index db96ae18d85653c0cb765c176ba5185b0eecfb81..321e0b7688f53e1b1a93f15a91f9a3e70c799263 100644 (file)
@@ -538,7 +538,8 @@ void GITHUB_PLUGIN::remoteGetZip( const wxString& aRepoURL ) throw( IO_ERROR )
     try
     {
         kcurl.Perform();
-        m_zip_image.assign(kcurl.GetBuffer()->payload, kcurl.GetBuffer()->size);
+        m_zip_image.reserve( kcurl.GetBuffer()->Size );
+        m_zip_image.assign( kcurl.GetBuffer()->Payload, kcurl.GetBuffer()->Size );
     }
     catch( const IO_ERROR& ioe )
     {