/** * Notifies the LDM of the class of data-products that will be sent via LDM-6 * protocols. * * Arguments: * proxy Pointer to the LDM proxy data-structure. * offer Pointer to the data-product class structure which will * be offered to the LDM. * want Pointer to a pointer to a data-product class structure. * "*want" will be set the data-product class structure * that the LDM wants. The client should call * "free_prod_class(*want)" when the product-class is no * longer needed. * Returns: * 0 Success. "*clsspp" might be modified. * LP_RPC_ERROR RPC error. "log_start()" called. * LP_LDM_ERROR LDM error. "log_start()" called. */ static LdmProxyStatus my_hiya_6( LdmProxy* const proxy, prod_class_t* const offer, prod_class_t** const want) { CLIENT* const clnt = proxy->clnt; hiya_reply_t* reply; LdmProxyStatus status; reply = hiya_6(offer, clnt); if (NULL == reply) { status = getStatus(proxy, "HIYA_6", NULL); } else { switch (reply->code) { case OK: *want = (prod_class_t*)PQ_CLASS_ALL; proxy->max_hereis = reply->hiya_reply_t_u.max_hereis; status = 0; break; case SHUTTING_DOWN: LOG_START1("%s: LDM shutting down", proxy->host); status = LP_LDM_ERROR; break; case BADPATTERN: LOG_START1("%s: Bad product-class pattern", proxy->host); status = LP_LDM_ERROR; break; case DONT_SEND: LOG_START1("%s: LDM says don't send", proxy->host); status = LP_LDM_ERROR; break; case RESEND: LOG_START1("%s: LDM says resend (ain't gonna happen)", proxy->host); status = LP_LDM_ERROR; break; case RESTART: LOG_START1("%s: LDM says restart (ain't gonna happen)", proxy->host); status = LP_LDM_ERROR; break; case REDIRECT: LOG_START1("%s: LDM says redirect (ain't gonna happen)", proxy->host); status = LP_LDM_ERROR; break; case RECLASS: *want = reply->hiya_reply_t_u.feedPar.prod_class; proxy->max_hereis = reply->hiya_reply_t_u.feedPar.max_hereis; clss_regcomp(*want); /* N.B. we use the downstream patterns */ /* Use of "buf" added to prevent SIGSEGV on 64-bit RHEL 6 */ (void)s_prod_class(buf, sizeof(buf)-1, *want); unotice("%s: reclass: %s", proxy->host, buf); status = 0; break; } if (LP_OK != status) udebug("max_hereis = %u", proxy->max_hereis); } return status; }
static int my_hiya_6(CLIENT *clnt, prod_class_t **clsspp) { static hiya_reply_t* reply; int error; reply = hiya_6(*clsspp, clnt); if (NULL == reply) { uerror("%s: HIYA_6 failure: %s", remote, clnt_errmsg(clnt)); error = ECONNABORTED; } else { switch (reply->code) { case OK: max_hereis = reply->hiya_reply_t_u.max_hereis; error = 0; break; case SHUTTING_DOWN: uerror("%s: LDM shutting down", remote); error = ECONNABORTED; break; case BADPATTERN: uerror("%s: Bad product-class pattern", remote); error = ECONNABORTED; break; case DONT_SEND: uerror("%s: LDM says don't send", remote); error = ECONNABORTED; break; case RESEND: uerror("%s: LDM says resend (ain't gonna happen)", remote); error = ECONNABORTED; break; case RESTART: uerror("%s: LDM says restart (ain't gonna happen)", remote); error = ECONNABORTED; break; case REDIRECT: uerror("%s: LDM says redirect (ain't gonna happen)", remote); error = ECONNABORTED; break; case RECLASS: *clsspp = reply->hiya_reply_t_u.feedPar.prod_class; max_hereis = reply->hiya_reply_t_u.feedPar.max_hereis; clss_regcomp(*clsspp); /* N.B. we use the downstream patterns */ unotice("%s: reclass: %s", remote, s_prod_class(NULL, 0, *clsspp)); error = 0; break; } if (!error) udebug("max_hereis = %u", max_hereis); } return error; }