void cServerThread::addWebappService(string name) {

    string path = "/" + name;
    vector< RestfulService* > restfulservices = services->Services(true, true);
    vector< RestfulService* >::iterator it = restfulservices.begin();
    vector< RestfulService* >::iterator end = restfulservices.end();
    bool occupied = false;
    int i=0;

    for (; it != end; it++) {

        if (restfulservices[i]->Path() == path) {
            occupied = true;
        }
        i++;
    }

    if (false == occupied) {
        RestfulService* service = new RestfulService(path, true, 1);
        services->appendService(service);
        server->addService(*service->Regex(), webappService);
        esyslog("restfulapi: webapp service '%s' added", name.c_str());
    } else {
        esyslog("restfulapi: could not add service '%s' because it already exists", name.c_str());
    }
};
void cServerThread::Action(void)
{
  active = true;

  AudioService audioService; 
  ChannelsService channelsService;
  EventsService eventsService;  
  InfoService infoService;
  OsdService osdService;  
  RecordingsService recordingsService;
  RemoteService remoteService;
  SearchTimersService searchTimersService;  
  TimersService timersService;
  
  RestfulServices* services = RestfulServices::get();
  
  RestfulService* audio = new RestfulService("/audio", true, 1);  
  RestfulService* channels = new RestfulService("/channels", true, 1);
  RestfulService* channelGroups = new RestfulService("/channels/groups", true, 1, channels);
  RestfulService* channelImage = new RestfulService("/channels/image", true, 1, channels);
  RestfulService* events = new RestfulService("/events", true, 1);
  RestfulService* eventsImage = new RestfulService("/events/image", true, 1, events);
  RestfulService* eventsSearch = new RestfulService("/events/search", false, 1, events);
  RestfulService* info = new RestfulService("/info", true, 1);  
  RestfulService* osd = new RestfulService("/osd", true, 1); 
  RestfulService* recordings = new RestfulService("/recordings", true, 1);
  RestfulService* recordingsCut = new RestfulService("/recordings/cut", true, 1, recordings);
  RestfulService* recordingsMarks = new RestfulService("/recordings/marks", true, 1, recordings);
  RestfulService* recordingsPlay = new RestfulService("/recordings/play", true, 2, recordings);
  RestfulService* recordingsRewind = new RestfulService("/recordings/rewind", true, 1, recordings);
  RestfulService* recordingsDelete = new RestfulService("/recordings/delete", true, 1, recordings);
  RestfulService* recordingsMove = new RestfulService("/recordings/move", true, 1, recordings);
  RestfulService* remote = new RestfulService("/remote", true, 1);
  RestfulService* searchtimers = new RestfulService("/searchtimers", false, 1);  
  RestfulService* timers = new RestfulService("/timers", true, 1);
  
  services->appendService(audio);  
  services->appendService(channels);
  services->appendService(channelGroups);
  services->appendService(channelImage);
  services->appendService(events);
  services->appendService(eventsImage);
  services->appendService(eventsSearch);
  services->appendService(info);  
  services->appendService(osd);  
  services->appendService(recordings);
  services->appendService(recordingsCut);
  services->appendService(recordingsMarks);
  services->appendService(recordingsPlay);
  services->appendService(recordingsRewind);
  services->appendService(recordingsDelete);
  services->appendService(recordingsMove);
  services->appendService(remote);
  services->appendService(searchtimers);  
  services->appendService(timers);

  server->addService(*audio->Regex(), audioService);
  server->addService(*channels->Regex(), channelsService);
  server->addService(*events->Regex(), eventsService);
  server->addService(*info->Regex(), infoService); 
  server->addService(*osd->Regex(), osdService);  
  server->addService(*recordings->Regex(), recordingsService);
  server->addService(*remote->Regex(), remoteService);
  server->addService(*searchtimers->Regex(), searchTimersService); 
  server->addService(*timers->Regex(), timersService);

  try {
    loop.run();
  } catch ( const std::exception& e) {
    esyslog("restfulapi: starting services failed: /%s/", e.what());
  }
  int now = time(NULL);
  esyslog("restfulapi: server thread end: /%i/", now);

  dsyslog("restfulapi: server thread ended (pid=%d)", getpid());
}
void cServerThread::Action(void)
{
    active = true;

    InfoService infoService;
    ChannelsService channelsService;
    EventsService eventsService;
    RecordingsService recordingsService;
    RemoteService remoteService;
    TimersService timersService;
    OsdService osdService;
    SearchTimersService searchTimersService;
    ScraperService scraperService;
    WirbelscanService wirbelscanService;
    FemonService femonService;

    RestfulService* info = new RestfulService("/info", true, 1);
    RestfulService* channels = new RestfulService("/channels", true, 1);
    RestfulService* channelGroups = new RestfulService("/channels/groups", true, 1, channels);
    RestfulService* channelImage = new RestfulService("/channels/image", true, 1, channels);
    RestfulService* events = new RestfulService("/events", true, 1);
    RestfulService* eventsImage = new RestfulService("/events/image", true, 1, events);
    RestfulService* eventsSearch = new RestfulService("/events/search", false, 1, events);
    RestfulService* recordings = new RestfulService("/recordings", true, 1);
    RestfulService* recordingsCut = new RestfulService("/recordings/cut", true, 1, recordings);
    RestfulService* recordingsMarks = new RestfulService("/recordings/marks", true, 1, recordings);
    RestfulService* remote = new RestfulService("/remote", true, 1);
    RestfulService* timers = new RestfulService("/timers", true, 1);
    RestfulService* osd = new RestfulService("/osd", true, 1);
    RestfulService* searchtimers = new RestfulService("/searchtimers", false, 1);
    RestfulService* scraper = new RestfulService("/scraper", true, 1);
    RestfulService* wirbelscan = new RestfulService("/wirbelscan", true, 1);
    RestfulService* wirbelscanCountries = new RestfulService("/wirbelscan/countries", true, 1, wirbelscan);
    RestfulService* femon = new RestfulService("/femon", true, 1);

    services->appendService(info);
    services->appendService(channels);
    services->appendService(channelGroups);
    services->appendService(channelImage);
    services->appendService(events);
    services->appendService(eventsImage);
    services->appendService(eventsSearch);
    services->appendService(recordings);
    services->appendService(recordingsCut);
    services->appendService(recordingsMarks);
    services->appendService(remote);
    services->appendService(timers);
    services->appendService(osd);
    services->appendService(searchtimers);
    services->appendService(scraper);
    services->appendService(wirbelscan);
    services->appendService(wirbelscanCountries);
    services->appendService(femon);

    server->addService(*info->Regex(), infoService);
    server->addService(*channels->Regex(), channelsService);
    server->addService(*events->Regex(), eventsService);
    server->addService(*recordings->Regex(), recordingsService);
    server->addService(*remote->Regex(), remoteService);
    server->addService(*timers->Regex(), timersService);
    server->addService(*osd->Regex(), osdService);
    server->addService(*searchtimers->Regex(), searchTimersService);
    server->addService(*scraper->Regex(), scraperService);
    server->addService(*wirbelscan->Regex(), wirbelscanService);
    server->addService(*femon->Regex(), femonService);

    map<string, string> webapps = Settings::get()->Webapps();
    map<string, string>::iterator it;

    for (it = webapps.begin(); it != webapps.end(); it++) {
        addWebappService(it->first);
    }

    try {
        loop.run();
    } catch ( const std::exception& e) {
        esyslog("restfulapi: starting services failed: /%s/", e.what());
    }
    int now = time(NULL);
    esyslog("restfulapi: server thread end: /%i/", now);

    dsyslog("restfulapi: server thread ended (pid=%d)", getpid());
}