summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Borisov <b0ris@b0ris-satellite.localdomain>2012-01-07 04:45:15 +0200
committerAlex Borisov <b0ris@b0ris-satellite.localdomain>2012-01-07 04:45:15 +0200
commitaddffa29a361cc6fdc8d2d8f9c20b5dc6ea1793c (patch)
tree01680af766754303ce6de2620d77eaa4bad2b68a
parente23f72738a41ada892e8979aaa9cea318e9d941a (diff)
parent6970a39f3c81671d19f9191aca2f5a92ad46699c (diff)
Merge branch 'master' of ssh://sss.chaoslab.ru/home/private_git/proxy_ui
-rwxr-xr-xserver/server/headers.h5
-rw-r--r--server/server/speedtest.cpp52
-rw-r--r--server/server/speedtest.h22
3 files changed, 79 insertions, 0 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 <boost/random.hpp>
#include <boost/nondet_random.hpp>
#include <boost/date_time.hpp>
+#include <boost/progress.hpp>
#include <rapidxml.hpp>
#include <rapidxml_print.hpp>
@@ -28,11 +29,15 @@
#include <openssl/md5.h>
#include <Poco/Process.h>
+
+#include <curl/curl.h>
+
#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
new file mode 100644
index 0000000..8a694b8
--- /dev/null
+++ b/server/server/speedtest.cpp
@@ -0,0 +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
new file mode 100644
index 0000000..58b356f
--- /dev/null
+++ b/server/server/speedtest.h
@@ -0,0 +1,22 @@
+#ifndef SPEEDTEST_H
+#define SPEEDTEST_H
+
+
+
+class 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;
+};
+
+
+#endif //SPEEDTEST_H \ No newline at end of file