int HPCupsFilter::StartPrintJob(int argc, char *argv[]) { int fd = 0; cups_raster_t *cups_raster; int err = 0; memset(&m_JA, 0, sizeof(JobAttributes)); struct tm *t; struct timeval tv; time_t long_time; time(&long_time); t = localtime(&long_time); gettimeofday(&tv, NULL); strncpy(m_JA.job_start_time, asctime(t), sizeof(m_JA.job_start_time)-1); // returns Fri Jun 5 08:12:16 2009 snprintf(m_JA.job_start_time+19, sizeof(m_JA.job_start_time) - 20, ":%ld %d", tv.tv_usec/1000, t->tm_year + 1900); // add milliseconds #ifdef UNITTESTING memset(m_JA.job_start_time,0,sizeof(m_JA.job_start_time)); snprintf(m_JA.job_start_time, sizeof(m_JA.job_start_time),"Mon Dec 9 17:48:58:586 2013" ); #endif m_iLogLevel = getHPLogLevel(); m_JA.job_id = atoi(argv[1]); strncpy(m_JA.user_name,argv[2],sizeof(m_JA.user_name)-1); m_ppd = ppdOpenFile(getenv("PPD")); if (m_ppd == NULL) { dbglog("DEBUG: ppdOpenFile failed for %s\n", getenv("PPD")); return SYSTEM_ERROR; } m_argv = argv; if (m_iLogLevel & BASIC_LOG) { for (int i = 0; i < argc; i++) { dbglog("argv[%d] = %s\n", i, argv[i]); } } if (argc == 7) { if (m_iLogLevel & BASIC_LOG) { dbglog("Page Stream Data Name: %s\n", argv[6] ); } if ((fd = open (argv[6], O_RDONLY)) == -1) { perror("ERROR: Unable to open raster file - "); return 1; } } m_pSys = new SystemServices(m_iLogLevel, m_JA.job_id, m_JA.user_name); /* * When user cancels a print job, the spooler sends SIGTERM signal * to the filter. Must catch this signal to send end job sequence * to the printer. */ signal(SIGTERM, HPCancelJob); cups_raster = cupsRasterOpen(fd, CUPS_RASTER_READ); if (cups_raster == NULL) { dbglog("cupsRasterOpen failed, fd = %d\n", fd); if (fd != 0) { close(fd); } closeFilter(); return 1; } if ((err = processRasterData(cups_raster))) { if (fd != 0) { close(fd); } if (m_iLogLevel & BASIC_LOG) dbglog("HPCUPS: processRasterData returned %d, calling closeFilter()\n", err); closeFilter(); cupsRasterClose(cups_raster); return 1; } if (fd != 0) { close(fd); } if (m_iLogLevel & BASIC_LOG) dbglog("HPCUPS: StartPrintJob end of job, calling closeFilter()\n"); closeFilter(); cupsRasterClose(cups_raster); return 0; }
int HPCupsFilter::StartPrintJob(int argc, char *argv[]) { int fd = 0; cups_raster_t *cups_raster; int err = 0; memset(&m_JA, 0, sizeof(JobAttributes)); struct tm *t; struct timeb tb; time_t long_time; time(&long_time); t = localtime(&long_time); ftime(&tb); strncpy(m_JA.job_start_time, asctime(t), sizeof(m_JA.job_start_time)-1); // returns Fri Jun 5 08:12:16 2009 snprintf(m_JA.job_start_time+19, sizeof(m_JA.job_start_time) - 20, ":%d %d", tb.millitm, t->tm_year + 1900); // add milliseconds getLogLevel(); m_JA.job_id = atoi(argv[1]); FILE *fp; char dFileName[32]; memset(dFileName, 0, sizeof(dFileName)); m_JA.job_id = atoi(argv[1]); snprintf (dFileName, sizeof(dFileName), "/var/spool/cups/d%05d-001", m_JA.job_id); if ((fp = fopen (dFileName, "r"))) { char line[258]; for (int i = 0; i < 10; i++) { fgets (line, 256, fp); if (!strncmp (line, "%%Pages:", 8)) { sscanf (line+9, "%d", &m_JA.total_pages); break; } } fclose (fp); } m_ppd = ppdOpenFile(getenv("PPD")); if (m_ppd == NULL) { dbglog("DEBUG: ppdOpenFile failed for %s\n", getenv("PPD")); return SYSTEM_ERROR; } m_argv = argv; if (m_iLogLevel & BASIC_LOG) { for (int i = 0; i < argc; i++) { dbglog("argv[%d] = %s\n", i, argv[i]); } } if (argc == 7) { if (m_iLogLevel & BASIC_LOG) { dbglog("Page Stream Data Name: %s\n", argv[6] ); } if ((fd = open (argv[6], O_RDONLY)) == -1) { perror("ERROR: Unable to open raster file - "); return 1; } } m_pSys = new SystemServices(m_iLogLevel, m_JA.job_id); /* * When user cancels a print job, the spooler sends SIGTERM signal * to the filter. Must catch this signal to send end job sequence * to the printer. */ signal(SIGTERM, HPCancelJob); cups_raster = cupsRasterOpen(fd, CUPS_RASTER_READ); if (cups_raster == NULL) { dbglog("cupsRasterOpen failed, fd = %d\n", fd); if (fd != 0) { close(fd); } closeFilter(); return 1; } if ((err = processRasterData(cups_raster))) { if (fd != 0) { close(fd); } if (m_iLogLevel & BASIC_LOG) dbglog("HPCUPS: processRasterData returned %d, calling closeFilter()", err); closeFilter(); cupsRasterClose(cups_raster); return 1; } if (fd != 0) { close(fd); } if (m_iLogLevel & BASIC_LOG) dbglog("HPCUPS: StartPrintJob end of job, calling closeFilter()"); closeFilter(); cupsRasterClose(cups_raster); return 0; }