diff --git a/Makefile.am b/Makefile.am index 27ed199..642c914 100644 --- a/Makefile.am +++ b/Makefile.am @@ -12,6 +12,8 @@ siccc_SOURCES = \ src/options.c \ src/Routerin.H \ src/Routerin.cc \ + src/DynamicObjects.cc \ + src/DynamicObjects.H \ src/sicmain.cc \ src/StaticFileHandler.H \ src/StaticFileHandler.cc \ diff --git a/src/DynamicObjects.H b/src/DynamicObjects.H index 52fe25a..7cf0131 100644 --- a/src/DynamicObjects.H +++ b/src/DynamicObjects.H @@ -1,22 +1,24 @@ #pragma once #include -#include "Sicmaster.H" +#include "Routerin.H" #include "Sicobject.H" #include #include +class Routerin; + class DynamicObjects { public: std::string render_object_list(); std::string cleanpath(const char * const); - DynamicObjects(Sicmaster & sicmaster):sicmaster(sicmaster) {}; + DynamicObjects(Routerin * merouterin) : _merouterin(merouterin){ }; ~DynamicObjects() {}; private: std::string _cleanpath (const char * const path); std::map _themap; - Sicmaster & sicmaster; + Routerin * _merouterin; }; diff --git a/src/DynamicObjects.cc b/src/DynamicObjects.cc index d230d52..09d23c3 100644 --- a/src/DynamicObjects.cc +++ b/src/DynamicObjects.cc @@ -10,7 +10,7 @@ std::string DynamicObjects::render_object_list(){ for (auto it : this->_themap){ output += u8"
  • \n"; - output += u8"get_loadurl() + u8"\">"; + output += u8"get_loadurl() + u8"\">"; //we could include baseurl here? output += it.second->get_fname(); output += u8" "; output += it.second->bytesize_string(); diff --git a/src/Routerin.H b/src/Routerin.H index 9a41ecf..7e8b8d4 100644 --- a/src/Routerin.H +++ b/src/Routerin.H @@ -4,6 +4,9 @@ #include #include "StaticFileHandler.H" +#include "DynamicObjects.H" + +class DynamicObjects; class Routerin { @@ -38,9 +41,14 @@ public: return rouri->event_fallback_route(event); } } + std::string & get_baseurl(){return _baseurl;} + void set_baseurl(std::string baseurl); private: explicit Routerin(); std::unique_ptr sfh; + DynamicObjects * _dyn_obs; + std::string _baseurl; + bool hasInstance = false; int event_request_route ( struct mg_event *event); @@ -52,5 +60,6 @@ private: int rq_file(char const * const reststr , struct mg_event *event); int rq_date(char const * const reststr , struct mg_event *event); int rq_upload(char const * const reststr , struct mg_event *event); + int rq_render_mainpage(struct mg_event *event); }; diff --git a/src/Routerin.cc b/src/Routerin.cc index 14af063..a250871 100644 --- a/src/Routerin.cc +++ b/src/Routerin.cc @@ -2,21 +2,65 @@ #include #include #include -using std::strcmp; #include "Foohash.H" #include "Routerin.H" +using std::strcmp; using std::cout; using std::endl; +//put this in class ?? Util?? +//FIXME: +static const std::string std_html_header= u8R"HUENERBLUBBE( + + + + Sharing is Caring + + +)HUENERBLUBBE" ; + + +static const std::string std_mainpage= u8R"HASENBLUBBE( + +
    +

    + Sharing + is + Caring +

    + +
    +
    + + +
    +

    + Wie wärs mit einem schicken Foto? Dem Flyer der nächsten + Party? Oder gar einem gesprochenen Kommentar? +

    +
    +)HASENBLUBBE" ; + + +static const std::string std_footer= u8R"FISCHBLUBBE( +

    + Eine Guerilla-Kunstaktion von <<</>> +

    +
    + + +)FISCHBLUBBE" ; + Routerin::Routerin(): sfh( new StaticFileHandler()) -{ - cout << "Konstr Routering" << std::endl; -} +{ + _dyn_obs = new DynamicObjects(this); + cout << "Konstr Routering" << endl; +} int Routerin::event_request_route(struct mg_event *event){ const RouterOp *blub=0; @@ -59,7 +103,8 @@ int Routerin::event_request_route(struct mg_event *event){ }; }else{ std::cerr << "no blub! in " << __LINE__ << endl; - retval = rq_static("illegalurl.htm",event); + //retval = rq_static("illegalurl.htm",event); + retval = rq_render_mainpage(event); } } @@ -74,6 +119,30 @@ int Routerin::event_request_route(struct mg_event *event){ } +void Routerin::set_baseurl(std::string baseurl){ + _baseurl = baseurl; + return; +} + +int Routerin::rq_render_mainpage(struct mg_event * event){ + std::cerr << "rendering main page!" << endl; + const std::string fubb = + std_html_header + + std_mainpage + + _dyn_obs->render_object_list()+ + std_footer.c_str() ; + + mg_printf(event->conn, "HTTP/1.0 200 OK\r\n" + "Content-Length: %lu\r\n" + "Content-Type: text/html\r\n\r\n%s", + fubb.size(), + fubb.c_str()); + + return 1; +} + + + int Routerin::rq_static(char const * const reststr , struct mg_event *event) { std::cerr << " a static file is reqested!" << endl; diff --git a/src/Sicmaster.H b/src/Sicmaster.H deleted file mode 100644 index ac2caa8..0000000 --- a/src/Sicmaster.H +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -/// Laufzeitrelevante Anwendungsdatensammlung und Signaling - - - -#include - -class Sicmaster -{ - public: - - //Sicmaster(StaticFileHandler &sfh); - - ~Sicmaster(); - // const ??? - static Sicmaster * get_instance() - { - static Sicmaster * me = nullptr; - if (!me) - return me = new Sicmaster(); - return me; - } - - std::string & get_baseurl(){ - return _baseurl; - } - - private: - explicit Sicmaster(); - unsigned int _portnum; - unsigned int _filedir; - std::string _baseurl; -}; diff --git a/src/sicmain.cc b/src/sicmain.cc index a200a2c..3bd7797 100644 --- a/src/sicmain.cc +++ b/src/sicmain.cc @@ -24,12 +24,15 @@ class MongooseHandler{ public: //default listenport:8080 - MongooseHandler(int listenport=8080): + MongooseHandler(int listenport=8080,std::string baseurl="http://[::1]/"): ctx(nullptr), listenport(listenport) { char portstring[8]; + Routerin *routerin = Routerin::get_instance(); + routerin->set_baseurl(baseurl); + std::snprintf(portstring,8,"%d",this->listenport); const char *options[] = {"listening_ports",portstring,nullptr}; @@ -62,6 +65,7 @@ void dump_args() cout << "value of listen: " << args_info.listen_arg[i] <