/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ /*************************************************************************** * muniad.cc * * Thu Feb 16 15:03:28 CET 2012 * Copyright 2012 Bent Bisballe Nyeng * deva@aasimon.org ****************************************************************************/ /* * This file is part of Munia. * * Munia is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Munia is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Munia; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include #include #include #include #include #include #include #include #include "http.h" #include "munia_proto.h" #include "hugin.hpp" #include "nodemanager.h" static struct lws_protocols protocols[] = { // first protocol must always be HTTP handler { "http-only", callback_http, 0 }, { "lws-node-protocol", callback_lws_node, sizeof(struct per_session_data__lws_node) }, { nullptr, nullptr, 0 } // End of list }; static struct option options[] = { { "help", no_argument, nullptr, 'h' }, { "port", required_argument, nullptr, 'p' }, { "file", required_argument, nullptr, 'f' }, { "ssl", no_argument, nullptr, 's' }, { "killmask", no_argument, nullptr, 'k' }, { "interface", required_argument, nullptr, 'i' }, // { "dumpfile", required_argument, nullptr, 'd'}, { nullptr, 0, 0, 0 } }; int main(int argc, char **argv) { const char *db_filename = "/tmp/munia.xml"; int n = 0; const char *cert_path = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem"; const char *key_path = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem"; int port = 7681; int use_ssl = 0; struct lws_context *context; int opts = 0; char interface_name[128] = ""; const char * interface = nullptr; // std::string dumpfile; fprintf(stderr, "Munia test server\n" "(C) Copyright 2012-2019 Bent Bisballe Nyeng (deva@aasimon.org)\n" " & Jonas Suhr Christensen (jsc@umbraculum.org)\n" "License GPLv3+: GNU GPL version 3 or later " "\n" "\n" "This is free software; you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n"); while(n >= 0) { n = getopt_long(argc, argv, "ci:khsp:f:", options, nullptr); if(n < 0) { continue; } switch(n) { case 's': use_ssl = 1; break; // case 'd': // dumpfile = optarg; case 'k': //opts = LWS_SERVER_OPTION_DEFEAT_CLIENT_MASK; break; case 'p': port = atoi(optarg); break; case 'f': db_filename = strdup(optarg); break; case 'i': strncpy(interface_name, optarg, sizeof interface_name); interface_name[(sizeof interface_name) - 1] = '\0'; interface = interface_name; break; case 'h': fprintf(stderr, "Usage: muniad [--port=

] [--ssl] [--file=]\n"); exit(1); } } //_parse("+all"); node_manager.init(db_filename); if(!use_ssl) { cert_path = key_path = nullptr; } struct lws_context_creation_info info{}; info.port = port; info.iface = interface; info.protocols = protocols; //info.extensions = lws_get_internal_extensions(); // DEPRECATED if(!use_ssl) { info.ssl_cert_filepath = cert_path; info.ssl_private_key_filepath = nullptr; } else { info.ssl_cert_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem"; info.ssl_private_key_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem"; } info.gid = -1; info.uid = -1; info.options = opts; context = lws_create_context(&info); if(context == nullptr) { fprintf(stderr, "libwebsocket init failed\n"); return -1; } while(1) { lws_service(context, 50); } lws_context_destroy(context); return 0; }