/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401fbf20 FUN_1401fbf20 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ void FUN_1401fbf20(longlong param_1,longlong param_2) { int *piVar1; undefined8 *puVar2; longlong lVar3; char cVar4; int iVar5; longlong *plVar6; longlong *plVar7; longlong *plVar8; longlong *plVar9; undefined8 uVar10; longlong lVar11; undefined *puVar12; bool bVar13; undefined1 auStack_1b8 [32]; undefined4 *local_198; undefined ***local_190; undefined ***local_188; undefined ***local_180; undefined ***local_178; undefined4 local_168 [2]; longlong *local_160; undefined **local_158; undefined4 local_150; undefined2 local_14c; undefined **local_148; undefined4 local_140; undefined2 local_13c; undefined **local_138; undefined4 local_130; undefined2 local_12c; undefined *local_128; undefined8 local_120; undefined *local_118; undefined *local_110; undefined **local_108; undefined4 local_100; undefined2 local_fc; undefined *local_f8; undefined8 local_f0; undefined1 local_e8; undefined8 local_e0; undefined1 local_d8; undefined8 local_d0; undefined8 local_c8; undefined1 local_c0; undefined8 local_b8; undefined1 local_b0; undefined8 local_a8; undefined8 uStack_a0; undefined8 local_98; ulonglong uStack_90; undefined8 local_88; undefined8 uStack_80; undefined8 local_78; undefined8 uStack_70; undefined4 local_68; undefined4 uStack_64; undefined4 uStack_60; undefined4 uStack_5c; undefined4 local_58; undefined4 uStack_54; undefined4 uStack_50; undefined4 uStack_4c; undefined4 local_48; undefined4 uStack_44; undefined4 uStack_40; undefined4 uStack_3c; undefined4 local_38; undefined4 uStack_34; undefined4 uStack_30; undefined4 uStack_2c; ulonglong local_28; local_d0 = 0xfffffffffffffffe; local_28 = DAT_1403463c0 ^ (ulonglong)auStack_1b8; local_148 = Proud::AddrPort::vftable; lVar11 = 0; local_140 = 0; local_13c = 0; local_158 = Proud::AddrPort::vftable; local_150 = 0; local_14c = 0; local_138 = Proud::AddrPort::vftable; local_130 = 0; local_12c = 0; local_48 = 0; uStack_44 = 0; uStack_40 = 0; uStack_3c = 0; cVar4 = FUN_14016b370(param_2,&local_48,0x10); if (cVar4 != '\0') { local_38 = local_48; uStack_34 = uStack_44; uStack_30 = uStack_40; uStack_2c = uStack_3c; cVar4 = FUN_14016be00(param_2,local_168); if ((((cVar4 != '\0') && (cVar4 = FUN_14016bda0(param_2,&local_148), cVar4 != '\0')) && (cVar4 = FUN_14016bda0(param_2,&local_158), cVar4 != '\0')) && (cVar4 = FUN_14016bda0(param_2,&local_138), cVar4 != '\0')) { local_108 = Proud::AddrPort::vftable; local_100 = *(undefined4 *)(param_2 + 0x38); local_fc = *(undefined2 *)(param_2 + 0x3c); plVar6 = (longlong *)FUN_1401d2620(param_1,&local_160,local_168[0]); if ((longlong *)*plVar6 != (longlong *)0x0) { lVar11 = *(longlong *)*plVar6; } if ((local_160 != (longlong *)0x0) && (local_160[1] = local_160[1] + -1, local_160[1] == 0)) { puVar2 = (undefined8 *)*local_160; if (puVar2 != (undefined8 *)0x0) { (**(code **)*puVar2)(puVar2,1); } FUN_14016d970(local_160); } if (((lVar11 != 0) && (*(char *)(lVar11 + 0x684) == '\0')) && ((*(longlong **)(lVar11 + 0x28) != (longlong *)0x0 && (lVar3 = **(longlong **)(lVar11 + 0x28), lVar3 != 0)))) { bVar13 = *(ulonglong *)(lVar11 + 0x30) < CONCAT44(uStack_34,local_38); if ((*(ulonglong *)(lVar11 + 0x30) == CONCAT44(uStack_34,local_38)) && (bVar13 = *(ulonglong *)(lVar11 + 0x38) < CONCAT44(uStack_2c,uStack_30), *(ulonglong *)(lVar11 + 0x38) == CONCAT44(uStack_2c,uStack_30))) { iVar5 = 0; } else { iVar5 = (1 - (uint)bVar13) - (uint)(bVar13 != 0); } if (((iVar5 == 0) && (*(longlong *)(lVar3 + 0x10) != 0)) && (*(int *)(*(longlong *)(lVar3 + 0x10) + 8) == 1)) { local_120 = 0; FUN_1401d3e30(lVar11 + 0x28,&local_120); FUN_1401d3cf0(&local_120); local_a8 = _DAT_14034c4b0; uStack_a0 = uRam000000014034c4b8; local_98 = _DAT_14034c4c0; local_88 = _DAT_14034c4d0; uStack_80 = _DAT_14034c4d8; local_78 = _DAT_14034c4e0; uStack_70 = _DAT_14034c4e8; local_68 = _DAT_14034c4f0; uStack_64 = uRam000000014034c4f4; uStack_60 = _DAT_14034c4f8; uStack_5c = uRam000000014034c4fc; local_58 = _DAT_14034c500; uStack_54 = _DAT_14034c504; uStack_50 = uRam000000014034c508; uStack_4c = uRam000000014034c50c; uStack_90 = _DAT_14034c4c8 & 0xffffffff00000000; (**(code **)(*(longlong *)(param_1 + 0x17d0) + 0x30)) ((longlong *)(param_1 + 0x17d0),*(undefined4 *)(lVar11 + 0x56c),&local_a8); local_178 = &local_108; local_180 = &local_138; local_188 = &local_158; local_190 = &local_148; local_198 = (undefined4 *)(lVar11 + 0x56c); (**(code **)(*(longlong *)(param_1 + 0x1818) + 0x70)) ((longlong *)(param_1 + 0x1818),1,&DAT_14034c4b0,param_1 + 0x1578); if ((*(char *)(param_1 + 0x1790) != '\0') || (*(int *)(param_1 + 0x6c8) != 0)) { plVar6 = (longlong *)FUN_1401705d0(&local_108,&local_f8); plVar7 = (longlong *)FUN_1401705d0(&local_138,&local_118); plVar8 = (longlong *)FUN_1401705d0(&local_158,&local_128); plVar9 = (longlong *)FUN_1401705d0(&local_148,&local_110); local_188 = (undefined ***)*plVar6; if ((undefined *)*plVar6 == (undefined *)0x0) { local_188 = (undefined ***)PTR_DAT_1403440a0; } local_190 = (undefined ***)*plVar7; if ((undefined *)*plVar7 == (undefined *)0x0) { local_190 = (undefined ***)PTR_DAT_1403440a0; } local_198 = (undefined4 *)*plVar8; if ((undefined *)*plVar8 == (undefined *)0x0) { local_198 = (undefined4 *)PTR_DAT_1403440a0; } puVar12 = (undefined *)*plVar9; if ((undefined *)*plVar9 == (undefined *)0x0) { puVar12 = PTR_DAT_1403440a0; } FUN_1401d4c70(param_1,1,L"HolepunchAck OK. ABS=%s ABR=%s BAS=%s BAR=%s",puVar12); if (((local_110 != (undefined *)0x0) && (local_110 != PTR_DAT_1403440a0)) && (local_110 + -8 != (undefined *)0x0)) { uVar10 = FUN_14016d8c0(); local_f0 = uVar10; FUN_14016db50(uVar10); local_e8 = 1; piVar1 = (int *)(local_110 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_110 + -8); } FUN_14016dbe0(uVar10); } local_110 = PTR_DAT_1403440a0; if (((local_128 != (undefined *)0x0) && (local_128 != PTR_DAT_1403440a0)) && (local_128 + -8 != (undefined *)0x0)) { uVar10 = FUN_14016d8c0(); local_e0 = uVar10; FUN_14016db50(uVar10); local_d8 = 1; piVar1 = (int *)(local_128 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_128 + -8); } FUN_14016dbe0(uVar10); } local_128 = PTR_DAT_1403440a0; if (((local_118 != (undefined *)0x0) && (local_118 != PTR_DAT_1403440a0)) && (local_118 + -8 != (undefined *)0x0)) { uVar10 = FUN_14016d8c0(); local_c8 = uVar10; FUN_14016db50(uVar10); local_c0 = 1; piVar1 = (int *)(local_118 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_118 + -8); } FUN_14016dbe0(uVar10); } if (((local_f8 != (undefined *)0x0) && (local_f8 != PTR_DAT_1403440a0)) && (local_f8 + -8 != (undefined *)0x0)) { local_118 = PTR_DAT_1403440a0; uVar10 = FUN_14016d8c0(); local_b8 = uVar10; FUN_14016db50(uVar10); local_b0 = 1; piVar1 = (int *)(local_f8 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_f8 + -8); } FUN_14016dbe0(uVar10); } } } } } } return; }