Pārlūkot izejas kodu

ADD: Load any supported OpenSSL version

Alexander Koblov 10 gadi atpakaļ
vecāks
revīzija
8a2f51e8ac

+ 3 - 0
plugins/wfx/ftp/src/ftp.dpr

@@ -7,6 +7,9 @@ library ftp;
 uses
   Classes, FtpFunc, FtpUtils, FtpConfDlg
   , ssl_openssl
+{$IF DEFINED(UNIX)}
+  , ssl_openssl_ver
+{$ENDIF}
 {$IF DEFINED(LINUX)}
   , ssl_gnutls_lib
 {$ELSEIF DEFINED(MSWINDOWS)}

+ 96 - 0
plugins/wfx/ftp/synapse/ssl_openssl_ver.pas

@@ -0,0 +1,96 @@
+{==============================================================================|
+| Project : Ararat Synapse                                       | 003.004.001 |
+|==============================================================================|
+| Content: SSL support by OpenSSL                                              |
+|==============================================================================|
+| Copyright (c)1999-2005, Lukas Gebauer                                        |
+| All rights reserved.                                                         |
+|                                                                              |
+| Redistribution and use in source and binary forms, with or without           |
+| modification, are permitted provided that the following conditions are met:  |
+|                                                                              |
+| Redistributions of source code must retain the above copyright notice, this  |
+| list of conditions and the following disclaimer.                             |
+|                                                                              |
+| Redistributions in binary form must reproduce the above copyright notice,    |
+| this list of conditions and the following disclaimer in the documentation    |
+| and/or other materials provided with the distribution.                       |
+|                                                                              |
+| Neither the name of Lukas Gebauer nor the names of its contributors may      |
+| be used to endorse or promote products derived from this software without    |
+| specific prior written permission.                                           |
+|                                                                              |
+| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"  |
+| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE    |
+| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE   |
+| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR  |
+| ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL       |
+| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR   |
+| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER   |
+| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT           |
+| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY    |
+| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH  |
+| DAMAGE.                                                                      |
+|==============================================================================|
+| The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).|
+| Portions created by Lukas Gebauer are Copyright (c)2002-2005.                |
+| All Rights Reserved.                                                         |
+|==============================================================================|
+| Contributor(s):                                                              |
+|   Alexander Koblov                                                           |
+|   Ales Katona (Try to load all library versions until you find or run out)   |
+|==============================================================================|
+| History: see HISTORY.HTM from distribution package                           |
+|          (Found at URL: http://www.ararat.cz/synapse/)                       |
+|==============================================================================}
+
+unit ssl_openssl_ver;
+
+{$mode delphi}
+
+interface
+
+implementation
+
+uses
+  blcksock, ssl_openssl, ssl_openssl_lib;
+
+const
+  LibSSLName = 'libssl';
+  LibUtilName = 'libcrypto';
+
+  { ADD NEW ONES WHEN THEY APPEAR!
+    Always make .so/dylib first, then versions, in descending order!
+    Add "." .before the version, first is always just "" }
+  LibVersions: array[1..16] of String = ('', '.1.0.6', '.1.0.5', '.1.0.4', '.1.0.3',
+                                         '.1.0.2', '.1.0.1','.1.0.0','.0.9.8',
+                                         '.0.9.7', '.0.9.6', '.0.9.5', '.0.9.4',
+                                         '.0.9.3', '.0.9.2', '.0.9.1');
+
+function GetLibraryName(const Value: String; Index: Integer): String;
+begin
+{$IFDEF DARWIN}
+  Result := Value + LibVersions[Index] + '.dylib';
+{$ELSE}
+  Result := Value + '.so' + LibVersions[Index];
+{$ENDIF}
+end;
+
+var
+  Index: Integer;
+begin
+  if not IsSSLloaded then
+  begin
+    for Index := Low(LibVersions) to High(LibVersions) do
+    begin
+      DLLSSLName := GetLibraryName(LibSSLName, Index);
+      DLLUtilName := GetLibraryName(LibUtilName, Index);
+
+      if InitSSLInterface then
+      begin
+        SSLImplementation:= TSSLOpenSSL;
+        Break;
+      end;
+    end;
+  end;
+end.