bool_t xdr_sbdPackage (XDR *xdrs, struct sbdPackage *sbdPackage, struct LSFHeader *hdr) { static char fname[] = "xdr_sbdPackage"; int i; char *sp; sp = sbdPackage->lsbManager; if (xdrs->x_op == XDR_DECODE) sp[0] = '\0'; if (!(xdr_int(xdrs, &sbdPackage->mbdPid) && xdr_int(xdrs, &sbdPackage->retryIntvl) && xdr_int(xdrs, &sbdPackage->preemPeriod) && xdr_int(xdrs, &sbdPackage->pgSuspIdleT) && xdr_int(xdrs, &sbdPackage->maxJobs) && xdr_int(xdrs, &sbdPackage->sbdSleepTime) && xdr_int(xdrs, &sbdPackage->managerId) && xdr_int(xdrs, &sbdPackage->numJobs) && xdr_string (xdrs, &sp, MAX_LSB_NAME_LEN))) { ls_syslog(LOG_ERR, I18N_FUNC_S_FAIL, fname, "xdr_int", "lsbManager"); return(FALSE); } if (xdrs->x_op == XDR_ENCODE) { for (i = 0; i < sbdPackage->numJobs; i++) if (!xdr_arrayElement(xdrs, (char *) &(sbdPackage->jobs[i]), hdr, xdr_jobSpecs)) return(FALSE); if (!xdr_sbdPackage1 (xdrs, sbdPackage, hdr)) return(FALSE); } return(TRUE); }
void do_probe(XDR * xdrs, int chfd, struct LSFHeader * reqHdr) { static char fname[] = "do_probe()"; char reply_buf[MSGSIZE]; XDR xdrs2; struct LSFHeader replyHdr; struct sbdPackage sbdPackage; struct jobSpecs *jobSpecs; int i; struct lsfAuth *auth = NULL; if (reqHdr->length == 0) return; initLSFHeader_(&replyHdr); replyHdr.opCode = ERR_NO_ERROR; jobSpecs = NULL; if (!xdr_sbdPackage(xdrs, &sbdPackage, reqHdr)) { ls_syslog(LOG_ERR, I18N_FUNC_FAIL, fname, "xdr_sbdPackage"); relife(); } else { if (sbdPackage.numJobs) { jobSpecs = my_calloc(sbdPackage.numJobs, sizeof(struct jobSpecs), fname); for (i = 0; i < sbdPackage.numJobs; i++) { if (!xdr_arrayElement(xdrs, (char *) &(jobSpecs[i]), reqHdr, xdr_jobSpecs)) { replyHdr.opCode = ERR_BAD_REQ; ls_syslog(LOG_ERR, _i18n_msg_get(ls_catd , NL_SETN, 5815, "%s: %s(%d) failed for %d jobs"), /* catgets 5815 */ fname, "xdr_arrayElement", i, sbdPackage.numJobs); break; } refreshJob(&(jobSpecs[i])); xdr_lsffree(xdr_jobSpecs, (char *)&jobSpecs[i], reqHdr); } } } if (replyHdr.opCode == ERR_NO_ERROR) if (!xdr_sbdPackage1(xdrs, &sbdPackage, reqHdr)) { ls_syslog(LOG_ERR, I18N_FUNC_FAIL, fname, "xdr_sbdPackage1"); relife(); } if (replyHdr.opCode == ERR_NO_ERROR) { if (myStatus & NO_LIM) { replyHdr.opCode = ERR_NO_LIM; } } xdrmem_create(&xdrs2, reply_buf, MSGSIZE, XDR_ENCODE); if (!xdr_encodeMsg(&xdrs2, NULL, &replyHdr, NULL, 0, auth)) { ls_syslog(LOG_ERR, I18N_FUNC_FAIL, fname, "xdr_encodeMsg"); relife(); } if (chanWrite_(chfd, reply_buf, XDR_GETPOS(&xdrs2)) <= 0) { ls_syslog(LOG_ERR, I18N_FUNC_FAIL_M, fname, "chanWrite_"); } xdr_destroy(&xdrs2); if (jobSpecs != NULL) free(jobSpecs); getManagerId(&sbdPackage); mbdPid = sbdPackage.mbdPid; sbdSleepTime = sbdPackage.sbdSleepTime; retryIntvl = sbdPackage.retryIntvl; preemPeriod = sbdPackage.preemPeriod; pgSuspIdleT = sbdPackage.pgSuspIdleT; maxJobs = sbdPackage.maxJobs; uJobLimit = sbdPackage.uJobLimit; rusageUpdateRate = sbdPackage.rusageUpdateRate; rusageUpdatePercent = sbdPackage.rusageUpdatePercent; jobTerminateInterval = sbdPackage.jobTerminateInterval; for (i = 0; i < sbdPackage.nAdmins; i++) FREEUP(sbdPackage.admins[i]); FREEUP(sbdPackage.admins); return; }