/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400b5640 FUN_1400b5640 * Pseudocode, not original source. */ void FUN_1400b5640(longlong param_1,char param_2,undefined8 param_3,undefined *param_4) { int iVar1; longlong lVar2; int iVar3; int *piVar4; undefined8 *puVar5; undefined **ppuVar6; int *piVar7; longlong *plVar8; undefined *puVar9; undefined8 *puVar10; ulonglong uVar11; undefined *puVar12; ulonglong uVar13; uint uVar14; double dVar15; undefined1 local_res8 [8]; uint local_res18 [2]; undefined *local_res20; undefined *local_e8; undefined *local_e0; undefined *local_d8; undefined *local_d0; longlong local_c8 [2]; int *local_b8; undefined1 local_b0; int *local_a8; undefined1 local_a0; undefined **local_98; undefined1 local_90; int *local_88; undefined1 local_80; int *local_78; undefined1 local_70; undefined8 local_68 [6]; local_res18[0] = (uint)param_3; puVar10 = local_68; local_c8[1] = 0xfffffffffffffffe; if (*(char *)(param_1 + 0x608) == '\0') { if (((param_2 != '\0') && (local_res18[0] != 0x1d)) && ((lVar2 = *(longlong *)(param_1 + 0x670), *(char *)(lVar2 + 0x1790) != '\0' || (*(int *)(lVar2 + 0x6c8) != 0)))) { local_res8[0] = 0; (**(code **)(*(longlong *)(lVar2 + 0x70) + 0x158))((longlong *)(lVar2 + 0x70),local_res8); iVar3 = *(int *)(param_1 + 0x578); iVar1 = *(int *)(param_1 + 0x588); FUN_140071a20(*(longlong *)(param_1 + 0x670),(longlong *)&local_e0,param_3,param_4); (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x670) + 0x70) + 0x1c0))(); (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x670) + 0x70) + 0x1c0))(); uVar14 = 1; if (iVar1 == iVar3) { uVar14 = 2; } plVar8 = (longlong *)(*(longlong *)(param_1 + 0x670) + 0x70); plVar8 = (longlong *)(**(code **)(*plVar8 + 0xb0))(plVar8,&local_d8); piVar4 = (int *)*plVar8; if (piVar4 == (int *)0x0) { iVar3 = 0; } else if (piVar4 == (int *)PTR_DAT_140155010) { iVar3 = 0; } else { iVar3 = piVar4[-2]; } puVar9 = PTR_DAT_140155010; if (((local_d8 != (undefined *)0x0) && (local_d8 != PTR_DAT_140155010)) && (local_d8 + -8 != (undefined *)0x0)) { piVar4 = (int *)FUN_140030200(piVar4,PTR_DAT_140155010,param_3,param_4); local_78 = piVar4; FUN_14002e6e0(piVar4); local_70 = 1; piVar7 = (int *)(local_d8 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_1400302f0(local_d8 + -8); } FUN_14002e770((longlong)piVar4); } if (iVar3 != 0) { uVar14 = uVar14 + 1; } FUN_140030200(piVar4,puVar9,param_3,param_4); local_e8 = PTR_DAT_140155010; puVar5 = FUN_140064cd0(*(longlong *)(param_1 + 0x670),puVar10); FUN_14002ff30((longlong *)&local_d0,puVar10,param_3,param_4); (**(code **)*puVar5)(puVar5); uVar13 = (ulonglong)local_res18[0]; uVar11 = (ulonglong)*(uint *)(param_1 + 0x56c); ppuVar6 = &local_e8; FUN_14001b7a0((longlong *)ppuVar6, L"(first chance) to-peer client %d UDP punch lost##Reason:%d##CliInstCount=%d##RecentElapTime=%3.3f##DisconnedCount=%d##recv count=%d##last ok recv interval=%3.3f##Recurred:%d##LocalIP:%s##Remote peer behind NAT:%d##UDP kept time:%3.3f##Time diff since last RecvIssue:%3.3f##%s##Process=%s" ,uVar11,uVar13); if (((local_res20 != (undefined *)0x0) && (local_res20 != PTR_DAT_140155010)) && (local_res20 + -8 != (undefined *)0x0)) { ppuVar6 = (undefined **)FUN_140030200(ppuVar6,PTR_DAT_140155010,uVar11,uVar13); local_98 = ppuVar6; FUN_14002e6e0((int *)ppuVar6); local_90 = 1; piVar4 = (int *)(local_res20 + -4); *piVar4 = *piVar4 + -1; if (*piVar4 == 0) { FUN_1400302f0(local_res20 + -8); } FUN_14002e770((longlong)ppuVar6); } local_res20 = PTR_DAT_140155010; if (((local_d0 != (undefined *)0x0) && (local_d0 != PTR_DAT_140155010)) && (local_d0 + -8 != (undefined *)0x0)) { piVar7 = (int *)FUN_140030200(ppuVar6,PTR_DAT_140155010,uVar11,uVar13); local_b8 = piVar7; FUN_14002e6e0(piVar7); local_b0 = 1; piVar4 = (int *)(local_d0 + -4); *piVar4 = *piVar4 + -1; if (*piVar4 == 0) { FUN_1400302f0(local_d0 + -8); } FUN_14002e770((longlong)piVar7); } puVar9 = local_e8; puVar12 = &DAT_14011ae80; uVar11 = (ulonglong)uVar14; piVar4 = *(int **)(param_1 + 0x670); param_4 = local_e8; FUN_140073400((longlong)piVar4,uVar11,L"%s",local_e8); if (((puVar9 != (undefined *)0x0) && (puVar9 != PTR_DAT_140155010)) && (puVar9 + -8 != (undefined *)0x0)) { piVar4 = (int *)FUN_140030200(piVar4,uVar11,puVar12,param_4); local_a8 = piVar4; FUN_14002e6e0(piVar4); local_a0 = 1; piVar7 = (int *)(puVar9 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_1400302f0(puVar9 + -8); } FUN_14002e770((longlong)piVar4); } if (((local_e0 != (undefined *)0x0) && (local_e0 != PTR_DAT_140155010)) && (local_e0 + -8 != (undefined *)0x0)) { piVar7 = (int *)FUN_140030200(piVar4,uVar11,puVar12,param_4); local_88 = piVar7; FUN_14002e6e0(piVar7); local_80 = 1; piVar4 = (int *)(local_e0 + -4); *piVar4 = *piVar4 + -1; if (*piVar4 == 0) { FUN_1400302f0(local_e0 + -8); } FUN_14002e770((longlong)piVar7); } } if (*(char *)(param_1 + 0x608) == '\0') { *(undefined1 *)(param_1 + 0x618) = 1; } *(undefined1 *)(param_1 + 0x608) = 1; if (*(longlong *)(param_1 + 0x640) != 0) { *(undefined8 *)(*(longlong *)(param_1 + 0x640) + 0xd8) = 0; } if (param_2 != '\0') { plVar8 = (longlong *)(*(longlong *)(param_1 + 0x670) + 0x1818); param_4 = (undefined *)(param_1 + 0x56c); (**(code **)(*plVar8 + 0x40))(plVar8,1,&DAT_14015de10,param_4,local_res18); } local_c8[0] = 0; FUN_140072070((longlong *)(param_1 + 0x28),local_c8); if (local_res18[0] != 0x1d) { FUN_14007fc60(*(longlong **)(param_1 + 0x670),(ulonglong)*(uint *)(param_1 + 0x56c), (ulonglong)local_res18[0],param_4); } if (*(int *)(param_1 + 0x61c) < DAT_140155088) { *(int *)(param_1 + 0x61c) = *(int *)(param_1 + 0x61c) + 1; dVar15 = (double)(**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x670) + 0x70) + 0x1c0))() ; *(double *)(param_1 + 0x620) = dVar15 + DAT_14015c010; } } return; }