blob: 32a11924f9756801800db665849055430dd9ee8a [file] [log] [blame]
Ed Tanousb4d29f42017-03-24 16:39:25 -07001#include <webassets.hpp>
2#include <web_kvm.hpp>
3#include "ssl_key_handler.hpp"
4
Ed Tanous8041f312017-04-03 09:47:01 -07005#include <crow/bmc_app_type.hpp>
Ed Tanousb4d29f42017-03-24 16:39:25 -07006
Ed Tanousf9273472017-02-28 16:05:13 -08007#include "crow/app.h"
Ed Tanousc4771fb2017-03-13 13:39:49 -07008#include "crow/ci_map.h"
Ed Tanousf9273472017-02-28 16:05:13 -08009#include "crow/common.h"
10#include "crow/dumb_timer_queue.h"
11#include "crow/http_connection.h"
Ed Tanousc4771fb2017-03-13 13:39:49 -070012#include "crow/http_parser_merged.h"
Ed Tanousf9273472017-02-28 16:05:13 -080013#include "crow/http_request.h"
14#include "crow/http_response.h"
15#include "crow/http_server.h"
16#include "crow/json.h"
17#include "crow/logging.h"
18#include "crow/middleware.h"
19#include "crow/middleware_context.h"
20#include "crow/mustache.h"
21#include "crow/parser.h"
Ed Tanousc4771fb2017-03-13 13:39:49 -070022#include "crow/query_string.h"
Ed Tanousf9273472017-02-28 16:05:13 -080023#include "crow/routing.h"
Ed Tanous0fdddb12017-02-28 11:06:34 -080024#include "crow/settings.h"
25#include "crow/socket_adaptors.h"
Ed Tanous0fdddb12017-02-28 11:06:34 -080026#include "crow/utility.h"
Ed Tanous0fdddb12017-02-28 11:06:34 -080027#include "crow/websocket.h"
Ed Tanous0fdddb12017-02-28 11:06:34 -080028
Ed Tanous1ccd57c2017-03-21 13:15:58 -070029
Ed Tanous5f34a9c2017-02-28 12:35:13 -080030#include "color_cout_g3_sink.hpp"
Ed Tanous99923322017-03-03 14:21:24 -080031#include "webassets.hpp"
Ed Tanousf9273472017-02-28 16:05:13 -080032
Ed Tanousb4d29f42017-03-24 16:39:25 -070033
34#include <boost/asio.hpp>
35#include <boost/endian/arithmetic.hpp>
36
37
Ed Tanous0fdddb12017-02-28 11:06:34 -080038#include <iostream>
Ed Tanousc4771fb2017-03-13 13:39:49 -070039#include <memory>
Ed Tanous0fdddb12017-02-28 11:06:34 -080040#include <string>
Ed Tanousc4771fb2017-03-13 13:39:49 -070041#include <unordered_set>
Ed Tanous9b65f1f2017-03-07 15:17:13 -080042
Ed Tanous99923322017-03-03 14:21:24 -080043int main(int argc, char** argv) {
Ed Tanous9b65f1f2017-03-07 15:17:13 -080044 auto worker(g3::LogWorker::createLogWorker());
Ed Tanous1ccd57c2017-03-21 13:15:58 -070045 std::string logger_name("bmcweb");
46 std::string folder("/tmp/");
47 auto handle = worker->addDefaultLogger(logger_name, folder);
Ed Tanous99923322017-03-03 14:21:24 -080048 g3::initializeLogging(worker.get());
Ed Tanous1ccd57c2017-03-21 13:15:58 -070049 auto sink_handle = worker->addSink(std::make_unique<crow::ColorCoutSink>(),
50 &crow::ColorCoutSink::ReceiveLogMessage);
Ed Tanous0fdddb12017-02-28 11:06:34 -080051
Ed Tanous99923322017-03-03 14:21:24 -080052 std::string ssl_pem_file("server.pem");
53 ensuressl::ensure_openssl_key_present_and_valid(ssl_pem_file);
Ed Tanous0fdddb12017-02-28 11:06:34 -080054
Ed Tanous1ccd57c2017-03-21 13:15:58 -070055 BmcAppType app;
Ed Tanousb4d29f42017-03-24 16:39:25 -070056
Ed Tanous99923322017-03-03 14:21:24 -080057 crow::webassets::request_routes(app);
Ed Tanousc81ca422017-03-21 16:18:49 -070058 crow::kvm::request_routes(app);
Ed Tanous0fdddb12017-02-28 11:06:34 -080059
Ed Tanous9b65f1f2017-03-07 15:17:13 -080060 crow::logger::setLogLevel(crow::LogLevel::INFO);
Ed Tanous0fdddb12017-02-28 11:06:34 -080061
Ed Tanousc4771fb2017-03-13 13:39:49 -070062 CROW_ROUTE(app, "/systeminfo")
63 ([]() {
64
65 crow::json::wvalue j;
66 j["device_id"] = 0x7B;
67 j["device_provides_sdrs"] = true;
68 j["device_revision"] = true;
69 j["device_available"] = true;
70 j["firmware_revision"] = "0.68";
71
72 j["ipmi_revision"] = "2.0";
73 j["supports_chassis_device"] = true;
74 j["supports_bridge"] = true;
75 j["supports_ipmb_event_generator"] = true;
76 j["supports_ipmb_event_receiver"] = true;
77 j["supports_fru_inventory_device"] = true;
78 j["supports_sel_device"] = true;
79 j["supports_sdr_repository_device"] = true;
80 j["supports_sensor_device"] = true;
81
82 j["firmware_aux_revision"] = "0.60.foobar";
83
84 return j;
85 });
86
Ed Tanousc4771fb2017-03-13 13:39:49 -070087 CROW_ROUTE(app, "/ipmiws")
88 .websocket()
89 .onopen([&](crow::websocket::connection& conn) {
90
91 })
Ed Tanous1ccd57c2017-03-21 13:15:58 -070092 .onclose(
93 [&](crow::websocket::connection& conn, const std::string& reason) {
Ed Tanousc4771fb2017-03-13 13:39:49 -070094
Ed Tanous1ccd57c2017-03-21 13:15:58 -070095 })
96 .onmessage([&](crow::websocket::connection& conn, const std::string& data,
97 bool is_binary) {
Ed Tanousc4771fb2017-03-13 13:39:49 -070098 boost::asio::io_service io_service;
Ed Tanous1ccd57c2017-03-21 13:15:58 -070099 using boost::asio::ip::udp;
100 udp::resolver resolver(io_service);
101 udp::resolver::query query(udp::v4(), "10.243.48.31", "623");
102 udp::endpoint receiver_endpoint = *resolver.resolve(query);
103
104 udp::socket socket(io_service);
105 socket.open(udp::v4());
106
107 socket.send_to(boost::asio::buffer(data), receiver_endpoint);
108
109 std::array<char, 255> recv_buf;
110
111 udp::endpoint sender_endpoint;
112 size_t len =
113 socket.receive_from(boost::asio::buffer(recv_buf), sender_endpoint);
114 // TODO(ed) THis is ugly. Find a way to not make a copy (ie, use
Ed Tanous8041f312017-04-03 09:47:01 -0700115 // std::string::data() to
Ed Tanous1ccd57c2017-03-21 13:15:58 -0700116 std::string str(std::begin(recv_buf), std::end(recv_buf));
117 LOG(DEBUG) << "Got " << str << "back \n";
118 conn.send_binary(str);
119
Ed Tanousc4771fb2017-03-13 13:39:49 -0700120 });
121
Ed Tanous1ccd57c2017-03-21 13:15:58 -0700122 app.port(18080)
123 //.ssl(std::move(ensuressl::get_ssl_context(ssl_pem_file)))
124 .run();
Ed Tanous0fdddb12017-02-28 11:06:34 -0800125}