/* ================================================================================ ClassifyWorker::run ================================================================================ */ void ClassifyWorker::run() { Glib::Mutex::Lock internal_lock(internal_mutex); // internal copies FenceType thisfence; while(!stopFlag) { for(currentjob = profile->popNextClassify(); currentjob.second == 255 && !stopFlag; currentjob = profile->popNextClassify()) classify_condition.wait(internal_mutex); if(!stopFlag) { thisfence = currentjob.first; internal_lock.release(); profile->classify(thisfence.first, thisfence.second, currentjob.second); internal_lock.acquire(); currentjob.second = 255; profile->clearProcessingFence(); sig_done(); } } }
void do_external_crack(struct db_main *db) { unsigned char *internal; c_int *external; log_event("Proceeding with external mode: %.100s", ext_mode); #ifdef HAVE_MPI if (mpi_p > 1) log_event("MPI: each node will process 1/%u of candidates", mpi_p); #endif internal = (unsigned char *)int_word; external = ext_word; while (*external) *internal++ = *external++; *internal = 0; status_init(&get_progress, 0); rec_restore_mode(restore_state); rec_init(db, save_state); crk_init(db, fix_state, NULL); do { if (gijohnmodule) { if (!first_time) { generate_external(); } else { first_time = 0; } } else { c_execute_fast(f_generate); } if (!ext_word[0]) break; if (f_filter) { c_execute_fast(f_filter); if (!ext_word[0]) continue; } #ifdef HAVE_MPI // MPI distribution if (mpi_line++ % mpi_p != mpi_id) continue; #endif int_word[0] = ext_word[0]; if ((int_word[1] = ext_word[1])) { internal = (unsigned char *)&int_word[2]; external = &ext_word[2]; do { if (!(internal[0] = external[0])) break; if (!(internal[1] = external[1])) break; if (!(internal[2] = external[2])) break; if (!(internal[3] = external[3])) break; internal += 4; external += 4; } while (1); } int_word[maxlen] = 0; if (crk_process_key(int_word)) break; } while (1); if (!event_abort) progress = 100; // For reporting DONE after a no-ETA run crk_done(); rec_done(event_abort); if (gijohnmodule) { if (!aborted_gijohn) { sig_done(); sendtheresults(); sig_init(); } else { sig_done(); destroysession(); } } }
/* ================================== ProfileWorker::run ================================== */ void ProfileWorker::run() { // Improve this profile->loadprofile(profxs, profys, profps); sig_done(); }
void ext_init(char *mode, struct db_main *db) { if (!strncmp(mode, "gijohn", 5)) gijohnmodule = 1; if (db) { maxlen = db->format->params.plaintext_length; return; } if (!gijohnmodule) { if (!(ext_source = cfg_get_list(SECTION_EXT, mode))) { #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "Unknown external mode: %s\n", mode); error(); } if (c_compile(ext_getchar, ext_rewind, &ext_globals)) { if (!ext_line) ext_line = ext_source->tail; #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "Compiler error in %s at line %d: %s\n", ext_line->cfg_name, ext_line->number, c_errors[c_errno]); error(); } } ext_word[0] = 0; c_execute(c_lookup("init")); if (gijohnmodule) { sig_done(); getthenewpiece(); init_external(xmlxml.keymap.charset, strlen(xmlxml.keymap.charset), xmlxml.keymap.firstword, xmlxml.keymap.lastword); sig_init(); } f_generate = c_lookup("generate"); f_filter = c_lookup("filter"); if (gijohnmodule) { ext_mode = mode; return; } if ((ext_flags & EXT_REQ_GENERATE) && !f_generate) { #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "No generate() for external mode: %s\n", mode); error(); } if ((ext_flags & EXT_REQ_FILTER) && !f_filter) { #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "No filter() for external mode: %s\n", mode); error(); } if ((ext_flags & (EXT_USES_GENERATE | EXT_USES_FILTER)) == EXT_USES_FILTER && f_generate) #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "Warning: external mode defines generate(), " "but is only used for filter()\n"); ext_mode = mode; }