| 661 | } |
| 662 | |
| 663 | int sicompare(serverinfo **ap, serverinfo **bp) |
| 664 | { |
| 665 | serverinfo *a = *ap, *b = *bp; |
| 666 | int dir = serversortdir ? -1 : 1; |
| 667 | if(a->weight > b->weight) return -dir; |
| 668 | if(a->weight < b->weight) return dir; |
| 669 | enet_uint32 ai = ENET_NET_TO_HOST_32(a->address.host), bi = ENET_NET_TO_HOST_32(b->address.host); |
| 670 | int ips = ai < bi ? -dir : (ai > bi ? dir : 0); // most steady base sorting |
| 671 | switch(serversort) |
| 672 | { |
| 673 | case SBS_NUMPL: // player number |
| 674 | if(a->numplayers < b->numplayers) return dir; |
| 675 | if(a->numplayers > b->numplayers) return -dir; |
| 676 | break; |
| 677 | case SBS_MAXPL: // maxplayers |
| 678 | if(a->maxclients < b->maxclients) return dir; |
| 679 | if(a->maxclients > b->maxclients) return -dir; |
| 680 | break; |
| 681 | case SBS_MINREM: // minutes remaining |
| 682 | if(a->minremain < b->minremain) return dir; |
| 683 | if(a->minremain > b->minremain) return -dir; |
| 684 | break; |
| 685 | case SBS_DESC: // description |
| 686 | { |
| 687 | static string ad, bd; |
| 688 | filtertext(ad, a->sdesc, FTXT__SERVDESC); |
| 689 | filtertext(bd, b->sdesc, FTXT__SERVDESC); |
| 690 | if(!ad[0] && bd[0]) return dir; |
| 691 | if(ad[0] && !bd[0]) return -dir; |
| 692 | int mdir = dir * strcasecmp(ad, bd); |
| 693 | if(mdir) return mdir; |
| 694 | break; |
| 695 | } |
| 696 | case SBS_IP: // IP |
| 697 | if(ips) return ips; |
| 698 | break; |
| 699 | case SBS_MAP: // map |
| 700 | { |
| 701 | int mdir = dir * strcasecmp(a->map, b->map); |
| 702 | if(mdir) return mdir; |
| 703 | break; |
| 704 | } |
| 705 | case SBS_MODE: // mode |
| 706 | { |
| 707 | const char *am = modestr(a->mode, modeacronyms > 0), *bm = modestr(b->mode, modeacronyms > 0); |
| 708 | int mdir = dir * strcasecmp(am, bm); |
| 709 | if(mdir) return mdir; |
| 710 | break; |
| 711 | } |
| 712 | } |
| 713 | if(serversort == SBS_PING || (!a->numplayers && !b->numplayers)) // ping |
| 714 | { |
| 715 | if(a->ping > b->ping) return dir; |
| 716 | if(a->ping < b->ping) return -dir; |
| 717 | } |
| 718 | if(ips) return ips; |
| 719 | if(a->port > b->port) return dir; |
| 720 | else return -dir; |
nothing calls this directly
no test coverage detected