示例#1
0
 GlobalParameters() {
     parse_options("benchmark.json", mem_allowed, genome_len, scores_to_test, p_values_to_test, matrix_filename, p_value);
     
     std::cout << hayai::Console::TextGreen << "[Testing parameters: ]" << hayai::Console::TextDefault << std::endl;
     std::cout << "\tMemory allowed to use: " << mem_allowed << " bytes" << std::endl;
     
     Pwm matrix(matrix_filename, p_value);
     patterns_allowed = ( mem_allowed - READ_BLOCK_SIZE) / (32*(matrix.getLength()));
     
     std::cout << "\tThis means that we will process maximum " << patterns_allowed << " patterns in each point of time." << std::endl;
     std::cout << "\tModel is: " << matrix_filename << std::endl;
     std::cout << "\tSelected p_value: " << p_value << std::endl;
     
     size_t len = check_file_exists(get_working_path() + std::string("-chr_random.plain"));
     if (len == 0) {
       std::cout << "\tTest genome missing; generating random genome with length: " << genome_len << std::endl;
       std::string chromofile = get_working_path() + std::string("-chr_random.plain");
       std::ofstream chromo(chromofile.c_str());
       static const char alphabet[] = "ACGT";
       for (size_t i=0; i < genome_len; i++) {
         chromo << alphabet[rand() % (sizeof(alphabet)-1)];
       }
       chromo.close();
     } else {
       std::cout << "\tTest genome is present; it's length equals " << len << std::endl;
       genome_len = len;
     }
     
     if (scores_to_test > genome_len) scores_to_test = genome_len - 100;
     
     std::cout << hayai::Console::TextGreen << "[Parameters for benchmark initialized successfully]" << hayai::Console::TextDefault << std::endl;
     
 }
示例#2
0
 virtual void SetUp() {
   this->matrix = new Pwm(global_params.matrix_filename, global_params.p_value);
   
   std::vector<string> filenames, chromonames;
   std::vector<size_t> starts, ends;
   filenames.push_back(get_working_path() + std::string("-chr_random.plain"));
   chromonames.push_back(std::string("bench_chromo"));
   starts.push_back(0);
   ends.push_back(global_params.genome_len-1);
   
   sequences = new ChromoVector(filenames, chromonames, starts, ends, this->matrix->getLength());
   for (size_t i = 0; i < global_params.scores_to_test - this->matrix->getLength() -1 ; i++) {
     stream << i << std::endl;
   }
   
   size_t buf = 0;
   for (int k = 0; k < global_params.mem_allowed / 8 && stream >> buf; k++) {
     this->positions_to_read_again.push_back(buf);
   }
   if (positions_to_read_again.empty()) {
     std::cout << "ERROR!" << std::endl;
   }
   
   words_as_paths.resize(global_params.scores_to_test - this->matrix->getLength());
   this->sequences->getWordsAsPaths(0, positions_to_read_again, this->matrix->getLength(), words_as_paths);
 }
示例#3
0
	void FontManager::addFont(const std::string& _filename, const std::string& _fontName) {
		if (m_Fonts.find(_fontName) == m_Fonts.end()) {
			auto t = new sf::Font();
			if (!t->loadFromFile(_filename)) {
				auto cwd = get_working_path();
				throw std::runtime_error("Failed to load font");
			}

			m_Fonts.insert(std::pair<std::string, sf::Font *>(_fontName, t));
		}
	}
示例#4
0
 virtual void SetUp() {
   this->matrix = new Pwm(global_params.matrix_filename, global_params.p_value);
   this->atm = new AhoCorasickPlus();
   init_ahoc(*(this->atm), *(this->matrix), global_params.patterns_allowed, total_words);
   atm->finalize();
   
   std::vector<string> filenames, chromonames;
   std::vector<size_t> starts, ends;
   filenames.push_back(get_working_path() + std::string("-chr_random.plain"));
   chromonames.push_back(std::string("bench_chromo"));
   starts.push_back(0);
   ends.push_back(global_params.genome_len-1);
   
   sequences = new ChromoVector(filenames, chromonames, starts, ends, this->matrix->getLength());
   total_words=0;
   files_to_merge = new std::vector<std::vector<std::string> >;
 }
示例#5
0
/**
 * Main Program
 */
int main(int argc, char **argv)
{
    TelnetDaemon daemon;

    std::string loginpath;
    std::string user;
    std::string login;
    std::string cdw = get_working_path();

    int num = 0;
    for (int i = 0; ; i++)
    {
        if (cdw[i] == '\0') break;
        if (cdw[i] == '/') num = i;
    }
    if (num != 0)
    {
        for (int i = 0; i < num+1; i++)
        {
            PATH[i] = cdw[i];
        }
    }
    else
    {
        strcpy(PATH,cdw.c_str());
    }


    // If Config Exists Run
    if (configdataexists())
    {
        parseconfig();
    }


    // Unique filename to pass to BBS for
    // Reading in Detected Client Terminal.
    daemon.make_uuid(ENTHRAL_TEMP_PATH);

    // Lookup info for the passed socket descriptor
    daemon.get_host_info();


    // Parameter for Login Program and User Login ID.
    int c = '\0';
    for (;;)
    {
        c = getopt( argc, argv, "l:u:");

        if (c == EOF) break;
        switch (c)
        {
        case 'u':
            user = strdup(optarg);
            break;
        case 'l':
            login = strdup(optarg);
            break;

        default:
            printf("%c\n", c);
            show_usage();
            exit(1);
        }
    }

    if(login.size() > 0)
    {
        loginpath = login;
        login.erase();
    }
    else
    {
        loginpath = "/bin/login";
    }

    argv_init[0] = strdup(loginpath.c_str());
    argv_init[1] = (char *)daemon.m_hostaddr_string.c_str();
    argv_init[2] = (char *)daemon.m_hostname_string.c_str();

    // Pass Login user for External Process
    if(user.size() > 0)
    {
        argv_init[3] = strdup("-f");
        argv_init[4] = strdup(user.c_str());
    }

    // Filename for passing the TERM to the external program.
    if(daemon.m_term_passing.size() > 0)
    {
        argv_init[5] = strdup(daemon.m_term_passing.c_str());
    }

    // Startup Syslogd.
    openlog("telnet_daemon", LOG_PID, LOG_SYSLOG);

    syslog(LOG_INFO, "telnet_daemon in.telnetd PATH: %s", PATH);
    daemon.errlog((char *)"telnet_daemon in.telnetd PATH: %s", PATH);

    // Log Connection
    syslog(LOG_INFO, "telnet_daemon in.telnetd [%s] [Server Path]", loginpath.c_str());
    daemon.errlog((char *)"telnet_daemon in.telnetd [%s] [Server Path]", (char *)loginpath.c_str());

    syslog(LOG_INFO, "telnet_daemon in.telnetd [IP %s] [Host %s] [Connection Logged]",
           daemon.m_hostaddr_string.c_str(),
           daemon.m_hostname_string.c_str()
          );

    daemon.errlog((char *)"telnet_daemon in.telnetd [IP %s] [Host %s] [Connection Logged]",
                  (char *)daemon.m_hostaddr_string.c_str(),
                  (char *)daemon.m_hostname_string.c_str()
                 );

    // Send Startup Telnet Sequences to connecting client.
    // Ready for Terminal / NAWS Detection and setting defaults.
    daemon.errlog((char *)"send_startup_iac");
    daemon.send_startup_iac();

    // Look intitial TELOPT codes with (2) second pause then (2) second detection loop
    // To Catch Terminal Type and NAWS.
    daemon.errlog((char *)"loop_detection");
    daemon.loop_detection();
    daemon.errlog((char *)"loop_detection completed.");

    // Display Detected Term, Rows, Cols.
    daemon.errlog((char *)"Term Type: %s", (char *)daemon.getTermType().c_str());
    daemon.errlog((char *)"Term Cols: %i", daemon.getTermCols());
    daemon.errlog((char *)"Term Rows: %i", daemon.getTermRows());


    if (daemon.getTermType() == "undetected" || daemon.getTermType() == "VT220" || daemon.getTermType() == "")
    {
        daemon.errlog((char *)"No Term Detected, Disconnecting.");
        closelog();
        exit(1);
    }

    // Terminal Type Detection completed, write out to file for extrnal program
    // So the Forked process can read it in.
    std::ofstream out;
    out.open(daemon.m_term_passing.c_str(),ios::trunc);
    if (out.is_open())
    {
        out << daemon.getTermType() << endl;
        out.close();
    }


    daemon.errlog((char *)"Starting BBS Server forkpty()");

    // If the Connection is good, fork and start the BBS
    pid = forkpty(&ptyfd, NULL, NULL, NULL);

    daemon.errlog((char *)"ptyfd: %i", ptyfd);


    // Pid 0 Start Child Process.
    if (pid == 0)
    {
        setsid();
        tcsetpgrp(0, getpid());

        // exec shell, with correct argv and env
        execv(loginpath.c_str(), argv_init);
        syslog(LOG_INFO, "child process created for [IP %s] pid == 0", daemon.m_hostaddr_string.c_str());
        daemon.errlog((char *)"child process created for [IP %s] pid == 0", (char*)daemon.m_hostaddr_string.c_str());
        exit(1);

    }
    // Pid -1 is an error
    else if(pid == -1)
    {
        syslog(LOG_INFO, "fork() Error, exiting [IP %s] pid == -1", daemon.m_hostaddr_string.c_str());
        daemon.errlog((char *)"fork() Error, exiting [IP %s] pid == -1", (char*)daemon.m_hostaddr_string.c_str());
        closelog();
        exit(1);
    }
    else if(pid > 0)
    {
        // Parent process.
        syslog(LOG_INFO, "parent process for [IP %s] pid > 0", daemon.m_hostaddr_string.c_str());
        daemon.errlog((char *)"parent process for [IP %s] pid > 0", (char*)daemon.m_hostaddr_string.c_str());
    }

    // Setup Detected Screen Size.
    struct winsize ws;

    // setup Term
    init_termbuf();
#ifdef TIOCSWINSZ
    if (daemon.getTermCols() || daemon.getTermRows())
    {
        memset(&ws, 0, sizeof(ws));
        ws.ws_col = daemon.getTermCols();
        ws.ws_row = daemon.getTermRows();
        ioctl(ptyfd, TIOCSWINSZ, (char *)&ws);
    }
#endif


    // Start Main Parent Loop for communication with child (BBS)
    daemon.errlog((char *)"Starting Parent Loop");
    daemon.loop_parent_process(ptyfd);
    daemon.errlog((char *)"Closing Parent Loop");

    raise(SIGHUP);

    syslog(LOG_INFO, "in.telnetd [IP %s] [Closed Connection]", daemon.m_hostaddr_string.c_str());
    daemon.errlog((char *)"in.telnetd [IP %s] [Closed Connection]", (char*)daemon.m_hostaddr_string.c_str());

    closelog();

    remove(daemon.m_term_passing.c_str());

    _exit(0);


}
示例#6
0
DataHandler::resource DataHandler::read_resource(std::string path, std::string cookies, DataHandler::resource * data) {
    // prepend cwd() to path

    if (!verify_path(path))
        path = "/index.html";

    std::string cwd = get_working_path();
    path = cwd + path;
    this->logger->debug("Checking resource at: " + path);

    // first check if such a file even exists
    int fd = open(path.c_str(), O_RDONLY);
    if (fd < 0) {
        char * err = std::strerror(errno);
        throw DataHandler::FileNotFound("Error while reading file contents at " + path + ": " + std::string(err ? err : "unknown error"));
    }
    close(fd);

    // check mime type of resource
    DataHandler::Exec runner;
    std::string args[2] = { "/usr/bin/file", path };
    DataHandler::resource file_mime = runner.run_command(args);
    char * mime = file_mime.data;
    std::string ext = path.substr(path.length()-3);
    for(char c : ext)
        c = std::toupper(c);

    DataHandler::resource output;
    // now check for known mime types
    if (is(mime, "executable")) {
        // run the script, pass the data
        std::string args[2] = { path, "" }; // TODO: Fix me too!
        DataHandler::resource script_output = runner.run_command(args, data, cookies);
        output.data = script_output.data;
        output.size = script_output.size;
        output.type = "executable";
    }
    // TODO: Move this definition to some more reasonable place
    else if (is(mime, "HTML"))                       { output.type = "text/html; charset=UTF-8";  }
    else if (is(mime, "ASCII") && ext == "CSS")      { output.type = "text/css";                  }
    else if (is(mime, "ERROR") || is(mime, "ASCII")) { output.type = "text/plain; charset=UTF-8"; }
    else if (is(mime, "JPEG"))                       { output.type = "image/jpeg";                }
    else if (is(mime, "PNG"))                        { output.type = "image/png";                 }
    else if (is(mime, "MS Windows icon"))            { output.type = "image/vnd.microsoft.icon";  }

    if (output.type.length() > 0 && output.type != "executable") {
        DataHandler::Static getter;
        DataHandler::resource f = getter.get_file(path);
        output.data = f.data;
        output.size = f.size;
    }
    else if (output.type.length() == 0){
        std::string error_str = "Unsupported mime type: " + std::string(mime);
        // drop 'local' part of path
        size_t pos = 0;
        while ((pos = error_str.find(cwd)) != std::string::npos )
            error_str.erase(pos, cwd.length());

        throw DataHandler::Unsupported(error_str);
    }

    return output;
}