switched to 3.9.7 defaults
[psensor-pkg-ubuntu.git] / src / server / server.c
index 297d083..d868d86 100644 (file)
@@ -23,6 +23,7 @@
 #include <libintl.h>
 #define _(str) gettext(str)
 
+#include <limits.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 
 #ifdef HAVE_GTOP
 #include "sysinfo.h"
-#include "cpu.h"
+#include <pgtop2.h>
 #endif
 
+#include <hdd.h>
+#include <lmsensor.h>
 #include <plog.h>
 #include "psensor_json.h"
 #include <pmutex.h>
@@ -190,8 +193,9 @@ create_response_api(const char *nurl, const char *method, unsigned int *rp_code)
        if (page) {
                *rp_code = MHD_HTTP_OK;
 
-               resp = MHD_create_response_from_data(strlen(page), page,
-                                                    MHD_YES, MHD_NO);
+               resp = MHD_create_response_from_buffer(strlen(page),
+                                                      page,
+                                                      MHD_RESPMEM_MUST_FREE);
 
                MHD_add_response_header(resp, MHD_HTTP_HEADER_CONTENT_TYPE,
                                        "application/json");
@@ -221,8 +225,8 @@ static struct MHD_Response *create_response_file(const char *nurl,
 
                        if (!st.st_size) {
                                fclose(file);
-                               return MHD_create_response_from_data
-                                       (0, NULL, MHD_NO, MHD_NO);
+                               return MHD_create_response_from_buffer
+                                       (0, NULL, 0);
                        }
 
                        return MHD_create_response_from_callback
@@ -243,27 +247,38 @@ static struct MHD_Response *create_response_file(const char *nurl,
 static struct MHD_Response *
 create_response(const char *nurl, const char *method, unsigned int *rp_code)
 {
+       char *page, *fpath, *rpath;
        struct MHD_Response *resp = NULL;
+       int n;
 
        if (!strncmp(nurl, URL_BASE_API_1_1, strlen(URL_BASE_API_1_1))) {
                resp = create_response_api(nurl, method, rp_code);
        } else {
-               char *fpath = get_path(nurl, server_data.www_dir);
-
-               resp = create_response_file(nurl, method, rp_code, fpath);
+               fpath = get_path(nurl, server_data.www_dir);
+
+               rpath = realpath(fpath, NULL);
+               if (rpath) {
+                       n = strlen(server_data.www_dir);
+                       if (!strncmp(server_data.www_dir, rpath, n))
+                               resp = create_response_file(nurl,
+                                                           method,
+                                                           rp_code,
+                                                           fpath);
+                       free(rpath);
+               }
 
                free(fpath);
        }
 
-       if (resp) {
+       if (resp)
                return resp;
-       } else {
-               char *page = strdup(PAGE_NOT_FOUND);
-               *rp_code = MHD_HTTP_NOT_FOUND;
 
-               return MHD_create_response_from_data
-                       (strlen(page), page, MHD_YES, MHD_NO);
-       }
+       page = strdup(PAGE_NOT_FOUND);
+       *rp_code = MHD_HTTP_NOT_FOUND;
+
+       return MHD_create_response_from_buffer(strlen(page),
+                                              page,
+                                              MHD_RESPMEM_MUST_FREE);
 }
 
 static int cbk_http_request(void *cls,
@@ -344,7 +359,7 @@ int main(int argc, char *argv[])
                switch (optc) {
                case 'w':
                        if (optarg)
-                               server_data.www_dir = strdup(optarg);
+                               server_data.www_dir = realpath(optarg, NULL);
                        break;
                case 'p':
                        if (optarg)
@@ -383,8 +398,14 @@ int main(int argc, char *argv[])
                exit(EXIT_FAILURE);
        }
 
-       if (!server_data.www_dir)
-               server_data.www_dir = strdup(DEFAULT_WWW_DIR);
+       if (!server_data.www_dir) {
+               server_data.www_dir = realpath(DEFAULT_WWW_DIR, NULL);
+               if (!server_data.www_dir) {
+                       fprintf(stderr,
+                               _("Webserver directory does not exist.\n"));
+                       exit(EXIT_FAILURE);
+               }
+       }
 
        if (!log_file)
                log_file = strdup(DEFAULT_LOG_FILE);
@@ -393,9 +414,9 @@ int main(int argc, char *argv[])
 
        log_open(log_file);
 
-       psensor_init();
+       hddtemp_psensor_list_append(&server_data.sensors, 600);
 
-       server_data.sensors = get_all_sensors(0, 600);
+       lmsensor_psensor_list_append(&server_data.sensors, 600);
 
 #ifdef HAVE_GTOP
        server_data.cpu_usage = create_cpu_usage_sensor(600);
@@ -435,7 +456,14 @@ int main(int argc, char *argv[])
                sysinfo_update(&server_data.psysinfo);
                cpu_usage_sensor_update(server_data.cpu_usage);
 #endif
-               psensor_list_update_measures(server_data.sensors);
+
+#ifdef HAVE_ATASMART
+               atasmart_psensor_list_update(server_data.sensors);
+#endif
+
+               hddtemp_psensor_list_update(server_data.sensors);
+
+               lmsensor_psensor_list_update(server_data.sensors);
 
                psensor_log_measures(server_data.sensors);
 
@@ -457,7 +485,6 @@ int main(int argc, char *argv[])
 
 #ifdef HAVE_GTOP
        sysinfo_cleanup();
-       cpu_cleanup();
 #endif
 
        if (log_file != DEFAULT_LOG_FILE)