static pwr_tStatus stop ( int argc, char **argv, ini_sContext *cp ) { pwr_tStatus sts; qcom_sQid qid; qcom_sPut put; char data[] = "Shutdown you fool!"; if (!qcom_Init(&sts, 0, "pwr_ini_stop")) { exit(sts); } qid.qix = 550715; qid.nid = 0; put.type.b = 11; put.type.s = 1; put.reply.qix = 0; put.reply.nid = 0; put.data = data; put.size = sizeof(data) + 1; qcom_Put(&sts, &qid, &put); return 0; }
void cvols_Notify ( cvol_sNotify *nmp ) { pwr_tStatus lsts; pool_sQlink *nl; gdb_sNode *np; qcom_sQid tgt; qcom_sPut put; gdb_AssumeLocked; if (gdbroot->db->nethandler.qix == 0) return; tgt.qix = net_cProcHandler; gdb_Unlock; /* Send to all nodes that have mounted affected volume. NOTA BENE !!! In this version we send to all known nodes. */ for ( nl = pool_Qsucc(NULL, gdbroot->pool, &gdbroot->db->nod_lh); nl != &gdbroot->db->nod_lh; nl = pool_Qsucc(NULL, gdbroot->pool, nl) ) { np = pool_Qitem(nl, gdb_sNode, nod_ll); if (np == gdbroot->my_node || np == gdbroot->no_node) continue; if (!np->flags.b.active) continue; /* Todo !!! What happens with consistency ? */ tgt.nid = np->nid; if (!net_Put(&lsts, &tgt, &nmp->msg, nmp->subtype, 0, nmp->size, 0)) errh_Warning("Notify: error %x sending subtype %s to node %s", lsts, "Notify", np->name); } /* Submit to the NETH ACP to check if any subscriptions are affected. */ put.type.b = net_cMsgClass; put.type.s = nmp->subtype; put.reply = qcom_cNQid; put.data = (char *)&nmp->msg; put.size = nmp->size; nmp->msg.hdr.hdr.xdr = 0; nmp->msg.hdr.hdr.msn = 0; nmp->msg.hdr.hdr.nid = gdbroot->my_node->nid; qcom_Put(&lsts, &qcom_cQnacp, &put); gdb_Lock; }
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, 60000); 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_Put(&sts, &get.reply, &put); if (EVEN(sts)) qcom_Free(&sts, p); } }
pwr_tStatus hd_NetSendMessage( qcom_sQid *qid, co_sPlatform *recPlatform, int subtype, hd_sHead *hp, unsigned int size ) { pwr_tStatus sts = HD__SUCCESS; pwr_tStatus sts2; qcom_sPut msg; XDR xdrs; if ((msg.data = (char*)qcom_Alloc(&sts, size)) == NULL) { return HD__INSVIRMEM; } msg.type.b = hd_cMsgClass; msg.type.s = hp->type = subtype; msg.reply = hp->qid; msg.size = size; if (recPlatform == NULL || co_IsXdrNeeded(&hp->platform, recPlatform)) { hp->xdr = TRUE; xdrmem_create(&xdrs, msg.data, size, XDR_ENCODE); sts = hd_NetXdrMessage(&xdrs, subtype, hp); if (EVEN(sts)) { qcom_Free(&sts2, msg.data); return sts; } } else { hp->xdr = FALSE; memcpy(msg.data, hp, size); } qcom_Put(&sts, qid, &msg); if (EVEN(sts)) { qcom_Free(&sts2, msg.data); } return sts; }
int Jop::que_put( const char *d) { pwr_tStatus sts; qcom_sPut put; static char data[200]; strcpy( data, d); printf("qcom_put: %s\n", data); put.data = data; put.size = strlen(data) + 1; put.type.b = qcom_eBtype__; put.type.s = qcom_eStype__; put.reply.qix = 0; put.reply.nid = 0; if ( jop_qcom_qid.qix == qcom_cNQix) return XNAV__NOTCONNECTED; qcom_Put( &sts, &jop_qcom_qid, &put); return sts; }
JNIEXPORT jobject JNICALL Java_jpwr_rt_Qcom_putString (JNIEnv *env, jobject object, jint qix, jint nid, jstring jdata) { int sts; const char *data; jclass pwrtStatus_id; jmethodID pwrtStatus_cid; jobject return_obj; jint jsts; qcom_sQid qid; qcom_sPut put; char *cstr; // int sts2; pwrtStatus_id = (*env)->FindClass( env, "jpwr/rt/PwrtStatus"); pwrtStatus_cid = (*env)->GetMethodID( env, pwrtStatus_id, "<init>", "(I)V"); data = (*env)->GetStringUTFChars( env, jdata, 0); cstr = (char *)data; put.data = (char *)data; put.size = strlen(data) + 1; put.type.b = qcom_eBtype__; put.type.s = qcom_eStype__; put.reply.qix = 0; put.reply.nid = 0; qid.qix = qix; qid.nid = nid; sts = qcom_Put( &sts, &qid, &put); (*env)->ReleaseStringUTFChars( env, jdata, cstr); // if ( ODD(sts)) // qcom_Free( &sts2, put.data); jsts = (jint) sts; return_obj = (*env)->NewObject( env, pwrtStatus_id, pwrtStatus_cid, jsts); return return_obj; }
main (int argc, char *argv[]) { pwr_tStatus sts; qcom_sQid qid; qcom_sGet get; qcom_sPut put; qcom_sQid loop; int data[DATA_SIZE]; int i; int j; int max = 1000; char *sp; qid = qcom_cNQid; if (argc < 2) exit(12); if (argc > 2) max = atoi(argv[2]); for (j = 0; j < DATA_SIZE; j++) data[j] = j; loop.nid = atoi(argv[1]); loop.qix = qcom_cIloopBack; if (!qcom_Init(&sts, NULL)) exit(sts); if (!qcom_CreateQ(&sts, &qid, NULL)) exit(sts); for (i = 1; i < max; i++) { for (j = 0; j < DATA_SIZE; j++) ++data[j]; sp = qcom_Alloc(&sts, sizeof(data)); if (sp == NULL) exit(sts); memcpy(sp, &data, sizeof(data)); put.type.b = 10; put.type.s = i; put.reply = qid; put.size = sizeof(data); put.data = sp; qcom_Put(&sts, &loop, &put); if (EVEN(sts)) exit(sts); get.data = NULL; sp = qcom_Get(&sts, &qid, &get, qcom_cTmoEternal); if (sp == NULL) continue; for (j = 0; j < DATA_SIZE; j++) { if (data[j] != *(int *)sp) { printf("index...: %d, (%d)\n", j, data[j]); break; } sp += sizeof(int); } // printf("\nsender..: %d,%X\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); // printf("memcmp..: %d\n", memcmp(get.data, &data, sizeof(data))); // printf("index...: %d, (%d)\n", j, data[j]); qcom_Free(&sts, get.data); } qcom_Exit(&sts); }
static pwr_tStatus stop ( int argc, char **argv, ini_sContext *cp ) { pwr_tStatus sts; qcom_sQid qid; qcom_sPut put; char data[] = "Shutdown you fool!"; /* qcom_sGet get; char *bp, *sp; int i; int len; int totlen; */ // errh_Interactive(); if (!qcom_Init(&sts, 0, "pwr_ini_stop")) { // errh_LogFatal(&cp->log, "qcom_Init, %m", sts); exit(sts); } // qcom_CreateQ(&sts, &cp->myQ, NULL, "pwr_ini_restart"); // if (EVEN(sts)) { // errh_LogFatal(&cp->log, "qcom_CreateQ, %m", sts); // exit(sts); // } // for (i = 0, totlen = 0; i < argc; i++) { // len = strlen(argv[i]); // totlen += 1 + len; // errh_LogInfo(&cp->log, "argv[%d]: %d \"%s\"", i, len, argv[i]); // } // bp = malloc(totlen); // for (i = 0, sp = bp; i < argc; i++) { // len = strlen(argv[i]); // memcpy(sp, argv[i], len + 1); // sp += len + 1; // } qid.qix = 550715; qid.nid = 0; put.type.b = 11; put.type.s = 1; put.reply.qix = 0; put.reply.nid = 0; put.data = data; put.size = sizeof(data) + 1; qcom_Put(&sts, &qid, &put); // while (1) { // char *s; // get.data = NULL; // s = qcom_Get(&sts, &cp->myQ, &get, 100000); // if (sts == QCOM__TMO && sts == QCOM__QEMPTY) { // break; // } else if (s != NULL) { // printf("%s\n", s); // qcom_Free(NULL, s); // } // if (get.type.s == 2) // break; // } return 0; }
static pwr_tStatus interactive ( int argc, char **argv, ini_sContext *cp ) { pwr_tStatus sts; qcom_sQid qid; qcom_sPut put; qcom_sGet get; char *bp, *sp; int i; int len; int totlen; errh_Interactive(); if (!qcom_Init(&sts, 0, "pwr_ini_restart")) { errh_LogFatal(&cp->log, "qcom_Init, %m", sts); exit(sts); } qcom_CreateQ(&sts, &cp->myQ, NULL, "pwr_ini_restart"); if (EVEN(sts)) { errh_LogFatal(&cp->log, "qcom_CreateQ, %m", sts); exit(sts); } for (i = 0, totlen = 0; i < argc; i++) { len = strlen(argv[i]); totlen += 1 + len; errh_LogInfo(&cp->log, "argv[%d]: %d \"%s\"", i, len, argv[i]); } bp = malloc(totlen); for (i = 0, sp = bp; i < argc; i++) { len = strlen(argv[i]); memcpy(sp, argv[i], len + 1); sp += len + 1; } qid.qix = 550715; qid.nid = 0; put.type.b = 10; put.type.s = 1; put.reply = cp->myQ; put.data = bp; put.size = totlen; qcom_Put(&sts, &qid, &put); while (1) { char *s; get.data = NULL; s = qcom_Get(&sts, &cp->myQ, &get, 100000); if (sts == QCOM__TMO && sts == QCOM__QEMPTY) { break; } else if (s != NULL) { printf("%s\n", s); qcom_Free(NULL, s); } if (get.type.s == 2) break; } return sts; }