static void query_info_ready_cb (GObject *obj, GAsyncResult *res, gpointer user_data) { NemoPreviewPdfLoader *self = user_data; GError *error = NULL; GFileInfo *info; const gchar *content_type; info = g_file_query_info_finish (G_FILE (obj), res, &error); if (error != NULL) { g_warning ("Unable to query the mimetype of %s: %s", self->priv->uri, error->message); g_error_free (error); return; } content_type = g_file_info_get_content_type (info); if (content_type_is_native (content_type)) load_pdf (self, self->priv->uri); else load_libreoffice (self); g_object_unref (info); }
static void libreoffice_child_watch_cb (GPid pid, gint status, gpointer user_data) { NemoPreviewPdfLoader *self = user_data; GFile *file; gchar *uri; g_spawn_close_pid (pid); self->priv->libreoffice_pid = -1; file = g_file_new_for_path (self->priv->pdf_path); uri = g_file_get_uri (file); load_pdf (self, uri); g_object_unref (file); g_free (uri); }
/* Main thread - rule */ hash_stat ocl_rule_pdf(void) { int a,i; int err; int worker_thread_keys[32]; /* setup initial OpenCL vars */ int numplatforms=0; _clGetPlatformIDs(4, platform, (cl_uint *)&numplatforms); if (hash_err==load_pdf(hashlist_file)) return hash_err; for (i=0;i<nwthreads;i++) if (wthreads[i].type!=cpu_thread) { _clGetDeviceIDs(platform[wthreads[i].platform], CL_DEVICE_TYPE_GPU, 64, device, (cl_uint *)&devicesnum); context[i] = _clCreateContext(NULL, 1, &device[wthreads[i].deviceid], NULL, NULL, &err); if (wthreads[i].type != nv_thread) { char *binary; size_t binary_size; FILE *fp; char pbuf[100]; bzero(pbuf,100); char kernelfile[255]; _clGetDeviceInfo(device[wthreads[i].deviceid], CL_DEVICE_NAME, sizeof(pbuf),pbuf, NULL ); if (cs.R==2) sprintf(kernelfile,"%s/hashkill/kernels/amd_pdf2__%s.bin",DATADIR,pbuf); else if (cs.R==3) sprintf(kernelfile,"%s/hashkill/kernels/amd_pdf3__%s.bin",DATADIR,pbuf); else if (cs.R==4) sprintf(kernelfile,"%s/hashkill/kernels/amd_pdf4__%s.bin",DATADIR,pbuf); else if (cs.R==5) sprintf(kernelfile,"%s/hashkill/kernels/amd_pdf5__%s.bin",DATADIR,pbuf); else sprintf(kernelfile,"%s/hashkill/kernels/amd_pdf6__%s.bin",DATADIR,pbuf); char *ofname = kernel_decompress(kernelfile); if (!ofname) return hash_err; fp=fopen(ofname,"r"); if (!fp) { elog("Can't open kernel: %s\n",kernelfile); exit(1); } fseek(fp, 0, SEEK_END); binary_size = ftell(fp); fseek(fp, 0, SEEK_SET); binary=malloc(binary_size); fread(binary,binary_size,1,fp); fclose(fp); unlink(ofname); free(ofname); if (wthreads[i].first==1) hlog("Loading kernel: %s\n",kernelfile); program[i] = _clCreateProgramWithBinary(context[i], 1, &device[wthreads[i].deviceid], (size_t *)&binary_size, (const unsigned char **)&binary, NULL, &err ); _clBuildProgram(program[i], 1, &device[wthreads[i].deviceid], "", NULL, NULL ); free(binary); } else { #define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV 0x4000 #define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV 0x4001 char *binary; size_t binary_size; FILE *fp; char pbuf[100]; bzero(pbuf,100); char kernelfile[255]; _clGetDeviceInfo(device[wthreads[i].deviceid], CL_DEVICE_NAME, sizeof(pbuf),pbuf, NULL ); cl_uint compute_capability_major, compute_capability_minor; _clGetDeviceInfo(device[wthreads[i].deviceid], CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, sizeof(cl_uint), &compute_capability_major, NULL); _clGetDeviceInfo(device[wthreads[i].deviceid], CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV, sizeof(cl_uint), &compute_capability_minor, NULL); if ((compute_capability_major==1)&&(compute_capability_minor==0)) sprintf(pbuf,"sm10"); if ((compute_capability_major==1)&&(compute_capability_minor==1)) sprintf(pbuf,"sm11"); if ((compute_capability_major==1)&&(compute_capability_minor==2)) sprintf(pbuf,"sm12"); if ((compute_capability_major==1)&&(compute_capability_minor==3)) sprintf(pbuf,"sm13"); if ((compute_capability_major==2)&&(compute_capability_minor==0)) sprintf(pbuf,"sm20"); if ((compute_capability_major==2)&&(compute_capability_minor==1)) sprintf(pbuf,"sm21"); if ((compute_capability_major==3)&&(compute_capability_minor==0)) sprintf(pbuf,"sm30"); if (cs.R==2) sprintf(kernelfile,"%s/hashkill/kernels/nvidia_pdf2__%s.ptx",DATADIR,pbuf); else if (cs.R==3) sprintf(kernelfile,"%s/hashkill/kernels/nvidia_pdf3__%s.ptx",DATADIR,pbuf); else if (cs.R==4) sprintf(kernelfile,"%s/hashkill/kernels/nvidia_pdf4__%s.ptx",DATADIR,pbuf); else if (cs.R==5) sprintf(kernelfile,"%s/hashkill/kernels/nvidia_pdf5__%s.ptx",DATADIR,pbuf); else sprintf(kernelfile,"%s/hashkill/kernels/nvidia_pdf6__%s.ptx",DATADIR,pbuf); char *ofname = kernel_decompress(kernelfile); if (!ofname) return hash_err; fp=fopen(ofname,"r"); if (!fp) { elog("Can't open kernel: %s\n",kernelfile); exit(1); } fseek(fp, 0, SEEK_END); binary_size = ftell(fp); fseek(fp, 0, SEEK_SET); binary=malloc(binary_size); fread(binary,binary_size,1,fp); fclose(fp); unlink(ofname); free(ofname); if (wthreads[i].first==1) hlog("Loading kernel: %s\n",kernelfile); program[i] = _clCreateProgramWithBinary(context[i], 1, &device[wthreads[i].deviceid], (size_t *)&binary_size, (const unsigned char **)&binary, NULL, &err ); _clBuildProgram(program[i], 1, &device[wthreads[i].deviceid], NULL, NULL, NULL ); free(binary); } } pthread_mutex_init(&biglock, NULL); for (a=0;a<nwthreads;a++) { worker_thread_keys[a]=a; pthread_create(&crack_threads[a], NULL, ocl_rule_pdf_thread, &worker_thread_keys[a]); } rule_gen_parse(rule_file,ocl_pdf_callback,nwthreads,SELF_THREAD); for (a=0;a<nwthreads;a++) pthread_join(crack_threads[a], NULL); attack_over=2; printf("\n"); hlog("Done!\n%s",""); return hash_ok; }