undefined4 FUN_004045cc(int param_1,int param_2,undefined4 param_3,undefined4 param_4)
{
int iVar1;
int iVar2;
int iVar3;
undefined4 uVar4;
undefined4 uVar5;
int *piVar6;
int *piVar7;
undefined4 local_88;
undefined4 *local_84;
undefined4 local_80;
undefined4 local_7c;
undefined4 local_78;
int local_74;
int local_70;
int local_6c;
int local_68;
int local_64;
int local_60;
int local_5c;
int local_58;
int local_54;
int local_50;
int local_4c;
int local_48;
int local_44;
int local_40;
int *local_3c;
int *local_38;
int *local_34;
int *local_30;
iVar1 = find_hostconf(param_4);
if (iVar1 != 0) {
dprintf(7,"update_ia","found a host configuration named %s",*(undefined4 *)(iVar1 + 4));
}
iVar2 = FUN_00404330(param_4,0,*(undefined4 *)(param_2 + 8),*(undefined4 *)(param_2 + 0xc));
if (iVar2 == 0) {
uVar5 = duidstr(param_4);
dprintf(6,"update_ia","no binding found for %s",uVar5);
if (param_1 == 5) {
iVar1 = FUN_00403984(*(undefined4 *)(param_2 + 8),*(undefined4 *)(param_2 + 0xc),3,param_3);
if (iVar1 == 0) {
return 0;
}
dprintf(5,"update_ia","failed to make an option list");
}
else if (param_1 != 6) {
uVar5 = dhcp6msgstr(param_1);
dprintf(3,"update_ia","impossible message type %s",uVar5);
return 0xffffffff;
}
uVar5 = 0xffffffff;
}
else {
local_88 = 0;
local_84 = &local_88;
FUN_00404500(iVar2);
piVar7 = *(int **)(param_2 + 0x28);
if (piVar7 != (int *)0x0) {
local_3c = &local_5c;
local_38 = &local_54;
local_34 = &local_74;
local_30 = &local_6c;
local_40 = iVar2 + 0x1c;
do {
if (*(int *)(param_2 + 8) == 4) {
if (piVar7[2] == 5) {
local_54 = piVar7[5];
local_4c = piVar7[7];
local_58 = piVar7[4];
local_50 = piVar7[6];
local_48 = piVar7[8];
local_5c = piVar7[3];
local_44 = piVar7[9];
iVar3 = dhcp6_find_listval(local_40,5,local_3c,0);
if (iVar3 == 0) {
uVar5 = in6addr2str(local_38,0);
iVar3 = local_44;
uVar4 = FUN_00404404(iVar2);
dprintf(7,"update_ia","%s/%d is not found in %s",uVar5,iVar3,uVar4);
local_5c = 0;
local_58 = 0;
}
else {
local_58 = *(undefined4 *)(iVar3 + 0x10);
local_5c = *(int *)(iVar3 + 0xc);
}
uVar5 = 5;
piVar6 = local_3c;
goto LAB_00404834;
}
}
else {
if (*(int *)(param_2 + 8) != 6) {
dprintf(3,"update_ia","unsupported IA type");
return 0xffffffff;
}
if (piVar7[2] == 7) {
local_6c = piVar7[5];
local_64 = piVar7[7];
local_70 = piVar7[4];
local_68 = piVar7[6];
local_60 = piVar7[8];
local_74 = piVar7[3];
iVar3 = dhcp6_find_listval(local_40,7,local_34,0);
if (iVar3 == 0) {
uVar5 = in6addr2str(local_30,0);
uVar4 = FUN_00404404(iVar2);
dprintf(7,"update_ia","%s is not found in %s",uVar5,uVar4);
local_74 = 0;
local_70 = 0;
}
else {
local_70 = *(undefined4 *)(iVar3 + 0x10);
local_74 = *(int *)(iVar3 + 0xc);
}
uVar5 = 7;
piVar6 = local_34;
LAB_00404834:
iVar3 = dhcp6_add_listval(&local_88,uVar5,piVar6,0);
if (iVar3 == 0) {
dprintf(5,"update_ia","failed to copy binding info");
goto LAB_00404868;
}
}
}
piVar7 = (int *)*piVar7;
} while (piVar7 != (int *)0x0);
}
local_7c = 0;
local_78 = 0;
local_80 = *(undefined4 *)(iVar2 + 0x18);
FUN_00403448(&local_80,&local_88,iVar1);
iVar1 = dhcp6_add_listval(param_3,*(undefined4 *)(param_2 + 8),&local_80,&local_88);
if (iVar1 == 0) {
LAB_00404868:
dhcp6_clear_list(&local_88);
uVar5 = 0xffffffff;
}
else {
dhcp6_clear_list(&local_88);
uVar5 = 0;
}
}
return uVar5;
}