PRL_RESULT ConnectToConsole( PRL_HANDLE vm ) { PRL_RESULT err, nJobReturnCode = PRL_ERR_UNINITIALIZED; PRL_HANDLE hJob = PrlDevDisplay_ConnectToVm( vm, PDCT_LOW_QUALITY_WITHOUT_COMPRESSION ); err = PrlJob_Wait(hJob, 10000); if (PRL_FAILED(err)) { fprintf(stderr, "PrlJob_Wait for PrlDevDisplay_ConnectToVm returned with error: %s\n", prl_result_to_string(err)); PrlHandle_Free(hJob); return err; } err = PrlJob_GetRetCode(hJob, &nJobReturnCode); if (PRL_FAILED(err)) { fprintf(stderr, "PrlJob_GetRetCode returned with error: %s\n", prl_result_to_string(err)); PrlHandle_Free(hJob); return err; } if (PRL_FAILED(nJobReturnCode)) { fprintf(stderr, "PrlDevDisplay_ConnectToVm returned with error: %s\n", prl_result_to_string(nJobReturnCode)); PrlHandle_Free(hJob); return nJobReturnCode; } return PRL_ERR_SUCCESS; }
PRL_RESULT LoginLocal(PRL_HANDLE &hServer) { PRL_HANDLE hJob, hJobResult = PRL_INVALID_HANDLE; PRL_RESULT err, nJobReturnCode = PRL_ERR_UNINITIALIZED; err = PrlApi_InitEx(PARALLELS_API_VER, PAM_DESKTOP, 0, 0); if (PRL_FAILED(err)) { fprintf(stderr, "PrlApi_InitEx returned with error: %s.\n", prl_result_to_string(err)); PrlApi_Deinit(); return err; } err = PrlSrv_Create(&hServer); if (PRL_FAILED(err)) { fprintf(stderr, "PrlSvr_Create failed, error: %s", prl_result_to_string(err)); PrlApi_Deinit(); return err; } hJob = PrlSrv_LoginLocal(hServer, NULL, NULL, PSL_NORMAL_SECURITY); err = PrlJob_Wait(hJob, 1000); if (PRL_FAILED(err)) { fprintf(stderr, "PrlJob_Wait for PrlSrv_Login returned with error: %s\n", prl_result_to_string(err)); PrlHandle_Free(hJob); PrlHandle_Free(hServer); PrlApi_Deinit(); return err; } err = PrlJob_GetRetCode(hJob, &nJobReturnCode); if (PRL_FAILED(err)) { fprintf(stderr, "PrlJob_GetRetCode returned with error: %s\n", prl_result_to_string(err)); PrlHandle_Free(hJob); PrlHandle_Free(hServer); PrlApi_Deinit(); return err; } if (PRL_FAILED(nJobReturnCode)) { PrlHandle_Free(hJob); PrlHandle_Free(hServer); fprintf(stderr, "Login job returned with error: %s\n", prl_result_to_string(nJobReturnCode)); PrlHandle_Free(hJob); PrlHandle_Free(hServer); PrlApi_Deinit(); return err; } return PRL_ERR_SUCCESS; }
static PRL_RESULT print_perfstats(PRL_HANDLE handle, const CmdParamData ¶m) { (void)param; unsigned int param_count; PRL_RESULT ret = PrlEvent_GetParamsCount(handle, ¶m_count); if (PRL_FAILED(ret)) return prl_err(ret, "PrlEvent_GetParamsCount returned the following error: %s", get_error_str(ret).c_str()); if (!param_count) return PRL_ERR_SUCCESS; // Print VM uuid if necessary if (param.list_all) { char uuid[NORMALIZED_UUID_LEN + 1] = {0}; PRL_UINT32 size = sizeof(uuid); PRL_HANDLE hVm; if (PRL_SUCCEEDED(PrlEvent_GetVm(handle, &hVm))) { PrlVmCfg_GetUuid(hVm, uuid, &size); PrlHandle_Free(hVm); } printf("%s\n", uuid); } for (unsigned int ndx = 0; ndx < param_count; ++ndx) { PrlHandle hPrm; ret = PrlEvent_GetParam(handle, ndx, hPrm.get_ptr()); if (PRL_FAILED(ret)) return prl_err(ret, "PrlEvent_GetParam returned the following error: %s", get_error_str(ret).c_str()); char name_buff[1024]; unsigned int len = sizeof(name_buff) - 1; ret = PrlEvtPrm_GetName(hPrm.get_handle(), name_buff, &len); if (PRL_FAILED(ret)) return prl_err(ret, "PrlEvtPrm_GetName returned the following error: %s", get_error_str(ret).c_str()); char val_buff[1024]; len = sizeof(val_buff) - 1; val_buff[len] = 0; PRL_PARAM_FIELD_DATA_TYPE nFieldType = PFD_UNKNOWN; PrlEvtPrm_GetType(hPrm.get_handle(), &nFieldType); if (nFieldType == PFD_BINARY) { if (strncmp(name_buff, PRL_NET_CLASSFUL_TRAFFIC_PTRN, sizeof(PRL_NET_CLASSFUL_TRAFFIC_PTRN) - 1) == 0) { PRL_STAT_NET_TRAFFIC net_stat_buf; len = sizeof(PRL_STAT_NET_TRAFFIC); if (PrlEvtPrm_GetBuffer(hPrm.get_handle(), &net_stat_buf, &len) == 0) { for (unsigned int i = 0; i < PRL_TC_CLASS_MAX; i++) fprintf(stdout, "\t%20s %2d %20llu %10u %20llu %10u\n", name_buff, i, net_stat_buf.incoming[i], net_stat_buf.incoming_pkt[i], net_stat_buf.outgoing[i], net_stat_buf.outgoing_pkt[i]); } } } else { ret = PrlEvtPrm_ToString(hPrm.get_handle(), val_buff, &len); if (PRL_FAILED(ret)) return prl_err(ret, "PrlEvtPrm_ToString returned the following error: %s", get_error_str(ret).c_str()); fprintf(stdout, "\t%s:\t%s\n", name_buff, val_buff); } } return PRL_ERR_SUCCESS; }