* Contributor(s):
*
* Christopher M. Rienzo <chris@rienzo.com>
+ * Darren Schreiber <d@d-man.org>
*
* Maintainer: Christopher M. Rienzo <chris@rienzo.com>
*
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;
+\r
+ switch_curl_slist_t *headers = NULL; /* optional linked-list of HTTP headers */\r
+ char *ext; /* file extension, used for MIME type identification */\r
+ const char *mime_type = "application/octet-stream";\r
+ char *buf;\r
+\r
CURL *curl_handle = NULL;
long httpRes = 0;
struct stat file_info = {0};
FILE *file_to_put = NULL;
int fd;
-
+\r
+ /* guess what type of mime content this is going to be */\r
+ if ((ext = strrchr(filename, '.'))) {\r
+ ext++;\r
+ if (!(mime_type = switch_core_mime_ext2type(ext))) {\r
+ mime_type = "application/octet-stream";\r
+ }\r
+ }\r
+\r
+ buf = switch_mprintf("Content-Type: %s", mime_type);\r
+ headers = switch_curl_slist_append(headers, buf);\r
+\r
/* 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);
fd = open(filename, O_RDONLY);
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_NOSIGNAL, 1);
+ switch_curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers);\r
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_INFILESIZE_LARGE, (curl_off_t)file_info.st_size);
fclose(file_to_put);
}
+ if (headers) {\r
+ switch_curl_slist_free_all(headers);\r
+ }\r
+\r
+ switch_safe_free(buf);\r
+\r
return status;
}