------------------------------------------------------------------------------
--                               ftpget.adb                                 --
--                    Copyright (C) 2003 Andreas Almroth                    --
--                                                                          --
-- AdacURL is free  software; you  can  redistribute it  and/or modify it   --
-- under terms of the  GNU General Public License as published by the Free  --
-- Software Foundation; either version 2,  or (at your option) any later    --
-- version.  AdacURL is distributed in the  hope that it will be useful,    --
-- but  WITH  OUT  ANY  WARRANTY;  without  even the  implied  warranty  of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General --
-- Public License for more details.  You should have received a copy of the --
-- GNU General Public License distributed with AdacURL;  see file COPYING. --
-- If not,  write  to  the Free  Software  Foundation, 59 Temple Place -    --
-- Suite 330, Boston, MA 02111-1307, USA.                                   --
--                                                                          --
-- As a special exception,  if other files  instantiate  generics from this --
-- unit, or you link  this unit with other files  to produce an executable, --
-- this  unit  does not  by itself cause  the resulting  executable  to  be --
-- covered  by the  GNU  General  Public  License.  This exception does not --
-- however invalidate  any other reasons why  the executable file  might be --
-- covered by the  GNU Public License.                                      --
--                                                                          --
------------------------------------------------------------------------------
-- $Author: Andreas Almroth $
-- $Date: 03-07-29 17:15 $
-- $Workfile: ftpget.adb $
-- $Revision: 1 $
-- $State: Unstable $
--
-- HISTORY:
--
-- Revision 1: Initial release
--
-- ftpget.adb is based on the ftpget.c sample file

with System;               use System;
with Adacurl;              use Adacurl;
with Adacurl.easy;         use Adacurl.Easy;
with Interfaces.C;         use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;
with Curl_Callbacks; use Curl_Callbacks;
with System.Address_To_Access_Conversions;
with Ada.Text_Io; use Ada.Text_Io;

procedure Ftpget is
   ---------------------------------------------------------------------------
   package Ftpfile_Conv is new System.Address_To_Access_Conversions(Ftpfile);
   use Ftpfile_Conv;
   ---------------------------------------------------------------------------

   ---------------------------------------------------------------------------
   function fopen(Name : chars_ptr;
                  Mode : Chars_Ptr) return File_P;
   pragma Import(C,fopen,"fopen");
   ---------------------------------------------------------------------------
   ---------------------------------------------------------------------------
   function fclose(Stream : File_P) return Int;
   pragma Import(C,fclose,"fclose");
   ---------------------------------------------------------------------------

   Curl           : CURL_P;
   Res            : CURLcode;
   Rc             : Int;
   Ftp            : aliased Ftpfile;
begin
   Ftp.Filename := New_String("curl.tar.gz");
   Ftp.Stream := System.Null_Address;

   Res := Curl_Global_Init(CURL_GLOBAL_DEFAULT);

   Curl := Curl_Easy_Init;

   if Curl /= null then
      Res := Curl_Easy_Setopt(Curl,
                              CURLOPT_URL,
                              New_String("ftp://ftp.sunet.se/pub/www/" &
                                         "utilities/curl/curl-7.9.2.tar.gz"));

      Res := Curl_Easy_Setopt(Curl,CURLOPT_WRITEFUNCTION,My_Fwrite'Access);

      Res := Curl_Easy_Setopt(Curl,
                              CURLOPT_FILE,
                              To_Address(Ftp'Unchecked_Access));

      Res := Curl_Easy_Setopt(Curl,CURLOPT_VERBOSE,1);

      Res := Curl_Easy_Perform(Curl);

      Curl_Easy_Cleanup(Curl);

      if CURLE_OK /= Res then
         Put_Line(Standard_Error,"curl told us " & CURLcode'Image(Res));
      end if;
   end if;

   Rc := Fclose(Ftp.Stream);

   Curl_Global_Cleanup;

end Ftpget;