diff options
Diffstat (limited to 'lib/sendf.c')
-rw-r--r-- | lib/sendf.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/lib/sendf.c b/lib/sendf.c new file mode 100644 index 000000000..387984d9d --- /dev/null +++ b/lib/sendf.c @@ -0,0 +1,115 @@ +/***************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.0 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * The Original Code is Curl. + * + * The Initial Developer of the Original Code is Daniel Stenberg. + * + * Portions created by the Initial Developer are Copyright (C) 1998. + * All Rights Reserved. + * + * ------------------------------------------------------------ + * Main author: + * - Daniel Stenberg <Daniel.Stenberg@haxx.nu> + * + * http://curl.haxx.nu + * + * $Source$ + * $Revision$ + * $Date$ + * $Author$ + * $State$ + * $Locker$ + * + * ------------------------------------------------------------ + ****************************************************************************/ + +#include <stdio.h> +#include <stdarg.h> +#include <stdlib.h> + +#include "setup.h" + +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) +#include <winsock.h> +#endif + +#include <curl/curl.h> +#include "urldata.h" + +#include <curl/mprintf.h> + +/* infof() is for info message along the way */ + +void infof(struct UrlData *data, char *fmt, ...) +{ + va_list ap; + if(data->conf & CONF_VERBOSE) { + va_start(ap, fmt); + fputs("* ", data->err); + vfprintf(data->err, fmt, ap); + va_end(ap); + } +} + +/* failf() is for messages stating why we failed, the LAST one will be + returned for the user (if requested) */ + +void failf(struct UrlData *data, char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + if(data->errorbuffer) + vsprintf(data->errorbuffer, fmt, ap); + else /* no errorbuffer receives this, write to data->err instead */ + vfprintf(data->err, fmt, ap); + va_end(ap); +} + +/* sendf() sends the formated data to the server */ + +int sendf(int fd, struct UrlData *data, char *fmt, ...) +{ + size_t bytes_written; + char *s; + va_list ap; + va_start(ap, fmt); + s = mvaprintf(fmt, ap); + va_end(ap); + if(!s) + return 0; /* failure */ + if(data->conf & CONF_VERBOSE) + fprintf(data->err, "> %s", s); +#ifndef USE_SSLEAY + bytes_written = swrite(fd, s, strlen(s)); +#else + if (data->use_ssl) { + bytes_written = SSL_write(data->ssl, s, strlen(s)); + } else { + bytes_written = swrite(fd, s, strlen(s)); + } +#endif /* USE_SSLEAY */ + free(s); /* free the output string */ + return(bytes_written); +} + + + + |