| 494 | //----------------------------------------------------------------------------- |
| 495 | |
| 496 | void queryMasterServer(U8 flags, const char* gameType, const char* missionType, |
| 497 | U8 minPlayers, U8 maxPlayers, U8 maxBots, U32 regionMask, U32 maxPing, |
| 498 | U16 minCPU, U8 filterFlags, U8 buddyCount, U32* buddyList ) |
| 499 | { |
| 500 | // Reset the list packet flag: |
| 501 | gGotFirstListPacket = false; |
| 502 | sgServerQueryActive = true; |
| 503 | |
| 504 | Con::executef( "onServerQueryStatus", "start", "Querying master server", "0"); |
| 505 | |
| 506 | if ( buddyCount == 0 ) |
| 507 | { |
| 508 | sActiveFilter.type = ServerFilter::Normal; |
| 509 | |
| 510 | // Update the active filter: |
| 511 | if ( !sActiveFilter.gameType || String::compare( sActiveFilter.gameType, gameType ) != 0 ) |
| 512 | { |
| 513 | dsize_t gameTypeLen = dStrlen(gameType) + 1; |
| 514 | sActiveFilter.gameType = (char*) dRealloc( sActiveFilter.gameType, gameTypeLen ); |
| 515 | dStrcpy( sActiveFilter.gameType, gameType, gameTypeLen ); |
| 516 | } |
| 517 | |
| 518 | if ( !sActiveFilter.missionType || String::compare( sActiveFilter.missionType, missionType ) != 0 ) |
| 519 | { |
| 520 | dsize_t missionTypeLen = dStrlen(missionType) + 1; |
| 521 | sActiveFilter.missionType = (char*) dRealloc( sActiveFilter.missionType, missionTypeLen ); |
| 522 | dStrcpy( sActiveFilter.missionType, missionType, missionTypeLen ); |
| 523 | } |
| 524 | |
| 525 | sActiveFilter.queryFlags = flags | ServerFilter::NewStyleResponse; |
| 526 | sActiveFilter.minPlayers = minPlayers; |
| 527 | sActiveFilter.maxPlayers = maxPlayers; |
| 528 | sActiveFilter.maxBots = maxBots; |
| 529 | sActiveFilter.regionMask = regionMask; |
| 530 | sActiveFilter.maxPing = maxPing; |
| 531 | sActiveFilter.minCPU = minCPU; |
| 532 | sActiveFilter.filterFlags = filterFlags; |
| 533 | sActiveFilter.buddyCount = buddyCount; |
| 534 | dFree( sActiveFilter.buddyList ); |
| 535 | sActiveFilter.buddyList = NULL; |
| 536 | } |
| 537 | else |
| 538 | { |
| 539 | sActiveFilter.type = ServerFilter::Buddy; |
| 540 | sActiveFilter.buddyCount = buddyCount; |
| 541 | sActiveFilter.buddyList = (U32*) dRealloc( sActiveFilter.buddyList, buddyCount * 4 ); |
| 542 | sActiveFilter.queryFlags = ServerFilter::NewStyleResponse; |
| 543 | dMemcpy( sActiveFilter.buddyList, buddyList, buddyCount * 4 ); |
| 544 | clearServerList(); |
| 545 | } |
| 546 | |
| 547 | // Pick a random master server from the list: |
| 548 | gMasterServerList.clear(); |
| 549 | Vector<MasterInfo> *masterList = getMasterServerList(); |
| 550 | for ( U32 i = 0; i < masterList->size(); i++ ) |
| 551 | gMasterServerList.push_back( (*masterList)[i] ); |
| 552 | |
| 553 | // Clear the master server ping: |
no test coverage detected