--- libcmis/src/libcmis/session-factory.cxx.orig	2024-06-21 17:40:02.696092806 +0200
+++ libcmis/src/libcmis/session-factory.cxx	2024-06-21 17:32:21.759833389 +0200
@@ -75,12 +75,15 @@
             if ( bindingUrl == "https://www.googleapis.com/drive/v3" )
             {
                 session = new GDriveSession( bindingUrl, username, password,
-                                             oauth2, verbose );
+                                             oauth2, verbose,
+                                             g_CurlInitProtocolsFunction);
+
             }
             else if ( bindingUrl == "https://graph.microsoft.com/v1.0" )
             {
                 session = new OneDriveSession( bindingUrl, username, password,
-                                               oauth2, verbose);
+                                               oauth2, verbose,
+                                               g_CurlInitProtocolsFunction);
             }
             else
             {
@@ -103,7 +106,7 @@
                     }
                     // Could be SharePoint - needs NTLM authentication
                     session = new SharePointSession( bindingUrl, username,
-                                                      password, verbose );
+                          password, verbose, g_CurlInitProtocolsFunction);
                 }
 
                 // Try the CMIS cases: we need to autodetect the binding type
--- libcmis/src/libcmis/base-session.hxx.orig	2024-06-21 17:41:56.737651815 +0200
+++ libcmis/src/libcmis/base-session.hxx	2024-06-21 17:42:08.466709308 +0200
@@ -59,7 +59,8 @@
         BaseSession( std::string sBindingUrl, std::string repository,
                      std::string username, std::string password,
                      bool noSslCheck = false,
-                     libcmis::OAuth2DataPtr oauth2 = libcmis::OAuth2DataPtr(), bool verbose = false );
+                     libcmis::OAuth2DataPtr oauth2 = libcmis::OAuth2DataPtr(), bool verbose = false,
+                     libcmis::CurlInitProtocolsFunction = nullptr);
 
         /** This constructor copies an existing http session.
             This has been mostly designed for SessionFactory to save
--- libcmis/src/libcmis/base-session.cxx.orig	2024-06-21 17:42:28.593807967 +0200
+++ libcmis/src/libcmis/base-session.cxx	2024-06-21 17:43:37.051143529 +0200
@@ -43,9 +43,10 @@
 using namespace std;
 
 BaseSession::BaseSession( string bindingUrl, string repositoryId, string username,
-        string password, bool noSslCheck, libcmis::OAuth2DataPtr oauth2, bool verbose ) :
+        string password, bool noSslCheck, libcmis::OAuth2DataPtr oauth2, bool verbose,
+        libcmis::CurlInitProtocolsFunction initProtocolsFunction) :
     Session( ),
-    HttpSession( username, password, noSslCheck, oauth2, verbose ),
+    HttpSession( username, password, noSslCheck, oauth2, verbose, initProtocolsFunction ),
     m_bindingUrl( bindingUrl ),
     m_repositoryId( repositoryId ),
     m_repositories( )
--- libcmis/src/libcmis/gdrive-session.hxx.orig	2024-06-21 17:44:32.721416413 +0200
+++ libcmis/src/libcmis/gdrive-session.hxx	2024-06-21 17:39:01.143791090 +0200
@@ -39,7 +39,8 @@
                        std::string username,
                        std::string password,
                        libcmis::OAuth2DataPtr oauth2,
-                       bool verbose = false );
+                       bool verbose = false,
+                       libcmis::CurlInitProtocolsFunction = nullptr);
 
         ~GDriveSession ( );
 
--- libcmis/src/libcmis/gdrive-session.cxx.orig	2024-06-21 17:44:59.947549870 +0200
+++ libcmis/src/libcmis/gdrive-session.cxx	2024-06-21 17:45:26.666680841 +0200
@@ -43,9 +43,10 @@
                                string username,
                                string password,
                                libcmis::OAuth2DataPtr oauth2,
-                               bool verbose ) :
+                               bool verbose,
+                               libcmis::CurlInitProtocolsFunction initProtocolsFunction) :
     BaseSession( baseUrl, string(), username, password, false,
-                 libcmis::OAuth2DataPtr(), verbose )
+                 libcmis::OAuth2DataPtr(), verbose, initProtocolsFunction )
 
 {
     // Add the dummy repository, even if we don't have OAuth2
--- libcmis/src/libcmis/onedrive-session.hxx.orig	2024-06-21 17:46:39.857039605 +0200
+++ libcmis/src/libcmis/onedrive-session.hxx	2024-06-21 17:46:59.045133662 +0200
@@ -40,7 +40,8 @@
                        std::string username, 
                        std::string password,
                        libcmis::OAuth2DataPtr oauth2,
-                       bool verbose = false );
+                       bool verbose = false,
+                       libcmis::CurlInitProtocolsFunction = nullptr);
 
         ~OneDriveSession ( );
 
--- libcmis/src/libcmis/onedrive-session.cxx.orig	2024-06-21 17:47:35.187310824 +0200
+++ libcmis/src/libcmis/onedrive-session.cxx	2024-06-21 17:48:02.068442589 +0200
@@ -41,9 +41,10 @@
                                string username,
                                string password,
                                libcmis::OAuth2DataPtr oauth2,
-                               bool verbose ) :
+                               bool verbose,
+                               libcmis::CurlInitProtocolsFunction initProtocolsFunction) :
     BaseSession( baseUrl, string(), username, password, false,
-                 libcmis::OAuth2DataPtr(), verbose )
+                 libcmis::OAuth2DataPtr(), verbose, initProtocolsFunction)
 
 {
     // Add the dummy repository
--- libcmis/src/libcmis/sharepoint-session.hxx.orig	2024-06-21 18:02:35.120719197 +0200
+++ libcmis/src/libcmis/sharepoint-session.hxx	2024-06-21 18:02:54.288813088 +0200
@@ -39,7 +39,8 @@
         SharePointSession( std::string baseUrl,
                        std::string username, 
                        std::string password,
-                       bool verbose = false );
+                       bool verbose = false,
+                       libcmis::CurlInitProtocolsFunction = nullptr);
 
         SharePointSession( std::string baseUrl,
                         const HttpSession& httpSession,
--- libcmis/src/libcmis/sharepoint-session.cxx.orig	2024-06-21 16:02:24.597237776 +0200
+++ libcmis/src/libcmis/sharepoint-session.cxx	2024-06-21 18:03:48.109076715 +0200
@@ -42,9 +42,10 @@
 SharePointSession::SharePointSession ( string baseUrl,
                                string username,
                                string password,
-                               bool verbose ) :
+                               bool verbose,
+                               libcmis::CurlInitProtocolsFunction initProtocolsFunction) :
     BaseSession( baseUrl, string(), username, password, false,
-                 libcmis::OAuth2DataPtr(), verbose ),
+                 libcmis::OAuth2DataPtr(), verbose, initProtocolsFunction ),
     m_digestCode( string( ) ) 
 
 {
--- libcmis/src/libcmis/http-session.cxx.orig	2024-06-21 18:24:44.192002619 +0200
+++ libcmis/src/libcmis/http-session.cxx	2024-06-21 18:24:46.329012530 +0200
@@ -981,6 +981,7 @@
                 case CURLE_COULDNT_RESOLVE_HOST:
                     type = "dnsFailed";
                     break;
+                case CURLE_UNSUPPORTED_PROTOCOL:
                 case CURLE_COULDNT_CONNECT:
                 case CURLE_SSL_CONNECT_ERROR:
                 case CURLE_SSL_CERTPROBLEM:
