| 429 | //----------------------------------------------------------------------------- |
| 430 | |
| 431 | void queryMasterServer(U8 flags, const char* gameType, const char* missionType, |
| 432 | U8 minPlayers, U8 maxPlayers, U8 maxBots, U32 regionMask, U32 maxPing, |
| 433 | U16 minCPU, U8 filterFlags, U8 buddyCount, U32* buddyList ) |
| 434 | { |
| 435 | // Reset the list packet flag: |
| 436 | gGotFirstListPacket = false; |
| 437 | sgServerQueryActive = true; |
| 438 | clearServerList(); |
| 439 | |
| 440 | Con::executef( 4, "onServerQueryStatus", "start", "Querying master server", "0"); |
| 441 | |
| 442 | if ( buddyCount == 0 ) |
| 443 | { |
| 444 | sActiveFilter.type = ServerFilter::Normal; |
| 445 | |
| 446 | // Update the active filter: |
| 447 | if ( !sActiveFilter.gameType || dStrcmp( sActiveFilter.gameType, gameType ) != 0 ) |
| 448 | { |
| 449 | sActiveFilter.gameType = (char*) dRealloc( sActiveFilter.gameType, dStrlen( gameType ) + 1 ); |
| 450 | dStrcpy( sActiveFilter.gameType, gameType ); |
| 451 | } |
| 452 | |
| 453 | if ( !sActiveFilter.missionType || dStrcmp( sActiveFilter.missionType, missionType ) != 0 ) |
| 454 | { |
| 455 | sActiveFilter.missionType = (char*) dRealloc( sActiveFilter.missionType, dStrlen( missionType ) + 1 ); |
| 456 | dStrcpy( sActiveFilter.missionType, missionType ); |
| 457 | } |
| 458 | |
| 459 | sActiveFilter.queryFlags = flags | ServerFilter::NewStyleResponse; |
| 460 | sActiveFilter.minPlayers = minPlayers; |
| 461 | sActiveFilter.maxPlayers = maxPlayers; |
| 462 | sActiveFilter.maxBots = maxBots; |
| 463 | sActiveFilter.regionMask = regionMask; |
| 464 | sActiveFilter.maxPing = maxPing; |
| 465 | sActiveFilter.minCPU = minCPU; |
| 466 | sActiveFilter.filterFlags = filterFlags; |
| 467 | sActiveFilter.buddyCount = buddyCount; |
| 468 | dFree( sActiveFilter.buddyList ); |
| 469 | sActiveFilter.buddyList = NULL; |
| 470 | } |
| 471 | else |
| 472 | { |
| 473 | sActiveFilter.type = ServerFilter::Buddy; |
| 474 | sActiveFilter.buddyCount = buddyCount; |
| 475 | sActiveFilter.buddyList = (U32*) dRealloc( sActiveFilter.buddyList, buddyCount * 4 ); |
| 476 | sActiveFilter.queryFlags = ServerFilter::NewStyleResponse; |
| 477 | dMemcpy( sActiveFilter.buddyList, buddyList, buddyCount * 4 ); |
| 478 | clearServerList(); |
| 479 | } |
| 480 | |
| 481 | // Pick a random master server from the list: |
| 482 | gMasterServerList.clear(); |
| 483 | Vector<MasterInfo> *masterList = getMasterServerList(); |
| 484 | for ( U32 i = 0; i < (U32)masterList->size(); i++ ) |
| 485 | gMasterServerList.push_back( (*masterList)[i] ); |
| 486 | |
| 487 | // Clear the master server ping: |
| 488 | gMasterServerPing.time = 0; |
no test coverage detected