undefined4
FUN_00407370(undefined4 param_1,char *param_2,undefined4 param_3,undefined4 param_4,int *param_5,
undefined4 param_6,undefined4 param_7,int *param_8)
{
int iVar1;
undefined4 uVar2;
int *piVar3;
int iVar4;
char *pcVar5;
int *piVar6;
int *piVar7;
undefined2 local_138 [4];
undefined1 auStack_130 [8];
undefined1 auStack_128 [40];
undefined1 auStack_100 [16];
undefined1 auStack_f0 [184];
int local_38;
undefined1 *local_34;
undefined1 *local_30;
if (param_5[2] == 0) {
pcVar5 = "no server ID option";
}
else {
iVar1 = duidcmp(param_5 + 2,&DAT_0043a634);
if (iVar1 == 0) {
if (*param_5 != 0) {
local_34 = auStack_130;
dhcp6_init_options(local_34);
iVar1 = duidcpy(auStack_128,&DAT_0043a634);
if (iVar1 == 0) {
iVar1 = duidcpy(local_34,param_5);
if (iVar1 == 0) {
local_38 = find_hostconf(param_5);
if (local_38 != 0) {
dprintf(7,"react_decline","found a host configuration named %s",
*(undefined4 *)(local_38 + 4));
}
iVar1 = FUN_00403aac(param_3,param_4,local_38,param_5,local_34);
if (iVar1 == 0) {
if ((*param_2 == -1) || (*param_8 != 0)) {
piVar7 = (int *)param_5[0xc];
if (piVar7 != (int *)0x0) {
local_30 = auStack_100;
do {
iVar1 = FUN_00404330(param_5,0,piVar7[2],piVar7[3]);
if (iVar1 == 0) {
iVar1 = FUN_00403984(piVar7[2],piVar7[3],3,local_30);
if (iVar1 != 0) {
dprintf(5,"decline_binding_ia","failed to make an option list");
goto LAB_004074e8;
}
}
else {
piVar6 = (int *)piVar7[10];
if (piVar6 != (int *)0x0) {
do {
if (*(int *)(iVar1 + 0x14) == 6) {
if (*(int *)(iVar1 + 8) == 0) {
piVar3 = (int *)dhcp6_find_listval(iVar1 + 0x1c,piVar6[2],piVar6 + 3,0
);
if (piVar3 != (int *)0x0) {
uVar2 = in6addr2str(piVar3 + 5,0);
dprintf(7,"decline_binding_ia",
"bound address %s has been marked as declined",uVar2);
decline_address(piVar3 + 5);
iVar4 = *piVar3;
if (iVar4 == 0) {
*(int *)(iVar1 + 0x20) = piVar3[1];
iVar4 = *piVar3;
}
else {
*(int *)(iVar4 + 4) = piVar3[1];
}
*(int *)piVar3[1] = iVar4;
dhcp6_clear_listval(piVar3);
if (*(int *)(iVar1 + 0x1c) != 0) goto LAB_004075d4;
FUN_004055f0(iVar1);
break;
}
}
else {
dprintf(3,"find_binding_ia","unknown binding type %d");
}
uVar2 = in6addr2str(piVar6 + 5,0);
dprintf(7,"decline_binding_ia","no binding found for address %s",uVar2);
}
LAB_004075d4:
piVar6 = (int *)*piVar6;
} while (piVar6 != (int *)0x0);
}
}
piVar7 = (int *)*piVar7;
} while (piVar7 != (int *)0x0);
}
local_138[0] = 0;
iVar1 = dhcp6_add_listval(auStack_f0,2,local_138,0);
if (iVar1 != 0) goto LAB_004076f8;
dprintf(5,"react_decline","failed to add a status code");
}
else {
local_138[0] = 5;
uVar2 = addr2str(param_6);
dprintf(6,"react_decline","unexpected unicast message from %s",uVar2);
iVar1 = dhcp6_add_listval(auStack_f0,2,local_138,0);
if (iVar1 != 0) {
LAB_004076f8:
FUN_0040621c(7,param_1,param_3,param_5,param_6,param_7,local_34,param_8,local_38);
dhcp6_clear_options(local_34);
return 0;
}
dprintf(3,"react_decline","failed to add a status code");
}
}
else {
if (local_38 == 0) {
uVar2 = duidstr(param_5);
}
else {
uVar2 = *(undefined4 *)(local_38 + 4);
}
dprintf(6,"react_decline","failed to process authentication information for %s",uVar2)
;
}
}
else {
dprintf(3,"react_decline","failed to copy client ID");
}
}
else {
dprintf(3,"react_decline","failed to copy server ID");
}
LAB_004074e8:
dhcp6_clear_options(local_34);
return 0xffffffff;
}
pcVar5 = "no client ID option";
}
else {
pcVar5 = "server ID mismatch";
}
}
dprintf(6,"react_decline",pcVar5);
return 0xffffffff;
}