Fix stuff

This commit is contained in:
hax0kartik 2020-04-08 12:52:09 -04:00
parent 64f57aa373
commit 3a8b931cda
4 changed files with 52 additions and 33 deletions

View File

@ -771,9 +771,9 @@ if(HAVE_GNUTLS_GNUTLS_H)
HAVE_DECL_GNUTLS_FINGERPRINT) HAVE_DECL_GNUTLS_FINGERPRINT)
endif(HAVE_GNUTLS_GNUTLS_H) endif(HAVE_GNUTLS_GNUTLS_H)
if(HAVE_MD5_OPENSSL) if(NOT HAVE_DECL_GNUTLS_FINGERPRINT AND HAVE_MD5_OPENSSL)
set(HAVE_DECL_MD5 1) set(HAVE_DECL_MD5 1)
endif(HAVE_MD5_OPENSSL) endif(NOT HAVE_DECL_GNUTLS_FINGERPRINT AND HAVE_MD5_OPENSSL)
if((NOT HAVE_MD5_OPENSSL) AND (NOT HAVE_DECL_GNUTLS_FINGERPRINT)) if((NOT HAVE_MD5_OPENSSL) AND (NOT HAVE_DECL_GNUTLS_FINGERPRINT))
message(AUTHOR_WARNING message(AUTHOR_WARNING

View File

@ -24,6 +24,19 @@
#include "zm_packetqueue.h" #include "zm_packetqueue.h"
/* Func ptrs for libcurl functions */
static void *curl_lib = nullptr;
static CURLcode (*curl_global_init_f)(long) = nullptr;
static void (*curl_global_cleanup_f)(void) = nullptr;
static const char* (*curl_easy_strerror_f)(CURLcode) = nullptr;
static char* (*curl_version_f)(void) = nullptr;
static CURL* (*curl_easy_init_f)(void) = nullptr;
static CURLcode (*curl_easy_getinfo_f)(CURL* , CURLINFO, ...) = nullptr;
static CURLcode (*curl_easy_perform_f)(CURL*) = nullptr;
static CURLcode (*curl_easy_setopt_f)(CURL*, CURLoption, ...) = nullptr;
static void (*curl_easy_cleanup_f)(CURL*) = nullptr;
#if HAVE_LIBCURL #if HAVE_LIBCURL
#define CURL_MAXRETRY 5 #define CURL_MAXRETRY 5
@ -57,15 +70,15 @@ void cURLCamera::Initialise() {
databuffer.expand(CURL_BUFFER_INITIAL_SIZE); databuffer.expand(CURL_BUFFER_INITIAL_SIZE);
void *curl_lib = dlopen("libcurl.so", 0); curl_lib = dlopen("libcurl.so", RTLD_LAZY | RTLD_GLOBAL);
if (!curl_lib) if (!curl_lib)
curl_lib = dlopen("libcurl.so.3", 0); curl_lib = dlopen("libcurl.so.3", RTLD_LAZY | RTLD_GLOBAL);
if (!curl_lib) if (!curl_lib)
curl_lib = dlopen("libcurl.so.4", 0); curl_lib = dlopen("libcurl.so.4", RTLD_LAZY | RTLD_GLOBAL);
if (!curl_lib) if (!curl_lib)
curl_lib = dlopen("libcurl-gnutls.so.4", 0); curl_lib = dlopen("libcurl-gnutls.so.4", RTLD_LAZY | RTLD_GLOBAL);
if (!curl_lib) if (!curl_lib)
Fatal("Could not load libcurl: ", dlerror()); Fatal("Could not load libcurl: %s", dlerror());
// Load up all required symbols here // Load up all required symbols here
*(void**) (&curl_global_init_f) = dlsym(curl_lib, "curl_global_init"); *(void**) (&curl_global_init_f) = dlsym(curl_lib, "curl_global_init");
@ -455,7 +468,7 @@ void* cURLCamera::thread_func() {
/* Authenication preference */ /* Authenication preference */
cRet = (*curl_easy_setopt_f)(c, CURLOPT_HTTPAUTH, CURLAUTH_ANY); cRet = (*curl_easy_setopt_f)(c, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
if(cRet != CURLE_OK) if(cRet != CURLE_OK)
Warning("Failed setting libcurl acceptable http authenication methods: %s", curl_easy_strerror(cRet)); Warning("Failed setting libcurl acceptable http authenication methods: %s", (*curl_easy_strerror_f)(cRet));
/* Work loop */ /* Work loop */
@ -517,7 +530,7 @@ void* cURLCamera::thread_func() {
} }
/* Cleanup */ /* Cleanup */
(*curl_easy_cleanup)(c); (*curl_easy_cleanup_f)(c);
c = NULL; c = NULL;
return (void*)tRet; return (void*)tRet;

View File

@ -97,18 +97,6 @@ size_t data_callback_dispatcher(void *buffer, size_t size, size_t nmemb, void *u
int progress_callback_dispatcher(void *userdata, double dltotal, double dlnow, double ultotal, double ulnow); int progress_callback_dispatcher(void *userdata, double dltotal, double dlnow, double ultotal, double ulnow);
void* thread_func_dispatcher(void* object); void* thread_func_dispatcher(void* object);
/* Func ptrs for libcurl functions */
CURLcode (*curl_global_init_f)(long);
void (*curl_global_cleanup_f)(void);
const char* (*curl_easy_strerror_f)(CURLcode);
char* (*curl_version_f)(void);
CURL* (*curl_easy_init_f)(void);
CURLcode (*curl_easy_getinfo_f)(CURL* , CURLINFO, ...);
CURLcode (*curl_easy_perform_f)(CURL*);
CURLcode (*curl_easy_setopt_f)(CURL*, CURLoption, ...);
void (*curl_easy_cleanup_f)(CURL*);
#endif // HAVE_LIBCURL #endif // HAVE_LIBCURL
#endif // ZM_CURL_CAMERA_H #endif // ZM_CURL_CAMERA_H

View File

@ -403,18 +403,36 @@ char *timeval_to_string( struct timeval tv ) {
} }
std::string UriDecode( const std::string &encoded ) { std::string UriDecode( const std::string &encoded ) {
#ifdef HAVE_LIBCURL char a, b;
CURL *curl = curl_easy_init(); const char *src = encoded.c_str();
int outlength; std::string retbuf;
char *cres = curl_easy_unescape(curl, encoded.c_str(), encoded.length(), &outlength); retbuf.resize(encoded.length() + 1);
std::string res(cres, cres + outlength); char *dst = &retbuf[0];
curl_free(cres); while (*src) {
curl_easy_cleanup(curl); if ((*src == '%') && ((a = src[1]) && (b = src[2])) && (isxdigit(a) && isxdigit(b))) {
return res; if (a >= 'a')
#else a -= 'a'-'A';
Warning("ZM Compiled without LIBCURL. UriDecoding not implemented."); if (a >= 'A')
return encoded; a -= ('A' - 10);
#endif else
a -= '0';
if (b >= 'a')
b -= 'a'-'A';
if (b >= 'A')
b -= ('A' - 10);
else
b -= '0';
*dst++ = 16*a+b;
src+=3;
} else if (*src == '+') {
*dst++ = ' ';
src++;
} else {
*dst++ = *src++;
}
}
*dst++ = '\0';
return retbuf;
} }
void string_toupper( std::string& str) { void string_toupper( std::string& str) {