Merge the getURLcontent function in getURL 11/11111/2
Sylvestre Ledru [Wed, 27 Mar 2013 15:34:20 +0000 (16:34 +0100)]
Change-Id: I2672f2ea681023907b4abc36b0b89629208d1fa4

17 files changed:
scilab/CHANGES_5.5.X
scilab/modules/fileio/Makefile.am
scilab/modules/fileio/Makefile.in
scilab/modules/fileio/fileio.vcxproj
scilab/modules/fileio/fileio.vcxproj.filters
scilab/modules/fileio/help/en_US/getURL.xml
scilab/modules/fileio/help/en_US/getURLcontent.xml [deleted file]
scilab/modules/fileio/help/en_US/splitURL.xml
scilab/modules/fileio/includes/gw_fileio.h
scilab/modules/fileio/sci_gateway/c/gw_fileio.c
scilab/modules/fileio/sci_gateway/c/sci_getURL.c
scilab/modules/fileio/sci_gateway/c/sci_getURLcontent.c [deleted file]
scilab/modules/fileio/sci_gateway/fileio_gateway.xml
scilab/modules/fileio/src/c/dlManager.c
scilab/modules/fileio/src/c/dlManager.h
scilab/modules/fileio/tests/unit_tests/getURL.tst
scilab/modules/fileio/tests/unit_tests/getURLcontent.tst

index 0b106c5..fce8d36 100644 (file)
@@ -15,7 +15,6 @@ New features
 BDF methods with direct and preconditioned Krylov linear solvers, from ODEPACK.
 
 * New functions introduced:
- - getURLcontent - Return the content of an URL (HTTP, HTTPS, FTP...)
  - getURL - Download an URL (HTTP, HTTPS, FTP...)
  - splitURL - Split a URL (HTTP, HTTPS, FTP...)
 
index 5314c4d..5d7b954 100644 (file)
@@ -107,7 +107,6 @@ sci_gateway/c/sci_isfile.c \
 sci_gateway/c/sci_mputl.c \
 sci_gateway/c/sci_tempname.c \
 sci_gateway/c/sci_getURL.c \
-sci_gateway/c/sci_getURLcontent.c \
 sci_gateway/c/sci_splitURL.c
 
 
index 65a3675..82a4828 100644 (file)
@@ -223,7 +223,6 @@ am__objects_2 = libscifileio_la-gw_fileio.lo \
        libscifileio_la-sci_pathconvert.lo \
        libscifileio_la-sci_isfile.lo libscifileio_la-sci_mputl.lo \
        libscifileio_la-sci_tempname.lo libscifileio_la-sci_getURL.lo \
-       libscifileio_la-sci_getURLcontent.lo \
        libscifileio_la-sci_splitURL.lo
 am_libscifileio_la_OBJECTS = $(am__objects_2)
 libscifileio_la_OBJECTS = $(am_libscifileio_la_OBJECTS)
@@ -616,7 +615,6 @@ sci_gateway/c/sci_isfile.c \
 sci_gateway/c/sci_mputl.c \
 sci_gateway/c/sci_tempname.c \
 sci_gateway/c/sci_getURL.c \
-sci_gateway/c/sci_getURLcontent.c \
 sci_gateway/c/sci_splitURL.c
 
 libscifileio_la_CPPFLAGS = -I$(srcdir)/includes/ \
@@ -893,7 +891,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscifileio_la-sci_fscanfMat.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscifileio_la-sci_fullpath.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscifileio_la-sci_getURL.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscifileio_la-sci_getURLcontent.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscifileio_la-sci_get_absolute_file_path.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscifileio_la-sci_getdrives.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscifileio_la-sci_getlongpathname.Plo@am__quote@
@@ -1656,13 +1653,6 @@ libscifileio_la-sci_getURL.lo: sci_gateway/c/sci_getURL.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscifileio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libscifileio_la-sci_getURL.lo `test -f 'sci_gateway/c/sci_getURL.c' || echo '$(srcdir)/'`sci_gateway/c/sci_getURL.c
 
-libscifileio_la-sci_getURLcontent.lo: sci_gateway/c/sci_getURLcontent.c
-@am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscifileio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libscifileio_la-sci_getURLcontent.lo -MD -MP -MF $(DEPDIR)/libscifileio_la-sci_getURLcontent.Tpo -c -o libscifileio_la-sci_getURLcontent.lo `test -f 'sci_gateway/c/sci_getURLcontent.c' || echo '$(srcdir)/'`sci_gateway/c/sci_getURLcontent.c
-@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libscifileio_la-sci_getURLcontent.Tpo $(DEPDIR)/libscifileio_la-sci_getURLcontent.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='sci_gateway/c/sci_getURLcontent.c' object='libscifileio_la-sci_getURLcontent.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscifileio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libscifileio_la-sci_getURLcontent.lo `test -f 'sci_gateway/c/sci_getURLcontent.c' || echo '$(srcdir)/'`sci_gateway/c/sci_getURLcontent.c
-
 libscifileio_la-sci_splitURL.lo: sci_gateway/c/sci_splitURL.c
 @am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscifileio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libscifileio_la-sci_splitURL.lo -MD -MP -MF $(DEPDIR)/libscifileio_la-sci_splitURL.Tpo -c -o libscifileio_la-sci_splitURL.lo `test -f 'sci_gateway/c/sci_splitURL.c' || echo '$(srcdir)/'`sci_gateway/c/sci_splitURL.c
 @am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libscifileio_la-sci_splitURL.Tpo $(DEPDIR)/libscifileio_la-sci_splitURL.Plo
index 95c40fe..167a83b 100644 (file)
@@ -201,7 +201,6 @@ lib /DEF:"$(ProjectDir)Console_Import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platfor
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClCompile Include="sci_gateway\c\sci_getURL.c" />
-    <ClCompile Include="sci_gateway\c\sci_getURLcontent.c" />
     <ClCompile Include="sci_gateway\c\sci_splitURL.c" />
     <ClCompile Include="sci_gateway\c\sci_tempname.c" />
     <ClCompile Include="src\c\addfile.c" />
index 536fbd4..513f973 100644 (file)
     <ClCompile Include="sci_gateway\c\sci_getURL.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="sci_gateway\c\sci_getURLcontent.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
     <ClCompile Include="sci_gateway\c\sci_splitURL.c">
       <Filter>Source Files</Filter>
     </ClCompile>
index dff6d6f..3eb3210 100644 (file)
@@ -29,8 +29,8 @@
         <title>Calling Sequence</title>
         
         <synopsis>filename = getURL(URL);
-            filename = getURL(URL [, targetDir [, username [, password]]]]);
-            filename = getURL(URL [, targetFile [, username [, password]]]]);
+            [filename, [content]] = getURL(URL [, targetDir [, username [, password]]]]);
+            [filename, [content]] = getURL(URL [, targetFile [, username [, password]]]]);
         </synopsis>
     </refsynopsisdiv>
     
                     <para>String: The path to the downloaded file</para>
                 </listitem>
             </varlistentry>
+            <varlistentry>
+                <term>content</term>
+                <listitem>
+                    <para>String: The content to the downloaded file</para>
+                </listitem>
+            </varlistentry>
         </variablelist>
     </refsection>
     
@@ -85,6 +91,8 @@
             getURL will download a file from a remote URL. By default, getURL will use the same name as provided in the URL. However, under some circumstances (for example, <emphasis role="italic">http://www.scilab.org/</emphasis>), the filename is not provided by the URL itself, getURL will rename the file to <emphasis role="italic">index.html</emphasis>
         </para>
         
+        <para>content contains the content of a page pointed by an URL.</para>
+        
         <para>
             This function is based on the <ulink url="http://curl.haxx.se/libcurl/">curl library</ulink>.
         </para>
             // Needs IPv6 connectivity
             getURL("http://ipv6.google.com/intl/en_com/images/srpr/logo3w.png")
             
+            // Retrieve the content
+            [myFile, content] = getURL("http://fileexchange.scilab.org/toolboxes/contour3d/10.03/files/contour3d.sci",TMPDIR)
         </programlisting>
     </refsection>
     <refsection role="see also">
         <title>See Also</title>
         <simplelist type="inline">
             <member>
-                <link linkend="getURLcontent">getURLcontent</link>
-            </member>
-            <member>
                 <link linkend="splitURL">splitURL</link>
             </member>
         </simplelist>
diff --git a/scilab/modules/fileio/help/en_US/getURLcontent.xml b/scilab/modules/fileio/help/en_US/getURLcontent.xml
deleted file mode 100644 (file)
index e3c32cd..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) - S/E - Sylvestre Ledru
- * 
- * This file must be used under the terms of the CeCILL.
- * This source file is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at
- * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- *
- -->
-<refentry xml:id="getURLcontent" xml:lang="en"
-          xmlns="http://docbook.org/ns/docbook"
-          xmlns:xlink="http://www.w3.org/1999/xlink"
-          xmlns:svg="http://www.w3.org/2000/svg"
-          xmlns:ns3="http://www.w3.org/1999/xhtml"
-          xmlns:mml="http://www.w3.org/1998/Math/MathML"
-          xmlns:scilab="http://www.scilab.org"
-          xmlns:db="http://docbook.org/ns/docbook">
-    
-    <refnamediv>
-        <refname>getURLcontent</refname>
-        
-        <refpurpose>Return the content of an URL (HTTP, HTTPS, FTP...) </refpurpose>
-    </refnamediv>
-    
-    <refsynopsisdiv>
-        <title>Calling Sequence</title>
-        
-        <synopsis>output = getURLcontent(URL [, username, [, password]]);
-        </synopsis>
-    </refsynopsisdiv>
-    
-    <refsection>
-        <title>Arguments</title>
-        <variablelist>
-            <varlistentry>
-                <term>URL</term>
-                <listitem>
-                    <para>String: An URL. Supported and tested: HTTP, HTTPS, FTP (IPv4 and IPv6)</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>username</term>
-                <listitem>
-                    <para>String optional parameter: Username for the websites which require authentication</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>password</term>
-                <listitem>
-                    <para>String optional parameter: Password for the websites which require authentication</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>output</term>
-                <listitem>
-                    <para>String: containing the content pointed by the URL</para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    
-    <refsection>
-        <title>Description</title>
-        
-        <para>Retrieve the content of a page pointed by an URL</para>
-        
-        <para>getURLcontent will download the content of remote URL.</para>
-        
-        <para>
-            This function is based on the <ulink url="http://curl.haxx.se/libcurl/">curl library</ulink>.
-        </para>
-        
-        <para> Username and Password can be specified for the websites which required authentication. The authentication method used is the CURLAUTH_ANY provided by CURLOPT_HTTPAUTH parameter of the libcurl library.</para>
-        
-        <para>IPv6 (and obviously IPv4) are supported out-of-the box by getURLcontent.</para>
-        
-        <para>Proxy configuration is enabled in this version. It uses the ATOMS proxy parameters.</para>
-        
-        <para>
-            The <emphasis role="italic">CURLOPT_FOLLOWLOCATION</emphasis> curl option is activated to make sure the download follow the URL.
-        </para>
-        
-        <para>
-            <literal>getURLcontent</literal> is based on libcurl. The version of this library in the official Scilab binary has been compiled with HTTP, HTTPS, FTP and FTPS support. If Scilab has been installed through a packaging system in a distribution, it is likely that <ulink url="http://curl.haxx.se/docs/features.html">other protocols</ulink> than HTTP, HTTPS and FTPS will work. However, they have not been tested enough.
-        </para>
-        
-    </refsection>
-    
-    <refsection>
-        <title>Examples</title>
-        
-        <programlisting role="example">
-            // Get the content of google homepage with HTTPS
-            getURLcontent("https://encrypted.google.com")
-            
-            
-            // Download a readme file from a ftp
-            getURLcontent("ftp://ftp.free.fr/pub/Distributions_Linux/debian/README")
-            
-            // Use authentication
-            getURLcontent("http://httpbin.org/basic-auth/user/passwd","user","passwd")
-            
-            getURLcontent("http://fileexchange.scilab.org/toolboxes/161000/1.0/files/cshift.sci")
-        </programlisting>
-        <!-- 
-// This example fails for now (probably a bug on evstr)
-// Retrieve the content and execute it
-content=getURLcontent("http://fileexchange.scilab.org/toolboxes/161000/1.0/files/cshift.sci")
-evstr(content);
-M = grand(3,4,"uin",0,9);
-cshift(M,1);
--->
-        
-    </refsection>
-    
-    <refsection role="see also">
-        <title>See Also</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="getURL">getURL</link>
-            </member>
-            <member>
-                <link linkend="splitURL">splitURL</link>
-            </member>
-        </simplelist>
-    </refsection>
-    
-</refentry>
index 5f50b8c..5d73cb4 100644 (file)
         <!-- 
 // This example fails for now (probably a bug on evstr)
 // Retrieve the content and execute it
-content=getURLcontent("http://fileexchange.scilab.org/toolboxes/161000/1.0/files/cshift.sci")
+[f,content]=getURL("http://fileexchange.scilab.org/toolboxes/161000/1.0/files/cshift.sci")
 evstr(content);
 M = grand(3,4,"uin",0,9);
 cshift(M,1);
@@ -141,9 +141,6 @@ cshift(M,1);
             <member>
                 <link linkend="getURL">getURL</link>
             </member>
-            <member>
-                <link linkend="getURLcontent">getURLcontent</link>
-            </member>
         </simplelist>
     </refsection>
 </refentry>
index c5a8c18..d45e30a 100644 (file)
@@ -62,7 +62,6 @@ int sci_mgetl(char *fname, unsigned long fname_len);
 int sci_mputl(char *fname, unsigned long fname_len);
 int sci_tempname(char *fname, unsigned long fname_len);
 int sci_getURL(char *fname, unsigned long fname_len);
-int sci_getURLcontent(char *fname, unsigned long fname_len);
 int sci_splitURL(char *fname, unsigned long fname_len);
 /*--------------------------------------------------------------------------*/
 #endif /* __GW_FILEIO_H__ */
index 230e885..1a7c13b 100644 (file)
@@ -67,7 +67,6 @@ static gw_generic_table Tab[] =
     {sci_mputl, "mputl"},
     {sci_tempname, "tempname"},
     {sci_getURL, "getURL"},
-    {sci_getURLcontent, "getURLcontent"},
     {sci_splitURL, "splitURL"}
 };
 /*--------------------------------------------------------------------------*/
index 9508f1f..56965cb 100644 (file)
 #include "dlManager.h"
 #include "localization.h"
 /* ==================================================================== */
-static void freeAllocatedStrings(char *url, char *dest, char *username, char *password)
-{
-    if (url != NULL)
-    {
-        freeAllocatedSingleString(url);
-    }
-
-    if (dest != NULL)
-    {
-        freeAllocatedSingleString(dest);
-    }
-
-    if (username != NULL)
-    {
-        freeAllocatedSingleString(username);
-    }
-
-    if (password != NULL)
-    {
-        freeAllocatedSingleString(password);
-    }
-}
-
+static void freeAllocatedStrings(char *url, char *dest, char *username, char *password, char* content);
 /* ==================================================================== */
 int sci_getURL(char *fname, int fname_len)
 {
@@ -51,6 +29,7 @@ int sci_getURL(char *fname, int fname_len)
     char *dest = NULL;
     char *username = NULL;
     char *password = NULL;
+    char *content = NULL;
 
     int iRows = 0, iCols = 0;
     int iType = 0;
@@ -61,7 +40,7 @@ int sci_getURL(char *fname, int fname_len)
     int iRhs = nbInputArgument(pvApiCtx);
 
     CheckInputArgument(pvApiCtx, 1, 4);
-    CheckOutputArgument(pvApiCtx, 0, 1);
+    CheckOutputArgument(pvApiCtx, 0, 2);
 
 
     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
@@ -75,7 +54,7 @@ int sci_getURL(char *fname, int fname_len)
     if (ret)
     {
         Scierror(999, _("%s: Wrong type for argument %d: A string expected.\n"), fname, 1);
-        freeAllocatedStrings(url, dest, username, password);
+        freeAllocatedStrings(url, dest, username, password, content);
         return 0;
     }
 
@@ -88,7 +67,7 @@ int sci_getURL(char *fname, int fname_len)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
-            freeAllocatedStrings(url, dest, username, password);
+            freeAllocatedStrings(url, dest, username, password, content);
             return 0;
         }
 
@@ -96,7 +75,7 @@ int sci_getURL(char *fname, int fname_len)
         if (ret)
         {
             Scierror(999, _("%s: Wrong type for argument %d: A string expected.\n"), fname, 2);
-            freeAllocatedStrings(url, dest, username, password);
+            freeAllocatedStrings(url, dest, username, password, content);
             return 0;
         }
 
@@ -110,7 +89,7 @@ int sci_getURL(char *fname, int fname_len)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
-            freeAllocatedStrings(url, dest, username, password);
+            freeAllocatedStrings(url, dest, username, password, content);
             return 0;
         }
 
@@ -118,7 +97,7 @@ int sci_getURL(char *fname, int fname_len)
         if (ret)
         {
             Scierror(999, _("%s: Wrong type for argument %d: A string expected.\n"), fname, 3);
-            freeAllocatedStrings(url, dest, username, password);
+            freeAllocatedStrings(url, dest, username, password, content);
             return 0;
         }
 
@@ -133,7 +112,7 @@ int sci_getURL(char *fname, int fname_len)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
-            freeAllocatedStrings(url, dest, username, password);
+            freeAllocatedStrings(url, dest, username, password, content);
             return 0;
         }
 
@@ -141,7 +120,7 @@ int sci_getURL(char *fname, int fname_len)
         if (ret)
         {
             Scierror(999, _("%s: Wrong type for argument %d: A string expected.\n"), fname, 4);
-            freeAllocatedStrings(url, dest, username, password);
+            freeAllocatedStrings(url, dest, username, password, content);
             return 0;
         }
 
@@ -169,7 +148,7 @@ int sci_getURL(char *fname, int fname_len)
     }
 
     // call function
-    filePath = downloadFile(url, dest, username, password);
+    filePath = downloadFile(url, dest, username, password, &content);
     if (filePath != NULL)
     {
         //create new variable
@@ -179,13 +158,57 @@ int sci_getURL(char *fname, int fname_len)
         if (ret)
         {
             Scierror(999, _("%s: Could not create the output argument.\n"));
-            freeAllocatedStrings(url, dest, username, password);
+            freeAllocatedStrings(url, dest, username, password, content);
+            return 0;
+        }
+    }
+    // call function
+    /* Return the second argument which is the content */
+    if (content != NULL && nbOutputArgument(pvApiCtx) == 2)
+    {
+        //create new variable with the content
+        int res = createSingleString(pvApiCtx, iRhs + 2, content);
+        FREE(content);
+        content = NULL;
+        if (res)
+        {
+            Scierror(999, _("%s: Could not create the output argument.\n"));
+            freeAllocatedStrings(url, dest, username, password, content);
             return 0;
         }
     }
 
     AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
+    AssignOutputVariable(pvApiCtx, 2) = iRhs + 2;
     ReturnArguments(pvApiCtx);
     return 0;
 }
+/* ==================================================================== */
+static void freeAllocatedStrings(char *url, char *dest, char *username, char *password, char* content)
+{
+    if (url != NULL)
+    {
+        freeAllocatedSingleString(url);
+    }
+
+    if (dest != NULL)
+    {
+        freeAllocatedSingleString(dest);
+    }
+
+    if (username != NULL)
+    {
+        freeAllocatedSingleString(username);
+    }
+
+    if (password != NULL)
+    {
+        freeAllocatedSingleString(password);
+    }
+
+    if (content != NULL)
+    {
+        freeAllocatedSingleString(content);
+    }
+}
 
diff --git a/scilab/modules/fileio/sci_gateway/c/sci_getURLcontent.c b/scilab/modules/fileio/sci_gateway/c/sci_getURLcontent.c
deleted file mode 100644 (file)
index f4c95a4..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2011 - DIGITEO - Sylvestre LEDRU
- *
- * This file must be used under the terms of the CeCILL.
- * This source file is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at
- * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- *
- */
-#include <stdio.h>
-#include "sciprint.h"
-#include "api_scilab.h"
-#include "Scierror.h"
-#include "MALLOC.h"
-#include "dlManager.h"
-#include "localization.h"
-/* ==================================================================== */
-static void freeAllocatedStrings(char *url, char *username, char *password)
-{
-    if (url != NULL)
-    {
-        freeAllocatedSingleString(url);
-    }
-
-    if (username != NULL)
-    {
-        freeAllocatedSingleString(username);
-    }
-
-    if (password != NULL)
-    {
-        freeAllocatedSingleString(password);
-    }
-}
-/* ==================================================================== */
-int sci_getURLcontent(char *fname, int fname_len)
-{
-    SciErr sciErr;
-    int length = 0;
-
-    int *piAddr = NULL;
-    char *url = NULL;
-    char *username = NULL;
-    char *password = NULL;
-
-    int iRows = 0, iCols = 0;
-    int iType = 0;
-    int *piAddressVarOne = NULL;
-    int ret = 0;
-    char *content = NULL;
-
-    int iRhs = nbInputArgument(pvApiCtx);
-
-    CheckInputArgument(pvApiCtx, 1, 3);
-    CheckOutputArgument(pvApiCtx, 0, 1);
-
-    sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
-    if (sciErr.iErr)
-    {
-        printError(&sciErr, 0);
-        return 0;
-    }
-
-    ret = getAllocatedSingleString(pvApiCtx, piAddressVarOne, &url);
-    if (ret)
-    {
-        Scierror(999, _("%s: Wrong type for argument %d: A string expected.\n"), fname, 1);
-        freeAllocatedStrings(url, username, password);
-        return 0;
-    }
-
-    if (iRhs > 1)
-    {
-        /* Specify the username */
-        int *piAddressVarTwo = NULL;
-
-        sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddressVarTwo);
-        if (sciErr.iErr)
-        {
-            printError(&sciErr, 0);
-            freeAllocatedStrings(url, username, password);
-            return 0;
-        }
-
-        ret = getAllocatedSingleString(pvApiCtx, piAddressVarTwo, &username);
-        if (ret)
-        {
-            Scierror(999, _("%s: Wrong type for argument %d: A string expected.\n"), fname, 2);
-            freeAllocatedStrings(url, username, password);
-            return 0;
-        }
-    }
-
-    if (iRhs > 2)
-    {
-        /* Specify the password */
-        int *piAddressVarThree = NULL;
-
-        sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddressVarThree);
-        if (sciErr.iErr)
-        {
-            printError(&sciErr, 0);
-            freeAllocatedStrings(url, username, password);
-            return 0;
-        }
-
-        ret = getAllocatedSingleString(pvApiCtx, piAddressVarThree, &password);
-        if (ret)
-        {
-            Scierror(999, _("%s: Wrong type for argument %d: A string expected.\n"), fname, 3);
-            freeAllocatedStrings(url, username, password);
-            return 0;
-        }
-
-    }
-
-    /* Set to NULL if 0 length strings */
-    if (url != NULL && strlen(url) == 0)
-    {
-        url = NULL;
-    }
-
-    if (username != NULL && strlen(username) == 0)
-    {
-        username = NULL;
-    }
-
-    if (password != NULL && strlen(password) == 0)
-    {
-        password = NULL;
-    }
-
-
-    // call function
-    content = downloadContent(url, username, password);
-    if (content != NULL)
-    {
-        //create new variable
-        int res = createSingleString(pvApiCtx, iRhs + 1, content);
-        FREE(content);
-        content = NULL;
-        if (res)
-        {
-            Scierror(999, _("%s: Could not create the output argument.\n"));
-            freeAllocatedStrings(url, username, password);
-            return 0;
-        }
-    }
-
-    AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
-    ReturnArguments(pvApiCtx);
-    return 0;
-}
-/* ==================================================================== */
index 7c91378..ca60898 100644 (file)
@@ -80,6 +80,5 @@
     <PRIMITIVE gatewayId="34" primitiveId="45" primitiveName="mputl" />
     <PRIMITIVE gatewayId="34" primitiveId="46" primitiveName="tempname" />
     <PRIMITIVE gatewayId="34" primitiveId="47" primitiveName="getURL" />
-    <PRIMITIVE gatewayId="34" primitiveId="48" primitiveName="getURLcontent" />
-    <PRIMITIVE gatewayId="34" primitiveId="49" primitiveName="splitURL" />
+    <PRIMITIVE gatewayId="34" primitiveId="48" primitiveName="splitURL" />
 </GATEWAY>
index fa222e7..3d8d436 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2012 - S/E - Sylvestre LEDRU
+ * Copyright (C) 2012-2013 - S/E - Sylvestre LEDRU
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
@@ -289,7 +289,7 @@ int getProxyValues(char **proxyHost, long *proxyPort, char **proxyUserPwd)
     return useproxy;
 }
 /* ==================================================================== */
-char *downloadFile(char *url, char *dest, char *username, char *password)
+char *downloadFile(char *url, char *dest, char *username, char *password, char **content)
 {
     CURL *curl;
     CURLcode res;
@@ -301,6 +301,10 @@ char *downloadFile(char *url, char *dest, char *username, char *password)
     {
         FILE *file;
 
+        struct inputString buffer;
+
+        init_string(&buffer);
+
         if (dest == NULL)
         {
             /* No second argument provided */
@@ -372,7 +376,7 @@ char *downloadFile(char *url, char *dest, char *username, char *password)
                 Scierror(999, _("Failed to set user:pwd [%s]\n"), errorBuffer);
                 return NULL;
             }
-        }
+        } /* end authentication section */
 
         {
             //Set proxy variables
@@ -408,17 +412,18 @@ char *downloadFile(char *url, char *dest, char *username, char *password)
                 }
 
             }
-        }
+        } /* end of the set of the proxy */
+
+        res = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
 
-        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite);
         if (res != CURLE_OK)
         {
             Scierror(999, _("Failed to set write data [%s]\n"), errorBuffer);
             return NULL;
         }
 
-        //Get data to be written to file
-        res = curl_easy_setopt(curl, CURLOPT_WRITEDATA, file);
+        //Get data to be written to the variable
+        res = curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
         if (res != CURLE_OK)
         {
             Scierror(999, _("Failed to set write data [%s]\n"), errorBuffer);
@@ -436,6 +441,12 @@ char *downloadFile(char *url, char *dest, char *username, char *password)
             return NULL;
         }
 
+        /* Write the file */
+        fwrite(buffer.ptr, sizeof(char), buffer.len, file);
+
+        /* Create the variable which contains the output argument */
+        *content = buffer.ptr;
+
         /* always cleanup */
         curl_easy_cleanup(curl);
 
@@ -451,136 +462,6 @@ char *downloadFile(char *url, char *dest, char *username, char *password)
     return NULL;
 }
 /* ==================================================================== */
-char *downloadContent(char *url, char *username, char *password)
-{
-    CURL *curl = NULL;
-    CURLcode res;
-
-    char *proxyHost = NULL;
-    char *proxyUserPwd = NULL;
-    long proxyPort = 1080;
-    int proxySet = 0;
-
-    curl = curl_easy_init();
-
-    if (curl)
-    {
-
-        struct inputString buffer;
-
-        init_string(&buffer);
-        res = curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
-        if (res != CURLE_OK)
-        {
-            Scierror(999, "Failed to set error buffer [%d]\n", res);
-            return NULL;
-        }
-
-        res = curl_easy_setopt(curl, CURLOPT_URL, url);
-        if (res != CURLE_OK)
-        {
-            Scierror(999, "Failed to set URL [%s]\n", errorBuffer);
-            return NULL;
-        }
-
-        //Set authentication variables
-        if (username != NULL)
-        {
-            char * userpass;
-            int uplen = (int)strlen(username);
-            if (password != NULL)
-            {
-                uplen = uplen + (int)strlen(password);
-            }
-
-            userpass = (char *)MALLOC((uplen + 2) * sizeof(char));
-            strcpy(userpass, username);
-            strcat(userpass, ":");
-            if (password != NULL)
-            {
-                strcat(userpass, password);
-            }
-
-            res = curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
-            if (res != CURLE_OK)
-            {
-                Scierror(999, "Failed to set httpauth type to ANY [%s]\n", errorBuffer);
-                return NULL;
-            }
-            res = curl_easy_setopt(curl, CURLOPT_USERPWD, userpass);
-            if (res != CURLE_OK)
-            {
-                Scierror(999, _("Failed to set user:pwd [%s]\n"), errorBuffer);
-                return NULL;
-            }
-        }
-
-        //Set proxy variables
-
-        proxySet = getProxyValues(&proxyHost, &proxyPort, &proxyUserPwd);
-        if (proxySet == 1)
-        {
-            res = curl_easy_setopt(curl, CURLOPT_PROXY, proxyHost);
-            if (res != CURLE_OK)
-            {
-                Scierror(999, _("Failed to set proxy host [%s]\n"), errorBuffer);
-                return NULL;
-            }
-            curl_easy_setopt(curl, CURLOPT_PROXYPORT, proxyPort);
-            if (res != CURLE_OK)
-            {
-                Scierror(999, _("Failed to set proxy port [%s]\n"), errorBuffer);
-                return NULL;
-            }
-            if (proxyUserPwd != NULL)
-            {
-                res = curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxyUserPwd);
-                if (res != CURLE_OK)
-                {
-                    Scierror(999, _("Failed to set proxy user:password [%s]\n"), errorBuffer);
-                    return NULL;
-                }
-            }
-
-        }
-
-        res = curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
-        if (res != CURLE_OK)
-        {
-            Scierror(999, _("Failed to set write data [%s]\n"), errorBuffer);
-            return NULL;
-        }
-
-        res = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
-        if (res != CURLE_OK)
-        {
-            Scierror(999, _("Failed to set write data [%s]\n"), errorBuffer);
-            return NULL;
-        }
-
-        // Follow redirects
-        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
-
-        res = curl_easy_perform(curl);
-        if (res != 0)
-        {
-            Scierror(999, _("Transfer did not complete successfully: %s\n"), errorBuffer);
-            return NULL;
-        }
-
-        /* always cleanup */
-        curl_easy_cleanup(curl);
-
-        return buffer.ptr;
-    }
-    else
-    {
-        Scierror(999, "Failed opening the curl handle.\n");
-        return NULL;
-    }
-    return NULL;
-}
-/* ==================================================================== */
 static char *Curl_basename(char *path)
 {
     char *s1 = NULL;
index 246833f..ee9cc49 100644 (file)
  * @param[in] dest where to save the file
  * @return the file pointer
 */
-char *downloadFile(char *url, char *dest, char *username, char *password);
-
-/**
- * Download the content of an URL
- * @param[in] Url the location
- * @return the content
- */
-char *downloadContent(char *url, char *username, char *password);
+char *downloadFile(char *url, char *dest, char *username, char *password, char **content);
 
 #endif /* __DLMANAGER_H__ */
index 59f865d..6f38c12 100644 (file)
@@ -65,3 +65,40 @@ mclose(f1);
 
 // Badly formated URL
 assert_checkerror("getURL(''http://plop@ae:www.scilab.org:80'');", [], 999);
+
+[f, HTMLContent]=getURL("http://www.scilab.org:80");
+assert_checktrue(length(HTMLContent) > 10);
+assert_checktrue(grep(HTMLContent,"html") <> []);
+
+[f, HTMLContent]=getURL("http://plop:ae@www.scilab.org:80");
+assert_checktrue(length(HTMLContent) > 10);
+assert_checktrue(grep(HTMLContent,"html") <> []);
+
+[f, HTMLContent]=getURL("http://www.scilab.org/aze");
+assert_checktrue(length(HTMLContent) > 10);
+assert_checkequal(grep(HTMLContent,"404"), []);
+
+
+
+[f, HTMLContent]=getURL("http://www.scilab.org");
+assert_checktrue(length(HTMLContent) > 10);
+assert_checktrue(grep(HTMLContent,"html") <> []);
+
+[f, HTMLContent]=getURL("http://www.scilab.org/");
+assert_checktrue(length(HTMLContent) > 10);
+assert_checktrue(grep(HTMLContent,"html") <> []);
+
+[f, HTMLContent]=getURL("ftp://ftp.free.fr/pub/Distributions_Linux/debian/README");
+assert_checktrue(length(HTMLContent) > 0);
+assert_checktrue(grep(HTMLContent,"Linux") <> []);
+
+// HTTPS
+[f, HTMLContent]=getURL("https://encrypted.google.com");
+assert_checktrue(length(HTMLContent) > 100);
+
+[f, HTMLContent]=getURL("http://httpbin.org/basic-auth/user/passwd","user","passwd");
+assert_checktrue(length(HTMLContent) > 10);
+assert_checktrue(grep(HTMLContent,"authenticated") <> []);
+
+// Badly formated URL
+assert_checkerror("getURL(''http://plop@ae:www.scilab.org:80'');", [], 999);
index 9caa503..db6d8ba 100644 (file)
@@ -5,41 +5,41 @@
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 
-//getURLcontent
+//getURL
 
-HTMLContent=getURLcontent("http://www.scilab.org:80");
+[f, HTMLContent]=getURL("http://www.scilab.org:80");
 assert_checktrue(length(HTMLContent) > 10);
 assert_checktrue(grep(HTMLContent,"html") <> []);
 
-HTMLContent=getURLcontent("http://plop:ae@www.scilab.org:80");
+[f, HTMLContent]=getURL("http://plop:ae@www.scilab.org:80");
 assert_checktrue(length(HTMLContent) > 10);
 assert_checktrue(grep(HTMLContent,"html") <> []);
 
-HTMLContent=getURLcontent("http://www.scilab.org/aze");
+[f, HTMLContent]=getURL("http://www.scilab.org/aze");
 assert_checktrue(length(HTMLContent) > 10);
 assert_checkequal(grep(HTMLContent,"404"), []);
 
 
 
-HTMLContent=getURLcontent("http://www.scilab.org");
+[f, HTMLContent]=getURL("http://www.scilab.org");
 assert_checktrue(length(HTMLContent) > 10);
 assert_checktrue(grep(HTMLContent,"html") <> []);
 
-HTMLContent=getURLcontent("http://www.scilab.org/");
+[f, HTMLContent]=getURL("http://www.scilab.org/");
 assert_checktrue(length(HTMLContent) > 10);
 assert_checktrue(grep(HTMLContent,"html") <> []);
 
-HTMLContent=getURLcontent("ftp://ftp.free.fr/pub/Distributions_Linux/debian/README");
+[f, HTMLContent]=getURL("ftp://ftp.free.fr/pub/Distributions_Linux/debian/README");
 assert_checktrue(length(HTMLContent) > 0);
 assert_checktrue(grep(HTMLContent,"Linux") <> []);
 
 // HTTPS
-HTMLContent=getURLcontent("https://encrypted.google.com");
+[f, HTMLContent]=getURL("https://encrypted.google.com");
 assert_checktrue(length(HTMLContent) > 100);
 
-HTMLContent=getURLcontent("http://httpbin.org/basic-auth/user/passwd","user","passwd");
+[f, HTMLContent]=getURL("http://httpbin.org/basic-auth/user/passwd","user","passwd");
 assert_checktrue(length(HTMLContent) > 10);
 assert_checktrue(grep(HTMLContent,"authenticated") <> []);
 
 // Badly formated URL
-assert_checkerror("getURLcontent(''http://plop@ae:www.scilab.org:80'');", [], 999);
+assert_checkerror("getURL(''http://plop@ae:www.scilab.org:80'');", [], 999);