From 1ae51ff94d0f1f27a4e4cc657371578db13c3ca1 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 8 Feb 2019 20:26:14 +0100 Subject: Make code compile again (fix bitrot dating back from 2013). --- src/http.cc | 169 +++++++++++++++++++++++++++++------------------------------- 1 file changed, 82 insertions(+), 87 deletions(-) (limited to 'src/http.cc') diff --git a/src/http.cc b/src/http.cc index f00cbb7..43d09bc 100644 --- a/src/http.cc +++ b/src/http.cc @@ -29,107 +29,102 @@ #include #include +#include #include "hugin.hpp" -int callback_http(struct libwebsocket_context * context, - struct libwebsocket *wsi, - enum libwebsocket_callback_reasons reason, void *user, - void *i, size_t len) +int serveFile(struct lws *wsi, + const std::string& file, const std::string& mimeType) { - char *in = (char*)i; - // char client_name[128]; - // char client_ip[128]; - - switch(reason) { - case LWS_CALLBACK_HTTP: - DEBUG(httpd,"serving HTTP URI %s\n", (char *)in); - - while(*in == '/') in++; // skip trailing slashes - - // add favicon later - if(in && strcmp((const char *)in, "favicon.ico") == 0) { - if(libwebsockets_serve_http_file(context, wsi, - LOCAL_RESOURCE_PATH"/favicon.ico", - "image/x-icon")) - DEBUG(httpd,"Failed to send favicon\n"); - break; - } + std::string fileWithPath = LOCAL_RESOURCE_PATH; + fileWithPath += "/" + file; + auto ret = lws_serve_http_file(wsi, fileWithPath.data(), + mimeType.data(), nullptr, 0); + if(ret < 0) + { + DEBUG(httpd, "Failed to serve %s\n", file.data()); + return 1; // error!? + } - // css - if(in && strcmp((const char *)in, "munia.css") == 0) { - if(libwebsockets_serve_http_file(context, wsi, - LOCAL_RESOURCE_PATH"/munia.css", - "text/css")) - DEBUG(httpd,"Failed to send css\n"); - break; + if(ret > 0) + { + if(lws_http_transaction_completed(wsi) < 0) + { + DEBUG(httpd, "Failed to complete http transaction %s\n", file.data()); + return 1; } + } - // script - if(in && strcmp((const char *)in, "proto.js") == 0) { - if(libwebsockets_serve_http_file(context, wsi, - LOCAL_RESOURCE_PATH"/proto.js", - "text/javascript")) - DEBUG(httpd,"Failed to send javascript\n"); - break; - } + if(ret == 0) + { + DEBUG(httpd, "Http transaction of %s in progress\n", file.data()); + } - if(in && strcmp((const char *)in, "handler.js") == 0) { - if(libwebsockets_serve_http_file(context, wsi, - LOCAL_RESOURCE_PATH"/handler.js", - "text/javascript")) - DEBUG(httpd,"Failed to send javascript\n"); - break; - } + return 0; +} - if(in && strcmp((const char *)in, "view.js") == 0) { - if(libwebsockets_serve_http_file(context, wsi, - LOCAL_RESOURCE_PATH"/view.js", - "text/javascript")) - DEBUG(httpd,"Failed to send javascript\n"); - break; - } +int callback_http(struct lws *wsi, + enum lws_callback_reasons reason, void *user, + void *i, size_t len) +{ + // char client_name[128]; + // char client_ip[128]; - if(in && strcmp((const char *)in, "task.js") == 0) { - if(libwebsockets_serve_http_file(context, wsi, - LOCAL_RESOURCE_PATH"/task.js", - "text/javascript")) - DEBUG(httpd,"Failed to send javascript\n"); - break; - } + if(reason != LWS_CALLBACK_HTTP) + { + return 0; // We only serve http here + } + const char* in = (char*)i; + while(*in == '/') + { + in++; // skip trailing slashes + } - /* send the script... when it runs it'll start websockets */ - if(libwebsockets_serve_http_file(context, wsi, - LOCAL_RESOURCE_PATH"/munia.html", - "text/html")) - DEBUG(httpd,"Failed to send HTTP file\n"); - break; + std::string file; + file.append(in, len - (in - (char*)i)); + DEBUG(httpd,"serving HTTP URI %s\n", file.data()); - /* - * callback for confirming to continue with client IP appear in - * protocol 0 callback since no websocket protocol has been agreed - * yet. You can just ignore this if you won't filter on client IP - * since the default uhandled callback return is 0 meaning let the - * connection continue. - */ + // add favicon later + if(file == "favicon.ico") + { + return serveFile(wsi, file, "image/x-icon"); + } - case LWS_CALLBACK_FILTER_NETWORK_CONNECTION: - /* - libwebsockets_get_peer_addresses((int)(long)user, - client_name, - sizeof(client_name), - client_ip, - sizeof(client_ip)); - DEBUG(httpd,"Received network connect from %s (%s)\n", - client_name, client_ip); - */ - /* if we returned non-zero from here, we kill the connection */ - break; + // css + if(file == "munia.css") + { + return serveFile(wsi, file, "text/css"); + } - default: - break; + // script + if(file == "proto.js" || + file == "handler.js" || + file == "task.js" || + file == "view.js") + { + return serveFile(wsi, file,"text/javascript"); } - - return 0; + + return serveFile(wsi, "munia.html", "text/html"); + +#if 0 + // callback for confirming to continue with client IP appear in + // protocol 0 callback since no websocket protocol has been agreed + // yet. You can just ignore this if you won't filter on client IP + // since the default uhandled callback return is 0 meaning let the + // connection continue. + + case LWS_CALLBACK_FILTER_NETWORK_CONNECTION: + //lws_get_peer_addresses((int)(long)user, + // client_name, + // sizeof(client_name), + // client_ip, + // sizeof(client_ip)); + //DEBUG(httpd,"Received network connect from %s (%s)\n", + // client_name, client_ip); + + // if we returned non-zero from here, we kill the connection + break; +#endif } -- cgit v1.2.3