void FUN_004155a4(int param_1)
{
undefined4 *puVar1;
int iVar2;
undefined4 *puVar3;
int *piVar4;
void *__ptr;
undefined4 *puVar5;
undefined *puVar6;
int local_30 [3];
undefined4 local_24;
undefined4 local_20;
iVar2 = *(int *)(*(int *)(param_1 + 8) + 8);
if (iVar2 == 0) {
puVar6 = &DAT_00429fec;
}
else if (iVar2 == 1) {
puVar6 = &DAT_00429fe8;
}
else {
puVar6 = &DAT_00427600;
}
dprintf(7,"renew_ia","renew IA: %s-%lu",puVar6,*(undefined4 *)(*(int *)(param_1 + 8) + 0xc));
piVar4 = *(int **)(param_1 + 0x1c);
if (piVar4 != (int *)0x0) {
if (*piVar4 == 0) {
*(int *)(piVar4[2] + 0x50) = piVar4[1];
}
else {
*(int *)(*piVar4 + 4) = piVar4[1];
}
*(int *)piVar4[1] = *piVar4;
__ptr = *(void **)(param_1 + 0x1c);
if (*(code **)((int)__ptr + 0x14) != (code *)0x0) {
(**(code **)((int)__ptr + 0x14))();
__ptr = *(void **)(param_1 + 0x1c);
}
free(__ptr);
*(undefined4 *)(param_1 + 0x1c) = 0;
}
*(undefined4 *)(param_1 + 0x14) = 1;
if (*(uint *)(param_1 + 0xc) < *(uint *)(param_1 + 0x10)) {
local_30[0] = *(uint *)(param_1 + 0x10) - *(uint *)(param_1 + 0xc);
}
else {
local_30[0] = 0;
}
local_30[1] = 0;
dhcp6_set_timer(local_30,*(undefined4 *)(param_1 + 0x18));
puVar1 = (undefined4 *)dhcp6_create_event(*(undefined4 *)(param_1 + 0x20),4);
if (puVar1 == (undefined4 *)0x0) {
dprintf(5,"renew_ia","failed to create a new event");
return;
}
iVar2 = *(int *)(param_1 + 0x20);
puVar1[1] = *(undefined4 *)(iVar2 + 0xc);
puVar5 = *(undefined4 **)(iVar2 + 0xc);
*puVar1 = 0;
*(undefined4 **)(iVar2 + 0xc) = puVar1;
*puVar5 = puVar1;
iVar2 = dhcp6_add_timer(client6_timo,puVar1);
puVar1[3] = iVar2;
if (iVar2 == 0) {
dprintf(5,"renew_ia","failed to create a new event timer");
}
else {
puVar5 = (undefined4 *)malloc(0x1c) //possible issue identified - semgrep
if (puVar5 == (undefined4 *)0x0) {
dprintf(5,"renew_ia","failed to create a new event data");
}
else {
puVar5[1] = 0;
puVar5[3] = 0;
puVar5[4] = 0;
puVar5[5] = 0;
puVar5[6] = 0;
puVar5[1] = puVar1[0x14];
puVar3 = (undefined4 *)puVar1[0x14];
*puVar5 = 0;
puVar5[2] = puVar1;
*puVar3 = puVar5;
puVar1[0x14] = puVar5;
iVar2 = duidcpy(puVar1 + 4,param_1 + 0x24);
if (iVar2 == 0) {
local_24 = *(undefined4 *)(param_1 + 0xc);
local_30[2] = *(undefined4 *)(*(int *)(param_1 + 8) + 0xc);
local_20 = *(undefined4 *)(param_1 + 0x10);
iVar2 = *(int *)(param_1 + 0x2c);
if (iVar2 != 0) {
if (*(code **)(iVar2 + 0x10) != (code *)0x0) {
iVar2 = (**(code **)(iVar2 + 0x10))(iVar2,local_30 + 2,param_1 + 0x1c,puVar5);
if (iVar2 != 0) {
dprintf(5,"renew_ia","failed to make renew data");
goto LAB_00415898;
}
}
}
puVar1[0xd] = 0;
dhcp6_set_timeoparam(puVar1);
dhcp6_reset_timer(puVar1);
if (*(int *)(param_1 + 0x30) != 0) {
iVar2 = copy_authparam();
puVar1[0x12] = iVar2;
if (iVar2 == 0) {
dprintf(4,"renew_ia","failed to copy authparam");
goto LAB_00415898;
}
}
*(undefined4 **)(param_1 + 0x1c) = puVar5;
client6_send(puVar1);
return;
}
dprintf(5,"renew_ia","failed to copy server ID");
}
}
LAB_00415898:
dhcp6_remove_event(puVar1);
return;
}