main (int argc, char *argv[]) { pwr_tStatus sts; qcom_sQid qid; qcom_sQid fqid; qcom_sGet get; qcom_sPut put; qdb_sInit init; qdb_sNode *np; qcom_sQattr attr; void *p; if (!qcom_Init(&sts, NULL)) exit(sts); attr.type = qcom_eQtype_forward; attr.quota = 100; fqid.nid = pwr_cNNodeId; fqid.qix = 550715; if(!qcom_CreateQ(&sts, &fqid, &attr)) exit(sts); qid.nid = pwr_cNNodeId; qid.qix = qdb_cIloopBack; if(!qcom_CreateQ(&sts, &qid, NULL)) exit(sts); if(!qcom_Bind(&sts, &qid, &fqid)) exit(sts); while (1) { get.data = NULL; p = qcom_Get(&sts, &qid, &get, 6000000); if (p == NULL) continue; printf("\nsender..: %d,%d\n", get.sender.nid, get.pid); printf("receiver: %d,%d\n", get.receiver.nid, get.receiver.qix); printf("reply...: %d,%d\n", get.reply.nid, get.reply.qix); printf("type....: %d,%d\n", get.type.b, get.type.s); printf("size....: %d\n", get.size); put.reply = qid; put.type = get.type; put.size = get.size; put.data = p; qcom_Reply(&sts, &get, &put); if (EVEN(sts)) qcom_Free(&sts, p); } }
int main (int argc, char **argv) { pwr_tStatus sts; unsigned int size; qcom_sQid myQId; alimsrv_sSupDataBuf *bp; qcom_sGet get; qcom_sPut put; alimsrv_sRequest request; XDR xdrs; qcom_sQattr qAttr; errh_Init("pwr_alim", errh_eAnix_alim); errh_SetStatus( PWR__SRVSTARTUP); if (!qcom_Init(&sts, 0, "pwr_alim")) { errh_Fatal("qcom_Init, %m", sts); exit(-1); } myQId.qix = alimsrv_cQix; myQId.nid = 0; qAttr.type = qcom_eQtype_private; qAttr.quota = 100; if (!qcom_CreateQ(&sts, &myQId, &qAttr, "pwr_alim")) { errh_Fatal("qcom_CreateQ, %m", sts); errh_SetStatus( PWR__SRVTERM); exit(-1); } if (!qcom_Bind(&sts, &myQId, &qcom_cQini)) { errh_Fatal("qcom_Bind, %m", sts); errh_SetStatus( PWR__SRVTERM); exit(-1); } sts = gdh_Init("pwr_alim"); if (EVEN(sts)) { errh_Fatal("gdh_Init, %m", sts); errh_SetStatus( PWR__SRVTERM); exit(-1); } init(); errh_SetStatus( PWR__SRUN); /* Loop forever and receive objid's */ for (;;) { do { get.maxSize = sizeof(request); get.data = (char *)&request; qcom_Get(&sts, &myQId, &get, qcom_cTmoEternal); if (sts != QCOM__TMO && sts != QCOM__QEMPTY) { if (get.type.b == qcom_eBtype_event) { event(&get); } } } while (ODD(sts) && get.type.s != alimsrv_eSubType_Request && get.type.b != alimsrv_cMsgType); if (EVEN(sts)) { errh_Error("qcom_Get, %m",sts); continue; } if (request.Xdr) { xdrmem_create(&xdrs, (char *)&request, sizeof(request), XDR_DECODE); if (!xdr_alimsrv_sRequest(&xdrs, &request)) { errh_Error("XDR Decode failed"); continue; } } bp = buildBuffer(&request, &size); if (ODD(sts)) { bp->Xdr = TRUE; xdrmem_create(&xdrs, (char *)bp, size, XDR_ENCODE); if (!xdr_alimsrv_sSupDataBuf(&xdrs, bp)) { errh_Error("XDR Encode failed"); } else { put.type.b = alimsrv_cMsgType; put.type.s = alimsrv_eSubType_Answer; put.reply = myQId; put.data = (char *) bp; put.size = size; if (!qcom_Reply(&sts, &get, &put)) errh_Error("qcom_Respond, %m", sts); } free(bp); } } }