diff --git a/src/Routerin.H b/src/Routerin.H index 4253b89..bae4c72 100644 --- a/src/Routerin.H +++ b/src/Routerin.H @@ -5,15 +5,41 @@ class Routerin { -public: - Routerin(); +public: //Routerin(StaticFileHandler &sfh); - int event_route(struct mg_event *event); + ~Routerin(); + // const ??? + static Routerin * get_instance() + { + static Routerin * me; + if ( ! me->hasInstance ) + return me = new Routerin(); + return me; + } + static int event_route(struct mg_event *event) + { + // Foohash fh; + Routerin *rouri = Routerin::get_instance(); + switch (event->type) { + case MG_REQUEST_BEGIN: + return rouri->event_request_route(event); + case MG_THREAD_BEGIN: + return rouri->event_newthread_route(event); + case MG_REQUEST_END: + return rouri->event_requend_route(event); + case MG_HTTP_ERROR: + case MG_EVENT_LOG: + case MG_THREAD_END: + default: + return rouri->event_fallback_route(event); + } + } private: + explicit Routerin(); StaticFileHandler sfh; - + bool hasInstance = false; int event_request_route ( struct mg_event *event); int event_newthread_route ( struct mg_event *event); diff --git a/src/Routerin.cc b/src/Routerin.cc index 1028e05..5076f5f 100644 --- a/src/Routerin.cc +++ b/src/Routerin.cc @@ -16,78 +16,67 @@ Routerin::Routerin(): sfh( UltraSimpleStaticFileHandler()) { cout << "Konstr Routering" << std::endl; + Routerin::hasInstance = true; } -int Routerin::event_route(struct mg_event *event) +Routerin::~Routerin() { - // Foohash fh; - switch(event->type){ - case MG_REQUEST_BEGIN: - return event_request_route(event); - case MG_THREAD_BEGIN : - return event_newthread_route(event); - case MG_REQUEST_END: - return event_requend_route(event); - case MG_HTTP_ERROR: - case MG_EVENT_LOG : - case MG_THREAD_END: - default: - return event_fallback_route(event); - } + Routerin::hasInstance = false; + } - int Routerin::event_request_route(struct mg_event *event){ - const RouterOp *blub=0; - Foohash fh; - const char *reqstr=0; - char *tmpstr = 0,*pntrstr=0; - int retval=-1; - reqstr=event->request_info->uri; - if (reqstr){ - tmpstr = strdup(reqstr); - std::cerr << "starting with str as " - << tmpstr << endl; //DEBUG CODE - pntrstr = strchrnul((tmpstr+1),'/'); - if (pntrstr) { - *pntrstr = 0; - std::cerr <<" having reqstr as " << tmpstr - << " now. " << endl; - std::cerr <<"len of reqstr is " << - ( pntrstr - tmpstr) << endl; - blub = fh.in_word_set(tmpstr,((pntrstr++)-tmpstr) ); - if (blub){ - std::cerr << "me has blub!!" <op){ - case RouterOpCode::FILES: - retval = rq_file(pntrstr ,event); - break; - case RouterOpCode::DATE: - retval = rq_date(pntrstr, event); - break; - case RouterOpCode::UPLOAD: - retval = rq_upload(pntrstr, event); - break; - case RouterOpCode::STATIC: - std::cerr << "(/static/ given)"; - retval = rq_static((pntrstr),event); - break; - default: - std::cerr << "fallback "; - retval = rq_static((pntrstr),event); - }; - }else{ - std::cerr << "no blub! in " << __LINE__ << endl; - } - } - std::free(tmpstr); - tmpstr=0; - return retval; - } else { - std::cerr << "event request without uri? ?? hu? [" << - event->request_info->uri << "]" << endl; - } - return 0; - } +int Routerin::event_request_route(struct mg_event *event){ + const RouterOp *blub=0; + Foohash fh; + const char *reqstr=0; + char *tmpstr = 0,*pntrstr=0; + int retval=-1; + reqstr=event->request_info->uri; + if (reqstr){ + tmpstr = strdup(reqstr); + std::cerr << "starting with str as " + << tmpstr << endl; //DEBUG CODE + pntrstr = strchrnul((tmpstr+1),'/'); + if (pntrstr) { + *pntrstr = 0; + std::cerr <<" having reqstr as " << tmpstr + << " now. " << endl; + std::cerr <<"len of reqstr is " << + ( pntrstr - tmpstr) << endl; + blub = fh.in_word_set(tmpstr,((pntrstr++)-tmpstr) ); + if (blub){ + std::cerr << "me has blub!!" <op){ + case RouterOpCode::FILES: + retval = rq_file(pntrstr ,event); + break; + case RouterOpCode::DATE: + retval = rq_date(pntrstr, event); + break; + case RouterOpCode::UPLOAD: + retval = rq_upload(pntrstr, event); + break; + case RouterOpCode::STATIC: + std::cerr << "(/static/ given)"; + retval = rq_static((pntrstr),event); + break; + default: + std::cerr << "fallback "; + retval = rq_static((pntrstr),event); + }; + }else{ + std::cerr << "no blub! in " << __LINE__ << endl; + } + } + std::free(tmpstr); + tmpstr=0; + return retval; + } else { + std::cerr << "event request without uri? ?? hu? [" << + event->request_info->uri << "]" << endl; + } + return 0; +} @@ -109,7 +98,6 @@ int Routerin::rq_file(char const * const reststr , struct mg_event *event) return 1; } - int Routerin::rq_date(char const * const reststr , struct mg_event *event) { std::cerr << "requested filelist ordered by date!" << endl ;