void NetServer::SetCarInfo(const char *pszName) { std::vector<NetDriver> vecDrivers; RobotXml robotxml; robotxml.ReadRobotDrivers(NETWORKROBOT,vecDrivers); for (unsigned int i=0;i<vecDrivers.size();i++) { if (vecDrivers[i].name == m_strDriverName) { strncpy(vecDrivers[i].car,pszName,64); UpdateDriver(vecDrivers[i]); break; } } }
static int TryInstallDevice( const char *pInfFilePath, const char *pDevId, const char *pDevInstID, PCNC_DEV_CALLBACK pDevCallBack, void *pDevCallBackParam, bool updateDriver, BOOL *pRebootRequired) { GUID classGUID; char className[32]; if (!SetupDiGetINFClass(pInfFilePath, &classGUID, className, sizeof(className)/sizeof(className[0]), 0)) { ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiGetINFClass(%s)", pInfFilePath); return IDCANCEL; } //Trace("className=%s\n", className); HDEVINFO hDevInfo; hDevInfo = SetupDiCreateDeviceInfoList(&classGUID, 0); if (hDevInfo == INVALID_HANDLE_VALUE) { ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiCreateDeviceInfoList()"); return IDCANCEL; } int res = IDCONTINUE; SP_DEVINFO_DATA devInfoData; devInfoData.cbSize = sizeof(devInfoData); if (!pDevInstID) { if (StrCmpNI(pDevId, "root\\", 5) == 0) { /* * root\<enumerator-specific-device-ID> */ if (!SetupDiCreateDeviceInfo(hDevInfo, pDevId + 5, &classGUID, NULL, 0, DICD_GENERATE_ID, &devInfoData)) res = IDCANCEL; } else { SetLastError(ERROR_INVALID_DEVINST_NAME); res = IDCANCEL; } } else if (StrChr(pDevInstID, '\\')) { /* * <enumerator>\<enumerator-specific-device-ID>\<instance-specific-ID> */ if (!SetupDiCreateDeviceInfo(hDevInfo, pDevInstID, &classGUID, NULL, 0, 0, &devInfoData)) res = IDCANCEL; if (res != IDCONTINUE && GetLastError() == ERROR_DEVINST_ALREADY_EXISTS) { char *pTmpDevInstID = NULL; if (SetStr(&pTmpDevInstID, pDevInstID)) { char *pSave; char *p; p = STRTOK_R(pTmpDevInstID, "\\", &pSave); if (p && !lstrcmp(p, REGSTR_KEY_ROOTENUM)) { p = STRTOK_R(NULL, "\\", &pSave); if (SetupDiCreateDeviceInfo(hDevInfo, p, &classGUID, NULL, 0, DICD_GENERATE_ID, &devInfoData)) res = IDCONTINUE; } SetStr(&pTmpDevInstID, NULL); } else { SetLastError(ERROR_DEVINST_ALREADY_EXISTS); } } } else { /* * <enumerator-specific-device-ID> */ if (!SetupDiCreateDeviceInfo(hDevInfo, pDevInstID, &classGUID, NULL, 0, DICD_GENERATE_ID, &devInfoData)) res = IDCANCEL; } if (res != IDCONTINUE) { ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiCreateDeviceInfo()"); goto exit1; } char hardwareId[MAX_DEVICE_ID_LEN + 1 + 1]; SNPRINTF(hardwareId, sizeof(hardwareId)/sizeof(hardwareId[0]) - 1, "%s", pDevId); int hardwareIdLen; hardwareIdLen = lstrlen(hardwareId) + 1 + 1; hardwareId[hardwareIdLen - 1] = 0; if (!SetupDiSetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_HARDWAREID, (LPBYTE)hardwareId, hardwareIdLen * sizeof(hardwareId[0]))) { res = IDCANCEL; ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiSetDeviceRegistryProperty()"); goto exit1; } if (!SetupDiCallClassInstaller(DIF_REGISTERDEVICE, hDevInfo, &devInfoData)) { res = IDCANCEL; ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiCallClassInstaller()"); goto exit1; } if (pDevCallBack) { DevProperties devProperties; if (!devProperties.DevId(pDevId)) { res = IDCANCEL; goto exit2; } if (!pDevCallBack(hDevInfo, &devInfoData, &devProperties, NULL, pDevCallBackParam)) { res = IDCANCEL; goto exit2; } } if (updateDriver) res = UpdateDriver(pInfFilePath, pDevId, 0, TRUE, pRebootRequired); exit2: if (res != IDCONTINUE) { if (!SetupDiCallClassInstaller(DIF_REMOVE, hDevInfo, &devInfoData)) ShowLastError(MB_OK|MB_ICONWARNING, "SetupDiCallClassInstaller()"); } exit1: SetupDiDestroyDeviceInfoList(hDevInfo); return res; }
void NetServer::ReadDriverInfoPacket(ENetPacket *pPacket, ENetPeer * pPeer) { NetDriver driver; char hostName[256]; enet_address_get_host_ip (&driver.address,hostName,256); GfLogTrace ("Client Player Info connected from %s\n",hostName); PackedBuffer msg(pPacket->data, pPacket->dataLength); GfLogTrace("ReadDriverInfoPacket: packed data length=%d\n", msg.length()); try { msg.unpack_ubyte(); driver.idx = msg.unpack_int(); msg.unpack_string(driver.name, sizeof driver.name); msg.unpack_string(driver.car, sizeof driver.car); msg.unpack_string(driver.team, sizeof driver.team); msg.unpack_string(driver.author, sizeof driver.author); driver.racenumber = msg.unpack_int(); msg.unpack_string(driver.skilllevel, sizeof driver.skilllevel); driver.red = msg.unpack_float(); driver.green = msg.unpack_float(); driver.blue = msg.unpack_float(); msg.unpack_string(driver.module, sizeof driver.module); msg.unpack_string(driver.type, sizeof driver.type); driver.client = msg.unpack_int(); } catch (PackedBufferException &e) { GfLogFatal("ReadDriverInfoPacket: packed buffer error\n"); } GfLogTrace("ReadDriverInfoPacket: driver\n"); GfLogTrace(".host=%d\n", driver.address.host); GfLogTrace(".port=%d\n", driver.address.port); GfLogTrace(".idx=%d\n", driver.idx); GfLogTrace(".name=%s\n", driver.name); GfLogTrace(".car=%s\n", driver.car); GfLogTrace(".team=%s\n", driver.team); GfLogTrace(".author=%s\n", driver.author); GfLogTrace(".racenumber=%d\n", driver.racenumber); GfLogTrace(".skilllevel=%s\n", driver.skilllevel); GfLogTrace(".red=%.1f\n", driver.red); GfLogTrace(".green=%.1f\n", driver.green); GfLogTrace(".blue=%.1f\n", driver.blue); GfLogTrace(".module=%s\n", driver.module); GfLogTrace(".type=%s\n", driver.type); GfLogTrace(".client=%d\n", driver.client); //Make sure player name is unique otherwise disconnect player NetServerMutexData *pSData = LockServerData(); for(unsigned int i=0;i<pSData->m_vecNetworkPlayers.size();i++) { if (strcmp(driver.name,pSData->m_vecNetworkPlayers[i].name)==0) { SendPlayerRejectedPacket(pPeer,"Player name already used. Please choose a different name."); UnlockServerData(); return; } } UnlockServerData(); driver.address.host = pPeer->address.host; driver.hostPort = pPeer->address.port; SendPlayerAcceptedPacket(pPeer); UpdateDriver(driver); GfLogTrace("Reading Driver Info Packet: Driver: %s,Car: %s\n",driver.name,driver.car); }