From 94d056ac24a4e945dacd473fc8f18e82a70e5c39 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Fri, 6 Jan 2012 18:53:52 +0200 Subject: started speedtest implementation --- server/server/speedtest.cpp | 2 ++ server/server/speedtest.h | 12 ++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 server/server/speedtest.cpp create mode 100644 server/server/speedtest.h diff --git a/server/server/speedtest.cpp b/server/server/speedtest.cpp new file mode 100644 index 0000000..f8e89b5 --- /dev/null +++ b/server/server/speedtest.cpp @@ -0,0 +1,2 @@ +#include "headers.h" + diff --git a/server/server/speedtest.h b/server/server/speedtest.h new file mode 100644 index 0000000..19b8cf5 --- /dev/null +++ b/server/server/speedtest.h @@ -0,0 +1,12 @@ +#ifndef SPEEDTEST_H +#define SPEEDTEST_H + +class speedtest +{ + speedtest(); + size_t test(); + ~speedtest(); +}; + + +#endif //SPEEDTEST_H \ No newline at end of file -- cgit v1.2.3 From 6970a39f3c81671d19f9191aca2f5a92ad46699c Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Sat, 7 Jan 2012 02:15:55 +0200 Subject: speedtest class --- server/server/headers.h | 5 +++++ server/server/speedtest.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++ server/server/speedtest.h | 16 ++++++++++++--- 3 files changed, 68 insertions(+), 3 deletions(-) diff --git a/server/server/headers.h b/server/server/headers.h index 8592f9f..5f6a83e 100755 --- a/server/server/headers.h +++ b/server/server/headers.h @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -28,11 +29,15 @@ #include #include + +#include + #include "utilities.h" #include "main.h" #include "log.h" #include "config.h" #include "p_process.h" #include "p_xml.h" +#include "speedtest.h" #endif diff --git a/server/server/speedtest.cpp b/server/server/speedtest.cpp index f8e89b5..8a694b8 100644 --- a/server/server/speedtest.cpp +++ b/server/server/speedtest.cpp @@ -1,2 +1,52 @@ #include "headers.h" + +size_t speedtest::curl_data_callback(void *contents, size_t size, size_t nmemb, void *userp) //code from curl usage examples, may be slow +{ + size_t realsize = size * nmemb; + struct memory_struct *mem = (struct memory_struct *)userp; + + mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1); + if (mem->memory == NULL) { + /* out of memory! */ + } + + memcpy(&(mem->memory[mem->size]), contents, realsize); + mem->size += realsize; + mem->memory[mem->size] = 0; + return realsize; +} + + +size_t speedtest::test(const char* url) +{ + curl = curl_easy_init(); +/* if(!curl) + ;//handle error */ + memory_struct chunk; + chunk.memory = (char*)malloc(1); + chunk.size = 0; + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &speedtest::curl_data_callback); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&chunk); + curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-speedtest/0.1"); + + timer.restart(); + + curl_easy_perform(curl); + + double time = timer.elapsed(); + + curl_easy_cleanup(curl); + + free(chunk.memory); + if(chunk.size) + { + if(time) + return chunk.size/time; + else + return chunk.size; + } + else + return 0; +} diff --git a/server/server/speedtest.h b/server/server/speedtest.h index 19b8cf5..58b356f 100644 --- a/server/server/speedtest.h +++ b/server/server/speedtest.h @@ -1,11 +1,21 @@ #ifndef SPEEDTEST_H #define SPEEDTEST_H + + class speedtest { - speedtest(); - size_t test(); - ~speedtest(); +public: + size_t test(const char* url); + speedtest() : curl(NULL){} +private: + struct memory_struct { + char *memory; + size_t size; + }; + static size_t curl_data_callback(void *contents, size_t size, size_t nmemb, void *userp); + boost::timer timer; + CURL *curl; }; -- cgit v1.2.3