Added support for Content-Type and other optional headers when doing an HTTP PUT

This commit is contained in:
dschreiber 2012-06-19 21:25:00 -07:00
parent 6ea4a5c503
commit d6c482e40f
1 changed files with 26 additions and 1 deletions

View File

@ -24,6 +24,7 @@
* Contributor(s): * Contributor(s):
* *
* Christopher M. Rienzo <chris@rienzo.com> * Christopher M. Rienzo <chris@rienzo.com>
* Darren Schreiber <d@d-man.org>
* *
* Maintainer: Christopher M. Rienzo <chris@rienzo.com> * Maintainer: Christopher M. Rienzo <chris@rienzo.com>
* *
@ -190,12 +191,29 @@ static void url_cache_clear(url_cache_t *cache, switch_core_session_t *session);
static switch_status_t http_put(url_cache_t *cache, switch_core_session_t *session, const char *url, const char *filename) static switch_status_t http_put(url_cache_t *cache, switch_core_session_t *session, const char *url, const char *filename)
{ {
switch_status_t status = SWITCH_STATUS_SUCCESS; switch_status_t status = SWITCH_STATUS_SUCCESS;
switch_curl_slist_t *headers = NULL; /* optional linked-list of HTTP headers */
char *ext; /* file extension, used for MIME type identification */
const char *mime_type = "application/octet-stream";
char *buf;
CURL *curl_handle = NULL; CURL *curl_handle = NULL;
long httpRes = 0; long httpRes = 0;
struct stat file_info = {0}; struct stat file_info = {0};
FILE *file_to_put = NULL; FILE *file_to_put = NULL;
int fd; int fd;
/* guess what type of mime content this is going to be */
if ((ext = strrchr(filename, '.'))) {
ext++;
if (!(mime_type = switch_core_mime_ext2type(ext))) {
mime_type = "application/octet-stream";
}
}
buf = switch_mprintf("Content-Type: %s", mime_type);
headers = switch_curl_slist_append(headers, buf);
/* open file and get the file size */ /* open file and get the file size */
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "opening %s for upload to %s\n", filename, url); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "opening %s for upload to %s\n", filename, url);
fd = open(filename, O_RDONLY); fd = open(filename, O_RDONLY);
@ -226,6 +244,7 @@ static switch_status_t http_put(url_cache_t *cache, switch_core_session_t *sessi
switch_curl_easy_setopt(curl_handle, CURLOPT_UPLOAD, 1); switch_curl_easy_setopt(curl_handle, CURLOPT_UPLOAD, 1);
switch_curl_easy_setopt(curl_handle, CURLOPT_PUT, 1); switch_curl_easy_setopt(curl_handle, CURLOPT_PUT, 1);
switch_curl_easy_setopt(curl_handle, CURLOPT_NOSIGNAL, 1); switch_curl_easy_setopt(curl_handle, CURLOPT_NOSIGNAL, 1);
switch_curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers);
switch_curl_easy_setopt(curl_handle, CURLOPT_URL, url); switch_curl_easy_setopt(curl_handle, CURLOPT_URL, url);
switch_curl_easy_setopt(curl_handle, CURLOPT_READDATA, file_to_put); switch_curl_easy_setopt(curl_handle, CURLOPT_READDATA, file_to_put);
switch_curl_easy_setopt(curl_handle, CURLOPT_INFILESIZE_LARGE, (curl_off_t)file_info.st_size); switch_curl_easy_setopt(curl_handle, CURLOPT_INFILESIZE_LARGE, (curl_off_t)file_info.st_size);
@ -260,6 +279,12 @@ done:
fclose(file_to_put); fclose(file_to_put);
} }
if (headers) {
switch_curl_slist_free_all(headers);
}
switch_safe_free(buf);
return status; return status;
} }