L L4D2node

CBaseServer::ProcessConnectionlessPacket

0x0010c7b0 · 5661 bytes · __thiscall

_ZN11CBaseServer27ProcessConnectionlessPacketEP11netpacket_s

Decompiled

undefined (2 params)

/* CBaseServer::ProcessConnectionlessPacket(netpacket_s*) */

uint __thiscall CBaseServer::ProcessConnectionlessPacket(CBaseServer *this,netpacket_s *param_1)

{
  undefined4 uVar1;
  code *pcVar2;
  char cVar3;
  byte bVar4;
  undefined2 uVar5;
  uint uVar6;
  KeyValues *this_00;
  int *piVar7;
  undefined4 *puVar8;
  undefined4 uVar9;
  undefined4 uVar10;
  CSteam3Server *this_01;
  uint uVar11;
  uint uVar12;
  undefined4 uVar13;
  int iVar14;
  CBaseServer *pCVar15;
  uint *puVar16;
  uint *puVar17;
  byte bVar18;
  uint uVar19;
  int iVar20;
  ushort uVar21;
  int in_GS_OFFSET;
  bool bVar22;
  double dVar23;
  undefined8 uVar24;
  undefined8 uVar25;
  longlong lVar26;
  uint in_stack_fffff548;
  uint local_a80;
  uint local_a7c;
  CUtlMemory<CLC_SplitPlayerConnect,int> *local_a78;
  uint local_a68;
  void *local_a58;
  undefined4 local_a54;
  undefined4 local_a50;
  int local_a4c;
  void *local_a48;
  undefined4 local_a44;
  undefined4 local_a40;
  undefined4 local_a3c;
  undefined4 local_a38;
  uint local_a34;
  int local_a30;
  uint *local_a2c;
  uint *local_a28;
  undefined4 local_a24;
  char local_a20 [256];
  char local_920 [256];
  uint local_820 [512];
  int local_20;
  
  local_a30 = *(int *)(param_1 + 0x30);
  puVar17 = *(uint **)(param_1 + 0x34);
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  local_a44 = *(undefined4 *)(param_1 + 0x1c);
  local_a28 = *(uint **)(param_1 + 0x38);
  local_a24 = *(undefined4 *)(param_1 + 0x3c);
  uVar9 = *(undefined4 *)(param_1 + 0x20);
  local_a3c = *(undefined4 *)(param_1 + 0x24);
  local_a38 = *(undefined4 *)(param_1 + 0x28);
  local_a40._1_3_ = (undefined3)((uint)uVar9 >> 8);
  bVar18 = (byte)*(uint *)(param_1 + 0x2c);
  local_a40 = uVar9;
  local_a2c = puVar17;
  if (local_a30 < 8) {
    if (puVar17 == local_a28) {
      local_a40 = CONCAT31(local_a40._1_3_,1);
      local_a30 = 1;
      local_a34 = 0;
      local_a2c = puVar17 + 1;
    }
    else if (local_a28 < puVar17) {
      local_a40 = CONCAT31(local_a40._1_3_,1);
      local_a34 = 0;
    }
    else {
      local_a2c = puVar17 + 1;
      local_a40._0_1_ = (char)uVar9;
      bVar22 = (char)local_a40 == '\0';
      local_a34 = *puVar17;
      if (bVar22) {
        iVar14 = 8 - local_a30;
        bVar4 = (byte)local_a30;
        local_a30 = local_a30 + 0x18;
        bVar18 = (byte)(((&CBitBuffer::s_nMaskTable)[iVar14] & local_a34) << (bVar4 & 0x1f)) |
                 bVar18;
        local_a34 = local_a34 >> ((byte)iVar14 & 0x1f);
        goto LAB_0010c84b;
      }
    }
    bVar18 = 0;
    uVar6 = CheckConnectionLessRateLimits((netadr_s *)param_1);
    cVar3 = (char)uVar6;
  }
  else {
    local_a30 = local_a30 + -8;
    if (local_a30 == 0) {
      local_a30 = 0x20;
      if (puVar17 == local_a28) {
        local_a30 = 1;
        local_a2c = puVar17 + 1;
        local_a34 = 0;
      }
      else if (local_a28 < puVar17) {
        local_a40 = CONCAT31(local_a40._1_3_,1);
        local_a34 = 0;
      }
      else {
        local_a2c = puVar17 + 1;
        local_a34 = *puVar17;
      }
    }
    else {
      local_a34 = *(uint *)(param_1 + 0x2c) >> 8;
    }
LAB_0010c84b:
    uVar6 = CheckConnectionLessRateLimits((netadr_s *)param_1);
    cVar3 = (char)uVar6;
  }
  if (cVar3 == '\0') goto LAB_0010c859;
  cVar3 = (**(code **)(*(int *)this + 0x58))(this);
  if ((cVar3 == '\0') || (bVar4 = Host_ShouldRun(), uVar19 = local_a34, bVar4 == 0)) {
    cVar3 = (**(code **)(*(int *)this + 0x60))(this);
    if ((cVar3 != '\0') || (bVar18 != 0)) goto LAB_0010c859;
LAB_0010c8e1:
    this_00 = KeyValues::operator_new((KeyValues *)0x2c,in_stack_fffff548);
                    /* try { // try from 0010c90a to 0010c90e has its CatchHandler @ 0010de78 */
    KeyValues::KeyValues(this_00,"OnNetLanConnectionlessPacket",(IKeyValuesSystem *)0x0,false);
    KeyValues::SetPtr(this_00,"rawpkt",param_1);
    piVar7 = (int *)(**(code **)(*g_pMatchFramework + 0x1c))(g_pMatchFramework);
    (**(code **)(*piVar7 + 8))(piVar7,this_00);
    goto LAB_0010c859;
  }
  if (bVar18 == 0x6a) {
    uVar9 = netadr_s::ToString((netadr_s *)param_1,false);
    ConMsg("A2A_ACK from %s\n",uVar9);
    uVar6 = (uint)bVar4;
    goto LAB_0010c859;
  }
  if ((char)bVar18 < 'k') {
    if (bVar18 != 0x38) {
      if ((char)bVar18 < '9') {
        if (bVar18 == 0) goto LAB_0010c8e1;
      }
      else {
        if (bVar18 == 0x57) {
          (**(code **)(*(int *)this + 0xf4))(this,param_1);
          uVar6 = (uint)bVar4;
          goto LAB_0010c859;
        }
        if (bVar18 == 0x69) {
          NET_OutOfBandPrintf(*(int *)(param_1 + 0xc),(netadr_s *)param_1,"%c00000000000000",0x6a);
          uVar6 = (uint)bVar4;
          goto LAB_0010c859;
        }
      }
      goto LAB_0010ce34;
    }
    if (local_a30 < 0x20) {
      if (local_a2c == local_a28) {
        local_a2c = local_a2c + 1;
        local_a40 = CONCAT31(local_a40._1_3_,1);
        uVar19 = 0;
        local_a30 = 1;
        local_a34 = 0;
      }
      else {
        if (local_a28 < local_a2c) {
          local_a40 = CONCAT31(local_a40._1_3_,1);
          local_a34 = 0;
          uVar12 = local_a34;
        }
        else {
          puVar17 = local_a2c + 1;
          uVar12 = *local_a2c;
          local_a2c = puVar17;
          if ((char)local_a40 == '\0') {
            uVar19 = ((&CBitBuffer::s_nMaskTable)[0x20 - local_a30] & uVar12) <<
                     ((byte)local_a30 & 0x1f) | local_a34;
            local_a34 = uVar12 >> ((byte)(0x20 - local_a30) & 0x1f);
            goto LAB_0010cfbb;
          }
        }
        local_a34 = uVar12;
        uVar19 = 0;
      }
    }
    else {
      local_a30 = local_a30 + -0x20;
      if (local_a30 == 0) {
        local_a30 = 0x20;
        if (local_a2c == local_a28) {
          local_a30 = 1;
          local_a34 = 0;
          local_a2c = local_a2c + 1;
        }
        else {
          if (local_a28 < local_a2c) {
            local_a40 = CONCAT31(local_a40._1_3_,1);
            goto LAB_0010cfb1;
          }
          local_a34 = *local_a2c;
          local_a2c = local_a2c + 1;
        }
      }
      else {
LAB_0010cfb1:
        local_a34 = 0;
      }
    }
LAB_0010cfbb:
    uVar24 = CBitRead::ReadLongLong((CBitRead *)&local_a44);
    uVar25 = CBitRead::ReadLongLong((CBitRead *)&local_a44);
    Msg("C2S_VALIDATE_SESSION from %llx, session %llx, host version %d.\n",uVar24,uVar25,uVar19);
    uVar12 = GetHostVersion();
    if (uVar12 == uVar19) {
      HostValidateSessionImpl();
      uVar6 = (uint)bVar4;
    }
    goto LAB_0010c859;
  }
  if (bVar18 == 0x6e) {
    (**(code **)(*(int *)this + 0xf8))(this,param_1,&local_a44);
    uVar6 = (uint)bVar4;
    goto LAB_0010c859;
  }
  if ((char)bVar18 < 'o') {
    if (bVar18 == 0x6b) {
      if (local_a30 < 0x20) {
        if (local_a2c == local_a28) {
          local_a2c = local_a2c + 1;
          local_a30 = 1;
        }
        else if (local_a2c <= local_a28) {
          local_a68 = *local_a2c;
          if ((char)local_a40 == '\0') {
            uVar6 = (&CBitBuffer::s_nMaskTable)[0x20 - local_a30] & local_a68;
            local_a68 = local_a68 >> ((byte)(0x20 - local_a30) & 0x1f);
            local_a7c = uVar6 << ((byte)local_a30 & 0x1f) | local_a34;
            local_a2c = local_a2c + 1;
          }
          else {
            local_a7c = 0;
            local_a2c = local_a2c + 1;
          }
          goto LAB_0010d320;
        }
        local_a40 = CONCAT31(local_a40._1_3_,1);
        local_a68 = 0;
        local_a7c = 0;
LAB_0010d320:
        if (local_a2c == local_a28) {
          local_a2c = local_a2c + 1;
          local_a30 = 1;
        }
        else if (local_a2c <= local_a28) {
          uVar19 = *local_a2c;
          if ((char)local_a40 == '\0') {
            uVar6 = ((&CBitBuffer::s_nMaskTable)[0x20 - local_a30] & uVar19) <<
                    ((byte)local_a30 & 0x1f) | local_a68;
            local_a68 = uVar19 >> ((byte)(0x20 - local_a30) & 0x1f);
            local_a2c = local_a2c + 1;
          }
          else {
            uVar6 = 0;
            local_a68 = uVar19;
            local_a2c = local_a2c + 1;
          }
          goto LAB_0010d353;
        }
        local_a40 = CONCAT31(local_a40._1_3_,1);
        local_a68 = 0;
        uVar6 = 0;
LAB_0010d353:
        if (local_a2c == local_a28) {
          local_a2c = local_a2c + 1;
          local_a30 = 1;
          local_a34 = 0;
          local_a40 = CONCAT31(local_a40._1_3_,1);
        }
        else if (local_a28 < local_a2c) {
          local_a40 = CONCAT31(local_a40._1_3_,1);
          local_a34 = 0;
        }
        else {
          puVar17 = local_a2c + 1;
          local_a34 = *local_a2c;
          local_a2c = puVar17;
          if ((char)local_a40 == '\0') {
            uVar19 = (&CBitBuffer::s_nMaskTable)[0x20 - local_a30] & local_a34;
            local_a34 = local_a34 >> ((byte)(0x20 - local_a30) & 0x1f);
            local_a80 = uVar19 << ((byte)local_a30 & 0x1f) | local_a68;
            goto LAB_0010caec;
          }
        }
        local_a80 = 0;
      }
      else {
        iVar14 = local_a30 + -0x20;
        local_a7c = local_a34;
        if (iVar14 == 0) {
          if (local_a2c == local_a28) {
            local_a30 = 1;
            local_a68 = 0;
            local_a2c = local_a2c + 1;
            goto LAB_0010d320;
          }
          if (local_a28 < local_a2c) {
            uVar6 = 0;
            local_a40 = CONCAT31(local_a40._1_3_,1);
          }
          else {
            uVar6 = *local_a2c;
            local_a2c = local_a2c + 1;
          }
LAB_0010d62c:
          if (local_a2c != local_a28) {
            if (local_a28 < local_a2c) {
              local_a40 = CONCAT31(local_a40._1_3_,1);
              local_a80 = 0;
            }
            else {
              local_a80 = *local_a2c;
              local_a2c = local_a2c + 1;
            }
LAB_0010d663:
            local_a30 = 0x20;
            if (local_a2c == local_a28) {
              local_a30 = 1;
              local_a34 = 0;
              local_a2c = local_a2c + 1;
            }
            else if (local_a28 < local_a2c) {
              local_a40 = CONCAT31(local_a40._1_3_,1);
              local_a34 = 0;
            }
            else {
              local_a34 = *local_a2c;
              local_a2c = local_a2c + 1;
            }
            goto LAB_0010caec;
          }
          local_a30 = 1;
          local_a68 = 0;
          local_a2c = local_a2c + 1;
          goto LAB_0010d353;
        }
        if (iVar14 < 0x20) {
          local_a68 = 0;
          local_a30 = iVar14;
          goto LAB_0010d320;
        }
        iVar14 = local_a30 + -0x40;
        if (iVar14 == 0) {
          uVar6 = 0;
          goto LAB_0010d62c;
        }
        if (iVar14 < 0x20) {
          uVar6 = 0;
          local_a68 = 0;
          local_a30 = iVar14;
          goto LAB_0010d353;
        }
        local_a30 = local_a30 + -0x60;
        if (local_a30 == 0) {
          local_a80 = 0;
          uVar6 = 0;
          goto LAB_0010d663;
        }
        local_a34 = 0;
        uVar6 = 0;
        local_a80 = 0;
      }
LAB_0010caec:
      CBitRead::ReadString((CBitRead *)&local_a44,local_a20,0x100,false,(int *)0x0);
      CBitRead::ReadString((CBitRead *)&local_a44,local_920,0x100,false,(int *)0x0);
      if (local_a30 < 8) {
        if (local_a2c == local_a28) {
          local_a2c = local_a2c + 1;
          local_a30 = 1;
LAB_0010d442:
          local_a40 = CONCAT31(local_a40._1_3_,1);
          uVar19 = 0;
        }
        else {
          if (local_a28 < local_a2c) goto LAB_0010d442;
          puVar17 = local_a2c + 1;
          uVar19 = *local_a2c;
          local_a2c = puVar17;
          if ((char)local_a40 == '\0') {
            iVar14 = 8 - local_a30;
            bVar18 = (byte)local_a30;
            local_a30 = local_a30 + 0x18;
            local_a68 = ((&CBitBuffer::s_nMaskTable)[iVar14] & uVar19) << (bVar18 & 0x1f) |
                        local_a34;
            local_a34 = uVar19 >> ((byte)iVar14 & 0x1f);
            goto LAB_0010cb89;
          }
        }
        local_a34 = uVar19;
        local_a58 = (void *)0x0;
        local_a54 = 0;
        local_a50 = 0;
        local_a4c = 0;
        local_a48 = (void *)0x0;
      }
      else {
        local_a30 = local_a30 + -8;
        local_a68 = local_a34 & 0xff;
        if (local_a30 == 0) {
          local_a30 = 0x20;
          if (local_a2c == local_a28) {
            local_a30 = 1;
            local_a34 = 0;
            local_a2c = local_a2c + 1;
          }
          else if (local_a28 < local_a2c) {
            local_a40 = CONCAT31(local_a40._1_3_,1);
            local_a34 = 0;
          }
          else {
            local_a34 = *local_a2c;
            local_a2c = local_a2c + 1;
          }
        }
        else {
          local_a34 = local_a34 >> 8;
        }
LAB_0010cb89:
        local_a58 = (void *)0x0;
        local_a54 = 0;
        local_a50 = 0;
        local_a4c = 0;
        local_a48 = (void *)0x0;
        if (0 < (int)local_a68) {
          CUtlVector<CLC_SplitPlayerConnect,CUtlMemory<CLC_SplitPlayerConnect,int>>::GrowVector
                    ((CUtlVector<CLC_SplitPlayerConnect,CUtlMemory<CLC_SplitPlayerConnect,int>> *)
                     &local_a58,local_a68);
          if (0 < (int)(local_a4c - local_a68)) {
            _V_memmove((void *)(local_a68 * 0x60 + (int)local_a58),local_a58,
                       (local_a4c - local_a68) * 0x60);
          }
          iVar14 = 0;
          uVar19 = 0;
          do {
            puVar8 = (undefined4 *)((int)local_a58 + iVar14);
            if (puVar8 != (undefined4 *)0x0) {
              *puVar8 = &PTR__CLC_SplitPlayerConnect_002a15e8;
              puVar8[3] = 0;
              puVar8[4] = 0;
              *(undefined8 *)(puVar8 + 5) = 0;
              puVar8[7] = 0;
              puVar8[8] = 0;
              *(undefined8 *)(puVar8 + 9) = 0;
              puVar8[0xb] = 0;
              puVar8[0xc] = 0;
              *(undefined1 *)(puVar8 + 0xd) = 0;
              *(undefined8 *)(puVar8 + 0xe) = 0;
              puVar8[0x10] = 0;
              puVar8[0x11] = 0;
              *(undefined1 *)(puVar8 + 1) = 1;
              puVar8[2] = 0;
              puVar8[0x13] = 0;
              puVar8[0x14] = 0;
              puVar8[0x15] = 0;
              puVar8[0x16] = 0;
              puVar8[0x17] = 0;
            }
            uVar19 = uVar19 + 1;
            iVar14 = iVar14 + 0x60;
          } while (local_a68 != uVar19);
          uVar19 = 0;
          do {
            if (local_a30 < 6) {
              if (local_a2c == local_a28) {
                local_a30 = 1;
                local_a34 = 0;
                local_a40 = CONCAT31(local_a40._1_3_,1);
                local_a2c = local_a2c + 1;
              }
              else if (local_a2c < local_a28) {
                puVar17 = local_a2c + 1;
                local_a34 = *local_a2c;
                local_a2c = puVar17;
                if ((char)local_a40 == '\0') {
                  local_a34 = local_a34 >> (6U - (char)local_a30 & 0x1f);
                  local_a30 = local_a30 + 0x1a;
                }
              }
              else {
LAB_0010ce80:
                local_a40 = CONCAT31(local_a40._1_3_,1);
                local_a34 = 0;
              }
            }
            else {
              local_a30 = local_a30 + -6;
              if (local_a30 == 0) {
                local_a30 = 0x20;
                if (local_a2c == local_a28) {
                  local_a30 = 1;
                  local_a2c = local_a2c + 1;
                  local_a34 = 0;
                }
                else {
                  if (local_a28 <= local_a2c) goto LAB_0010ce80;
                  local_a34 = *local_a2c;
                  local_a2c = local_a2c + 1;
                }
              }
              else {
                local_a34 = local_a34 >> 6;
              }
            }
            piVar7 = (int *)((int)local_a58 + uVar19 * 0x60);
                    /* try { // try from 0010ccef to 0010ccf1 has its CatchHandler @ 0010dddc */
            (**(code **)(*piVar7 + 0x18))(piVar7,&local_a44);
            uVar19 = uVar19 + 1;
          } while (uVar19 != local_a68);
        }
      }
      local_a78 = (CUtlMemory<CLC_SplitPlayerConnect,int> *)&local_a58;
      local_a30 = local_a30 + -1;
      uVar19 = local_a34 & 1;
      if (local_a30 == 0) {
        local_a30 = 0x20;
        if (local_a2c == local_a28) {
          local_a30 = 1;
          local_a2c = local_a2c + 1;
          local_a34 = 0;
        }
        else if (local_a28 < local_a2c) {
          local_a40 = CONCAT31(local_a40._1_3_,1);
          local_a34 = 0;
        }
        else {
          local_a34 = *local_a2c;
          local_a2c = local_a2c + 1;
        }
      }
      else {
        local_a34 = local_a34 >> 1;
      }
                    /* try { // try from 0010d0bd to 0010d280 has its CatchHandler @ 0010dddc */
      lVar26 = CBitRead::ReadLongLong((CBitRead *)&local_a44);
      uVar9 = (undefined4)((ulonglong)lVar26 >> 0x20);
      cVar3 = netadr_s::IsLocalhost((netadr_s *)param_1);
      if (cVar3 == '\0') {
        local_a68._0_1_ = netadr_s::IsLoopback((netadr_s *)param_1);
      }
      else {
        local_a68._0_1_ = '\x01';
      }
      cVar3 = (**(code **)(*(int *)this + 0x60))(this);
      if ((cVar3 == '\0') && ((char)local_a68 != '\0')) {
LAB_0010d107:
        if (uVar6 == 3) {
          uVar21 = (ushort)local_a34;
          if (local_a30 < 0x10) {
            if (local_a2c == local_a28) {
              local_a2c = local_a2c + 1;
              local_a30 = 1;
              local_a34 = 0;
              local_a40 = CONCAT31(local_a40._1_3_,1);
            }
            else if (local_a28 < local_a2c) {
              local_a40 = CONCAT31(local_a40._1_3_,1);
              local_a34 = 0;
            }
            else {
              puVar17 = local_a2c + 1;
              local_a34 = *local_a2c;
              local_a2c = puVar17;
              if ((char)local_a40 == '\0') {
                iVar14 = 0x10 - local_a30;
                bVar18 = (byte)local_a30;
                local_a30 = local_a30 + 0x10;
                uVar21 = (ushort)(((&CBitBuffer::s_nMaskTable)[iVar14] & local_a34) <<
                                 (bVar18 & 0x1f)) | uVar21;
                local_a34 = local_a34 >> ((byte)iVar14 & 0x1f);
                goto LAB_0010d14b;
              }
            }
            uVar6 = 0;
          }
          else {
            local_a30 = local_a30 + -0x10;
            if (local_a30 == 0) {
              local_a30 = 0x20;
              if (local_a2c == local_a28) {
                local_a30 = 1;
                local_a34 = 0;
                local_a2c = local_a2c + 1;
              }
              else if (local_a28 < local_a2c) {
                local_a40 = CONCAT31(local_a40._1_3_,1);
                local_a34 = 0;
              }
              else {
                local_a34 = *local_a2c;
                local_a2c = local_a2c + 1;
              }
            }
            else {
              local_a34 = local_a34 >> 0x10;
            }
LAB_0010d14b:
            uVar6 = (uint)(short)uVar21;
            if (0x800 < uVar6) {
              (**(code **)(*(int *)this + 0xc4))(this,param_1,"Invalid Steam key length\n");
              goto LAB_0010d177;
            }
          }
          CBitRead::ReadBytes((CBitRead *)&local_a44,local_820,uVar6);
          (**(code **)(*(int *)this + 0xcc))
                    (this,param_1,local_a7c,local_a80,3,local_a20,local_920,local_820,uVar6,
                     local_a78,uVar19);
        }
        else {
                    /* try { // try from 0010d4b2 to 0010db74 has its CatchHandler @ 0010dddc */
          CBitRead::ReadString((CBitRead *)&local_a44,(char *)local_820,0x800,false,(int *)0x0);
          puVar17 = local_820;
          do {
            puVar16 = puVar17;
            uVar11 = *puVar16 + 0xfefefeff & ~*puVar16;
            uVar12 = uVar11 & 0x80808080;
            puVar17 = puVar16 + 1;
          } while (uVar12 == 0);
          if ((uVar11 & 0x8080) == 0) {
            puVar17 = (uint *)((int)puVar16 + 6);
            uVar12 = uVar12 >> 0x10;
          }
          (**(code **)(*(int *)this + 0xcc))
                    (this,param_1,local_a7c,local_a80,uVar6,local_a20,local_920,local_820,
                     (char *)((int)puVar17 +
                             ((-3 - (uint)CARRY1((byte)uVar12,(byte)uVar12)) - (int)local_820)),
                     local_a78,uVar19);
        }
        iVar14 = local_a4c + -1;
        if (-1 < iVar14) {
          iVar20 = iVar14 * 0x60;
          do {
            iVar14 = iVar14 + -1;
            puVar8 = (undefined4 *)((int)local_a58 + iVar20);
            iVar20 = iVar20 + -0x60;
            (**(code **)*puVar8)(puVar8);
          } while (iVar14 != -1);
        }
      }
      else {
        cVar3 = IsExclusiveToLobbyConnections(this);
        if (cVar3 == '\0') {
          iVar14 = *(int *)(this + 0x16c);
          iVar20 = *(int *)(this + 0x170);
          if ((iVar20 == 0 && iVar14 == 0) || (lVar26 == *(longlong *)(this + 0x16c)))
          goto LAB_0010d107;
          dVar23 = (double)*(float *)(this + 0x174) - net_time;
          uVar13 = netadr_s::ToString((netadr_s *)param_1,false);
          DevMsg("Rejecting connection request from %s (reservation cookie 0x%llx), server is reserved with reservation cookie 0x%llx for %.1f more seconds\n"
                 ,uVar13,(int)lVar26,uVar9,iVar14,iVar20,dVar23);
          (**(code **)(*(int *)this + 0xc4))(this,param_1,"#Valve_Reject_Reserved_For_Lobby");
        }
        else {
          uVar13 = *(undefined4 *)(this + 0x16c);
          uVar1 = *(undefined4 *)(this + 0x170);
          if (lVar26 == *(longlong *)(this + 0x16c)) goto LAB_0010d107;
          uVar10 = netadr_s::ToString((netadr_s *)param_1,false);
          DevMsg("Rejecting connection request from %s, client\'s reservation cookie %llx does not match servers\'s cookie %llx.\n"
                 ,uVar10,(int)lVar26,uVar9,uVar13,uVar1);
          (**(code **)(*(int *)this + 0xc4))(this,param_1,"#Valve_Reject_Connect_From_Lobby");
        }
LAB_0010d177:
        iVar14 = local_a4c + -1;
        if (-1 < iVar14) {
          iVar20 = iVar14 * 0x60;
          do {
            iVar14 = iVar14 + -1;
            puVar8 = (undefined4 *)((int)local_a58 + iVar20);
            iVar20 = iVar20 + -0x60;
            (**(code **)*puVar8)(puVar8);
          } while (iVar14 != -1);
        }
      }
      local_a4c = 0;
      CUtlMemory<CLC_SplitPlayerConnect,int>::Purge(local_a78);
      local_a48 = local_a58;
      CUtlMemory<CLC_SplitPlayerConnect,int>::Purge(local_a78);
      uVar6 = (uint)bVar4;
      goto LAB_0010c859;
    }
    if (bVar18 != 0x6c) {
LAB_0010ce34:
      uVar6 = IsUsingMasterLegacyMode();
      if ((char)uVar6 != '\0') {
        cVar3 = (**(code **)(*(int *)this + 0x70))(this);
        pCVar15 = (CBaseServer *)0x0;
        if (cVar3 == '\0') {
          pCVar15 = this;
        }
        (**(code **)(*(int *)g_pMaster + 0x34))(g_pMaster,param_1,this,pCVar15);
        goto LAB_0010c859;
      }
      iVar14 = Steam3Server();
      if (*(int *)(iVar14 + 4) != 0) {
        this_01 = (CSteam3Server *)Steam3Server();
        uVar6 = CSteam3Server::IsMasterServerUpdaterSharingGameSocket(this_01);
        if ((char)uVar6 != '\0') {
          iVar14 = Steam3Server();
          piVar7 = *(int **)(iVar14 + 4);
          pcVar2 = *(code **)(*piVar7 + 0x88);
          uVar5 = netadr_s::GetPort((netadr_s *)param_1);
          uVar19 = netadr_s::GetIP((netadr_s *)param_1);
          (*pcVar2)(piVar7,*(undefined4 *)(param_1 + 0x3c),*(undefined4 *)(param_1 + 0x28),
                    uVar19 >> 0x18 | (uVar19 & 0xff0000) >> 8 | (uVar19 & 0xff00) << 8 |
                    uVar19 << 0x18,uVar5);
          ForwardPacketsFromMasterServerUpdater(this);
          goto LAB_0010c859;
        }
      }
    }
  }
  else {
    if (bVar18 == 0x71) {
      (**(code **)(*(int *)this + 0xf0))(this,param_1,&local_a44);
      uVar6 = (uint)bVar4;
      goto LAB_0010c859;
    }
    if (bVar18 != 0x74) goto LAB_0010ce34;
  }
  uVar6 = (uint)bVar4;
LAB_0010c859:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return uVar6;
}

SourceMod gamedata

paste into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

Just a Signatures{} block, ready to drop into a gamedata file. Wire it up in your plugin however you like - SDKCall, DHooks, raw memory ops, or anything else.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)