/**************************************************************************** * apps/include/netutils/curl4nx.h * * This file is part of the NuttX RTOS: * * Copyright (C) 2019 Sebastien Lorquet. All rights reserved. * Author: Sebastien Lorquet * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. 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. * 3. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE 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. * ****************************************************************************/ #ifndef __APPS_INCLUDE_NETUTILS_CURL4NX_H #define __APPS_INCLUDE_NETUTILS_CURL4NX_H /**************************************************************************** * Included Files ****************************************************************************/ #include /**************************************************************************** * Public Defines ****************************************************************************/ enum curl4nxerrors_e { CURL4NXE_OK, CURL4NXE_UNSUPPORTED_PROTOCOL, CURL4NXE_FAILED_INIT, CURL4NXE_URL_MALFORMAT, CURL4NXE_NOT_BUILT_IN, CURL4NXE_COULDNT_RESOLVE_HOST, CURL4NXE_COULDNT_CONNECT, CURL4NXE_HTTP2, CURL4NXE_PARTIAL_FILE, CURL4NXE_HTTP_RETURNED_ERROR, CURL4NXE_WRITE_ERROR, CURL4NXE_UPLOAD_FAILED, CURL4NXE_READ_ERROR, CURL4NXE_OUT_OF_MEMORY, CURL4NXE_OPERATION_TIMEDOUT, CURL4NXE_RANGE_ERROR, CURL4NXE_HTTP_POST_ERROR, CURL4NXE_SSL_CONNECT_ERROR, CURL4NXE_BAD_DOWNLOAD_RESUME, CURL4NXE_FUNCTION_NOT_FOUND, CURL4NXE_ABORTED_BY_CALLBACK, CURL4NXE_BAD_FUNCTION_ARGUMENT, CURL4NXE_TOO_MANY_REDIRECTS, CURL4NXE_UNKNOWN_OPTION, CURL4NXE_GOT_NOTHING, CURL4NXE_SEND_ERROR, CURL4NXE_RECV_ERROR, CURL4NXE_SSL_CERTPROBLEM, CURL4NXE_SSL_CIPHER, CURL4NXE_PEER_FAILED_VERIFICATION, CURL4NXE_BAD_CONTENT_ENCODING, CURL4NXE_LOGIN_DENIED, CURL4NXE_REMOTE_DISK_FULL, CURL4NXE_REMOTE_FILE_EXISTS, CURL4NXE_SSL_CACERT_BADFILE, CURL4NXE_REMOTE_FILE_NOT_FOUND, CURL4NXE_AGAIN, CURL4NXE_SSL_ISSUER_ERROR, CURL4NXE_CHUNK_FAILED, CURL4NXE_SSL_PINNEDPUBKEYNOTMATCH, CURL4NXE_SSL_INVALIDCERTSTATUS, CURL4NXE_HTTP2_STREAM, CURL4NXE_RECURSIVE_API_CALL, }; enum curl4nxopt_e { /* Options that are currently implemented */ CURL4NXOPT_URL, CURL4NXOPT_PORT, CURL4NXOPT_BUFFERSIZE, CURL4NXOPT_HEADERFUNCTION, CURL4NXOPT_HEADERDATA, CURL4NXOPT_FAILONERROR, CURL4NXOPT_FOLLOWLOCATION, CURL4NXOPT_MAXREDIRS, CURL4NXOPT_VERBOSE, /* Options that will be implemented */ CURL4NXOPT_HEADER, CURL4NXOPT_NOPROGRESS, CURL4NXOPT_WRITEFUNCTION, CURL4NXOPT_WRITEDATA, CURL4NXOPT_READFUNCTION, CURL4NXOPT_READDATA, CURL4NXOPT_XFERINFOFUNCTION, CURL4NXOPT_XFERINFODATA, CURL4NXOPT_KEEP_SENDING_ON_ERROR, CURL4NXOPT_PATH_AS_IS, CURL4NXOPT_TCP_KEEPALIVE, CURL4NXOPT_TCP_KEEPIDLE, CURL4NXOPT_TCP_KEEPINTVL, CURL4NXOPT_PUT, CURL4NXOPT_POST, CURL4NXOPT_POSTFIELDS, CURL4NXOPT_POSTFIELDSIZE, CURL4NXOPT_COPYPOSTFIELDS, CURL4NXOPT_HTTPPOST, CURL4NXOPT_REFERER, CURL4NXOPT_USERAGENT, CURL4NXOPT_HTTPHEADER, CURL4NXOPT_HEADEROPT, CURL4NXOPT_HTTPGET, CURL4NXOPT_HTTP_VERSION, /* Options that will be implemented later */ CURL4NXOPT_SSL_CTX_FUNCTION, CURL4NXOPT_SSL_CTX_DATA, CURL4NXOPT_USERNAME, CURL4NXOPT_PASSWORD, CURL4NXOPT_HTTPAUTH, CURL4NXOPT_POSTREDIR, CURL4NXOPT_COOKIE, CURL4NXOPT_COOKIEFILE, CURL4NXOPT_COOKIEJAR, CURL4NXOPT_COOKIESESSION, CURL4NXOPT_COOKIELIST, CURL4NXOPT_IGNORE_CONTENT_LENGTH, CURL4NXOPT_RANGE, CURL4NXOPT_RESUME_FROM, CURL4NXOPT_CUSTOMREQUEST, CURL4NXOPT_UPLOAD, CURL4NXOPT_UPLOAD_BUFFERSIZE, CURL4NXOPT_TIMEOUT, CURL4NXOPT_TIMEOUT_MS, CURL4NXOPT_FRESH_CONNECT, CURL4NXOPT_CONNECTTIMEOUT, CURL4NXOPT_CONNECTTIMEOUT_MS, CURL4NXOPT_USE_SSL, CURL4NXOPT_SSLCERT, CURL4NXOPT_SSLKEY, CURL4NXOPT_KEYPASSWD, CURL4NXOPT_SSLVERSION, CURL4NXOPT_SSL_VERIFYHOST, CURL4NXOPT_SSL_VERIFYPEER, CURL4NXOPT_SSL_VERIFYSTATUS, CURL4NXOPT_CAPATH, CURL4NXOPT_PINNEDPUBLICKEY, CURL4NXOPT_RANDOM_FILE, CURL4NXOPT_SSL_CIPHER_LIST, CURL4NXOPT_TLS13_CIPHERS, CURL4NXOPT_SSL_OPTIONS, }; /* For CURL4NXOPT_HTTP_VERSION */ #define CURL4NX_HTTP_VERSION_1_0 0x10 #define CURL4NX_HTTP_VERSION_1_1 0x11 #define CURL4NX_HTTP_VERSION_2_0 0x20 /* Unsupported! */ /**************************************************************************** * Public Types ****************************************************************************/ /**************************************************************************** * Name: curl4nx_iofunction_f * * Description: Type of the callback function used with * CURL4NXOPT_WRITEFUNCTION and CURL4NXOPT_READFUNCTION. * ****************************************************************************/ typedef size_t (*curl4nx_iofunc_f)(FAR char *ptr, size_t size, size_t nmemb, FAR void *userdata); /**************************************************************************** * Name: curl4nx_easy_strerror() * * Description: Return a textual description for an error code. * ****************************************************************************/ typedef int (*curl4nx_xferinfofunc_f)(FAR void *clientp, uint64_t dltotal, uint64_t dlnow, uint64_t ultotal, uint64_t ulnow); #ifdef __cplusplus extern "C" { #endif /**************************************************************************** * Public Function Prototypes ****************************************************************************/ /**************************************************************************** * Name: curl4nx_easy_strerror() * * Description: Return a textual description for an error code. * ****************************************************************************/ FAR const char *curl4nx_easy_strerror(int errornum); /**************************************************************************** * Name: curl4nx_easy_init() * * Description: Initialize a context for curl4nx operations. * ****************************************************************************/ FAR struct curl4nx_s *curl4nx_easy_init(void); /**************************************************************************** * Name: curl4nx_easy_escape() * * Description: Escape an URL to remove any forbidden character. Returned * string MUST be released using free(). * ****************************************************************************/ FAR char *curl4nx_easy_escape(FAR struct curl4nx_s *handle, FAR const char *string, int length); /**************************************************************************** * Name: curl4nx_easy_unescape() * * Description: Unescape an escaped URL to replace all escaped characters. * Returned string MUST be released using free(). * ****************************************************************************/ FAR char *curl4nx_easy_unescape(FAR struct curl4nx_s *handle, FAR const char *url, int inlength, FAR int *outlength); /**************************************************************************** * Name: curl4nx_easy_setopt() * * Description: Define an option in the given curl4nx context. * ****************************************************************************/ int curl4nx_easy_setopt(FAR struct curl4nx_s *handle, int option, FAR void *optionptr); /**************************************************************************** * Name: curl4nx_easy_reset() * * Description: Reset all operations that were set using curl4nx_easy_setopt() * to their default values. * ****************************************************************************/ void curl4nx_easy_reset(FAR struct curl4nx_s *handle); /**************************************************************************** * Name: curl4nx_easy_duphandle() * * Description: Clone the current state of a handle. * ****************************************************************************/ FAR struct curl4nx_s *curl4nx_easy_duphandle(FAR struct curl4nx_s *handle); /**************************************************************************** * Name: curl4nx_easy_perform() * * Description: Perform the http operation that was set up in this curl4nx * context. * ****************************************************************************/ int curl4nx_easy_perform(FAR struct curl4nx_s *handle); /**************************************************************************** * Name: curl4nx_easy_getinfo() * * Description: Get information about the current transfer. * ****************************************************************************/ int curl4nx_easy_getinfo(FAR struct curl4nx_s *handle, int info, FAR void *infoptr); /**************************************************************************** * Name: curl4nx_easy_cleanup() * * Description: Cleanup any resource allocated within a curl4nx context. * ****************************************************************************/ void curl4nx_easy_cleanup(FAR struct curl4nx_s *handle); #ifdef __cplusplus } #endif #endif /* __APPS_INCLUDE_NETUTILS_BASE64_H */