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;
}