void setReturnArgs(ParserControl *parm, XtokParamValues *ps) { CMPIValue value; XtokParamValue *outParam=NULL; CMPIArgs *args = NULL; /* Process OUT parameters */ outParam = ps->first; if (outParam) { args = newCMPIArgs(NULL); while (outParam) { value = str2CMPIValue(outParam->type, outParam->data.value.data.value, &outParam->data.valueRef); /* Add it to the args list */ args->ft->addArg ( args, outParam->name, &value, outParam->type); native_release_CMPIValue(outParam->type,&value); outParam = outParam->next; } parm->respHdr.outArgs = args; /* Note : Freeing of list will be done by * parser_heap_term() routine. */ } }
CMPIArgs *sfcc_hash_to_cimargs(VALUE hash) { CMPIArgs *args; args = newCMPIArgs(NULL); rb_hash_foreach(hash, hash_to_cimargs_iterator, (VALUE)args); return args; }
int main() { CMCIClient * cc; CMPIObjectPath * objectpath; CMPIStatus status; CMPIArgs * args; char *cim_host, *cim_host_passwd, *cim_host_userid; CMPIData retval; CMPIValue arg; /* Setup a connection to the CIMOM */ cim_host = getenv("CIM_HOST"); if (cim_host == NULL) cim_host = "localhost"; cim_host_userid = getenv("CIM_HOST_USERID"); if (cim_host_userid == NULL) cim_host_userid = "root"; cim_host_passwd = getenv("CIM_HOST_PASSWD"); if (cim_host_passwd == NULL) cim_host_passwd = "password"; cc = cmciConnect(cim_host, NULL, "5988", cim_host_userid, cim_host_passwd, NULL); printf("\n----------------------------------------------------------\n"); printf("Testing invokeMethod() ...\n"); objectpath = newCMPIObjectPath("root/cimv2", "TST_MethodProperties", NULL); CMAddKey(objectpath, "CreationClassName", "TST_MethodProperties", CMPI_chars); CMAddKey(objectpath, "Id", "Instance #1", CMPI_chars); /*---------------------------------------------------------------------*/ printf("+++T1:passing IN int16_t argument\n"); args = newCMPIArgs(NULL); arg.sint16 = 65535; args->ft->addArg(args, "Property_int16", &arg, CMPI_sint16); retval = cc->ft->invokeMethod( cc, objectpath, "Method_sint16_in", args, NULL, &status); /* Print the results */ printf( "invokeMethod() rc=%d, msg=%s\n", status.rc, (status.msg)? (char *)status.msg->hdl : NULL); if (args) CMRelease(args); if (status.msg) CMRelease(status.msg); if (!status.rc) { char *cv = value2Chars(retval.type,&(retval.value)); printf("result(s):\n\treturn value:%s\n", cv); if (cv != NULL) free(cv); } else goto done; /*---------------------------------------------------------------------*/ printf("+++T2:returning int16_t value\n"); retval = cc->ft->invokeMethod( cc, objectpath, "Method_sint16", NULL, NULL, &status); /* Print the results */ printf( "invokeMethod() rc=%d, msg=%s\n", status.rc, (status.msg)? (char *)status.msg->hdl : NULL); if (!status.rc) { char *cv = value2Chars(retval.type,&(retval.value)); printf("result(s):\n\treturn value:%s\n", cv); if (cv != NULL) free(cv); } if (status.msg) CMRelease(status.msg); /*---------------------------------------------------------------------*/ printf("+++ T3:passing OUT int16_t value\n"); args = newCMPIArgs(NULL); retval = cc->ft->invokeMethod( cc, objectpath, "Method_sint16_out", NULL, args, &status); /* Print the results */ printf( "invokeMethod() rc=%d, msg=%s\n", status.rc, (status.msg)? (char *)status.msg->hdl : NULL); if (args) { char *cv; CMPIData data = CMGetArg(args, "Arg_int16", NULL); if (!CMIsNullValue(data)) { cv = value2Chars(data.type,&(data.value)); printf("\n result(s): OUT Parm:Arg_int16 type: %d value:%s\n", data.type, cv); if (cv != NULL) free(cv); CMRelease(args); } } if (status.msg) CMRelease(status.msg); if (!status.rc) { char *cv = value2Chars(retval.type,&(retval.value)); printf("result(s):\n\treturn value:%s\n", cv); if (cv != NULL) free(cv); } else goto done; /*---------------------------------------------------------------------*/ done: if (objectpath) CMRelease(objectpath); if (cc) CMRelease(cc); return 0; }