undefined4 FUN_00405924(int param_1,undefined4 param_2,undefined4 param_3)
{
int iVar1;
int *piVar2;
undefined4 uVar3;
int iVar4;
int *piVar5;
iVar1 = FUN_00404330(param_3,0,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc));
if (iVar1 == 0) {
iVar1 = FUN_00403984(*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc),3,param_2);
if (iVar1 != 0) {
dprintf(5,"release_binding_ia","failed to make an option list");
return 0xffffffff;
}
}
else {
piVar5 = *(int **)(param_1 + 0x28);
if (piVar5 != (int *)0x0) {
do {
while (*(int *)(iVar1 + 8) == 0) {
piVar2 = (int *)dhcp6_find_listval(iVar1 + 0x1c,piVar5[2],piVar5 + 3,0);
if (piVar2 != (int *)0x0) {
if (*(int *)(iVar1 + 0x14) == 4) {
uVar3 = in6addr2str(piVar2 + 5,0);
dprintf(7,"release_binding_ia","bound prefix %s/%d has been released",uVar3,piVar2[9])
;
iVar4 = *piVar2;
if (iVar4 == 0) goto LAB_00405b34;
LAB_00405a44:
*(int *)(iVar4 + 4) = piVar2[1];
*(int *)piVar2[1] = iVar4;
dhcp6_clear_listval(piVar2);
iVar4 = *(int *)(iVar1 + 0x1c);
}
else {
if (*(int *)(iVar1 + 0x14) == 6) {
release_address(piVar2 + 5);
uVar3 = in6addr2str(piVar2 + 5,0);
dprintf(7,"release_binding_ia","bound address %s has been released",uVar3);
}
iVar4 = *piVar2;
if (iVar4 != 0) goto LAB_00405a44;
LAB_00405b34:
*(int *)(iVar1 + 0x20) = piVar2[1];
*(int *)piVar2[1] = *piVar2;
dhcp6_clear_listval(piVar2);
iVar4 = *(int *)(iVar1 + 0x1c);
}
if (iVar4 == 0) {
FUN_004055f0(iVar1);
return 0;
}
}
piVar5 = (int *)*piVar5;
if (piVar5 == (int *)0x0) {
return 0;
}
}
dprintf(3,"find_binding_ia","unknown binding type %d");
piVar5 = (int *)*piVar5;
} while (piVar5 != (int *)0x0);
}
}
return 0;
}