178 lines
3.9 KiB
C
178 lines
3.9 KiB
C
#include <switch.h>
|
|
#include "switch_curl.h"
|
|
#include <curl/curl.h>
|
|
|
|
SWITCH_DECLARE(switch_CURL *) switch_curl_easy_init(void)
|
|
{
|
|
return curl_easy_init();
|
|
}
|
|
|
|
SWITCH_DECLARE(switch_CURLcode) switch_curl_easy_perform(switch_CURL *handle)
|
|
{
|
|
return curl_easy_perform((CURL *)handle);
|
|
}
|
|
|
|
|
|
SWITCH_DECLARE(switch_CURLcode) switch_curl_easy_getinfo(switch_CURL *curl, switch_CURLINFO info, ... )
|
|
{
|
|
va_list ap;
|
|
switch_CURLcode code;
|
|
|
|
va_start(ap, info);
|
|
code = curl_easy_getinfo(curl, info, va_arg(ap, void *));
|
|
va_end(ap);
|
|
|
|
return code;
|
|
}
|
|
|
|
SWITCH_DECLARE(void) switch_curl_easy_cleanup(switch_CURL *handle)
|
|
{
|
|
curl_easy_cleanup((CURL *)handle);
|
|
}
|
|
|
|
|
|
|
|
SWITCH_DECLARE(switch_curl_slist_t *) switch_curl_slist_append(switch_curl_slist_t * list, const char * string )
|
|
{
|
|
return (switch_curl_slist_t *) curl_slist_append((struct curl_slist *)list, string);
|
|
}
|
|
|
|
|
|
SWITCH_DECLARE(void) switch_curl_slist_free_all(switch_curl_slist_t * list)
|
|
{
|
|
curl_slist_free_all((struct curl_slist *) list);
|
|
}
|
|
|
|
SWITCH_DECLARE(const char *) switch_curl_easy_strerror(switch_CURLcode errornum )
|
|
{
|
|
return curl_easy_strerror(errornum);
|
|
}
|
|
|
|
SWITCH_DECLARE(void) switch_curl_init(void)
|
|
{
|
|
curl_global_init(CURL_GLOBAL_ALL);
|
|
}
|
|
|
|
SWITCH_DECLARE(void) switch_curl_destroy(void)
|
|
{
|
|
curl_global_cleanup();
|
|
}
|
|
|
|
SWITCH_DECLARE(switch_status_t) switch_curl_process_mime(switch_event_t *event, switch_CURL *curl_handle, switch_curl_mime **mimep)
|
|
{
|
|
#if defined(LIBCURL_VERSION_NUM) && (LIBCURL_VERSION_NUM >= 0x073800)
|
|
curl_mime *mime = NULL;
|
|
curl_mimepart *part = NULL;
|
|
uint8_t added = 0;
|
|
#else
|
|
struct curl_httppost *formpost=NULL;
|
|
struct curl_httppost *lastptr=NULL;
|
|
#endif
|
|
switch_event_header_t *hp;
|
|
int go = 0;
|
|
|
|
for (hp = event->headers; hp; hp = hp->next) {
|
|
if (!strncasecmp(hp->name, "attach_file:", 12)) {
|
|
go = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!go) {
|
|
return SWITCH_STATUS_FALSE;
|
|
}
|
|
|
|
#if defined(LIBCURL_VERSION_NUM) && (LIBCURL_VERSION_NUM >= 0x073800)
|
|
mime = curl_mime_init(curl_handle);
|
|
#endif
|
|
|
|
for (hp = event->headers; hp; hp = hp->next) {
|
|
if (!strncasecmp(hp->name, "attach_file:", 12)) {
|
|
char *pname = strdup(hp->name + 12);
|
|
|
|
if (pname) {
|
|
char *fname = strchr(pname, ':');
|
|
|
|
if (fname) {
|
|
*fname++ = '\0';
|
|
|
|
#if defined(LIBCURL_VERSION_NUM) && (LIBCURL_VERSION_NUM >= 0x073800)
|
|
part = curl_mime_addpart(mime);
|
|
curl_mime_name(part, pname);
|
|
curl_mime_filename(part, fname);
|
|
curl_mime_filedata(part, hp->value);
|
|
added++;
|
|
#else
|
|
curl_formadd(&formpost,
|
|
&lastptr,
|
|
CURLFORM_COPYNAME, pname,
|
|
CURLFORM_FILENAME, fname,
|
|
CURLFORM_FILE, hp->value,
|
|
CURLFORM_END);
|
|
#endif
|
|
}
|
|
|
|
free(pname);
|
|
}
|
|
} else {
|
|
#if defined(LIBCURL_VERSION_NUM) && (LIBCURL_VERSION_NUM >= 0x073800)
|
|
part = curl_mime_addpart(mime);
|
|
curl_mime_name(part, hp->name);
|
|
curl_mime_data(part, hp->value, CURL_ZERO_TERMINATED);
|
|
added++;
|
|
#else
|
|
curl_formadd(&formpost,
|
|
&lastptr,
|
|
CURLFORM_COPYNAME, hp->name,
|
|
CURLFORM_COPYCONTENTS, hp->value,
|
|
CURLFORM_END);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
#if defined(LIBCURL_VERSION_NUM) && (LIBCURL_VERSION_NUM >= 0x073800)
|
|
if (!added) {
|
|
curl_mime_free(mime);
|
|
mime = NULL;
|
|
}
|
|
|
|
*mimep = mime;
|
|
#else
|
|
*mimep = formpost;
|
|
#endif
|
|
|
|
return SWITCH_STATUS_SUCCESS;
|
|
}
|
|
|
|
SWITCH_DECLARE(void) switch_curl_mime_free(switch_curl_mime **mimep)
|
|
{
|
|
if (mimep && *mimep) {
|
|
#if defined(LIBCURL_VERSION_NUM) && (LIBCURL_VERSION_NUM >= 0x073800)
|
|
curl_mime_free(*mimep);
|
|
#else
|
|
curl_formfree(*mimep);
|
|
#endif
|
|
mimep = NULL;
|
|
}
|
|
}
|
|
|
|
SWITCH_DECLARE(switch_CURLcode) switch_curl_easy_setopt_mime(switch_CURL *curl_handle, switch_curl_mime *mime)
|
|
{
|
|
#if defined(LIBCURL_VERSION_NUM) && (LIBCURL_VERSION_NUM >= 0x073800)
|
|
return curl_easy_setopt(curl_handle, CURLOPT_MIMEPOST, mime);
|
|
#else
|
|
return curl_easy_setopt(curl_handle, CURLOPT_HTTPPOST, mime);
|
|
#endif
|
|
}
|
|
|
|
/* For Emacs:
|
|
* Local Variables:
|
|
* mode:c
|
|
* indent-tabs-mode:t
|
|
* tab-width:4
|
|
* c-basic-offset:4
|
|
* End:
|
|
* For VIM:
|
|
* vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:
|
|
*/
|