[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnurl] 27/254: examples: ftpuploadfrommem.c
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnurl] 27/254: examples: ftpuploadfrommem.c |
Date: |
Sat, 17 Jun 2017 16:50:59 +0200 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to annotated tag gnurl-7.54.1
in repository gnurl.
commit e7f8ac19458ba92da78a8a24043922141cc68d4a
Author: Daniel Stenberg <address@hidden>
AuthorDate: Tue Apr 25 15:58:51 2017 +0200
examples: ftpuploadfrommem.c
Uploads data to an FTP site, directly from memory.
Closes #1451
---
docs/examples/Makefile.inc | 4 +-
docs/examples/ftpuploadfrommem.c | 124 +++++++++++++++++++++++++++++++++++++++
2 files changed, 126 insertions(+), 2 deletions(-)
diff --git a/docs/examples/Makefile.inc b/docs/examples/Makefile.inc
index 8ce6f57f0..b92ad6bd5 100644
--- a/docs/examples/Makefile.inc
+++ b/docs/examples/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2016, Daniel Stenberg, <address@hidden>, et al.
+# Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -32,7 +32,7 @@ check_PROGRAMS = 10-at-a-time anyauthput cookie_interface
debug fileupload \
imap-list imap-lsub imap-fetch imap-store imap-append imap-examine \
imap-search imap-create imap-delete imap-copy imap-noop imap-ssl \
imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \
- http2-upload http2-serverpush getredirect
+ http2-upload http2-serverpush getredirect ftpuploadfrommem
# These examples require external dependencies that may not be commonly
# available on POSIX systems, so don't bother attempting to compile them here.
diff --git a/docs/examples/ftpuploadfrommem.c b/docs/examples/ftpuploadfrommem.c
new file mode 100644
index 000000000..577d15c1d
--- /dev/null
+++ b/docs/examples/ftpuploadfrommem.c
@@ -0,0 +1,124 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ***************************************************************************/
+/* <DESC>
+ * FTP upload a file from memory
+ * </DESC>
+ */
+#include <stdio.h>
+#include <string.h>
+#include <curl/curl.h>
+
+const char data[]=
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
+ "Nam rhoncus odio id venenatis volutpat. Vestibulum dapibus "
+ "bibendum ullamcorper. Maecenas finibus elit augue, vel "
+ "condimentum odio maximus nec. In hac habitasse platea dictumst. "
+ "Vestibulum vel dolor et turpis rutrum finibus ac at nulla. "
+ "Vivamus nec neque ac elit blandit pretium vitae maximus ipsum. "
+ "Quisque sodales magna vel erat auctor, sed pellentesque nisi "
+ "rhoncus. Donec vehicula maximus pretium. Aliquam eu tincidunt "
+ "lorem. Ut placerat, sem eu pharetra mattis, ante lacus fringilla "
+ "diam, a consequat quam eros eget erat.";
+
+struct WriteThis {
+ const char *readptr;
+ size_t sizeleft;
+};
+
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
+{
+ struct WriteThis *upload = (struct WriteThis *)userp;
+ size_t max = size*nmemb;
+
+ if(max < 1)
+ return 0;
+
+ if(upload->sizeleft) {
+ size_t copylen = max;
+ if(copylen > upload->sizeleft)
+ copylen = upload->sizeleft;
+ memcpy(ptr, upload->readptr, copylen);
+ upload->readptr += copylen;
+ upload->sizeleft -= copylen;
+ return copylen;
+ }
+
+ return 0; /* no more data left to deliver */
+}
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ struct WriteThis upload;
+
+ upload.readptr = data;
+ upload.sizeleft = strlen(data);
+
+ /* In windows, this will init the winsock stuff */
+ res = curl_global_init(CURL_GLOBAL_DEFAULT);
+ /* Check for errors */
+ if(res != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed: %s\n",
+ curl_easy_strerror(res));
+ return 1;
+ }
+
+ /* get a curl handle */
+ curl = curl_easy_init();
+ if(curl) {
+ /* First set the URL, the target file */
+ curl_easy_setopt(curl, CURLOPT_URL,
"ftp://example.com/path/to/upload/file");
+
+ /* User and password for the FTP login */
+ curl_easy_setopt(curl, CURLOPT_USERPWD, "login:secret");
+
+ /* Now specify we want to UPLOAD data */
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+
+ /* we want to use our own read function */
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+
+ /* pointer to pass to our read function */
+ curl_easy_setopt(curl, CURLOPT_READDATA, &upload);
+
+ /* get verbose debug output please */
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* Set the expected upload size. */
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
+ (curl_off_t)upload.sizeleft);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ curl_global_cleanup();
+ return 0;
+}
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [gnurl] annotated tag gnurl-7.54.1 created (now 63a6b023e), gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 01/254: src/Makefile.am: avoid explicit $<, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 05/254: tests: remove the html and PDF versions from the tarball, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 04/254: openssl: fix memory leak in servercert, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 03/254: Revert "src/Makefile.am: avoid explicit $<", gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 27/254: examples: ftpuploadfrommem.c,
gnunet <=
- [GNUnet-SVN] [gnurl] 02/254: bump: start working on next release, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 28/254: url: declare get_protocol_family() static, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 62/254: transfer: fix minor buffer_size mistake, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 40/254: curl_rtmp: fix missing-variable-declarations warnings, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 49/254: getpart: use correct variable type, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 13/254: llist: fix a comment after cbae73e1dd9, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 11/254: multi: clarify condition in curl_multi_wait, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 08/254: llist: no longer uses malloc, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 66/254: krb5: use private buffer for temp string, not receive buffer, gnunet, 2017/06/17
- [GNUnet-SVN] [gnurl] 22/254: curl: set a 100K buffer size by default, gnunet, 2017/06/17