void insert_multicast_ip(uint param_1,uint param_2)
{
bool bVar1;
byte bVar2;
undefined1 uVar3;
byte *pbVar4;
char *pcVar5;
uint uVar6;
uint *puVar7;
uint uVar8;
uVar6 = param_1 >> 0x10 & 0x7f;
uVar8 = (param_1 & 0xff00) >> 8;
for (pbVar4 = DAT_0041b9d0;
(pbVar4 != (byte *)0x0 &&
(((*pbVar4 != uVar6 || (pbVar4[1] != uVar8)) || ((uint)pbVar4[2] != (param_1 & 0xff)))));
pbVar4 = *(byte **)(pbVar4 + 8)) {
}
if ((DAT_0041b9d4 & 0x3ff) == 0) {
return;
}
verbose("*** igmp: insert_multicast_ip..");
if (pbVar4 == (byte *)0x0) {
bVar1 = 0x100 < DAT_0041b9d8;
DAT_0041b9d8 = DAT_0041b9d8 + 1;
if (bVar1) {
return;
}
if ((uVar8 == 0 && uVar6 == 0) && ((param_1 & 0xff) == 1)) {
return;
}
pbVar4 = (byte *)malloc(0xc) //possible issue identified - semgrep
if (pbVar4 == (byte *)0x0) {
return;
}
pbVar4[4] = 0;
pbVar4[5] = 0;
pbVar4[6] = 0;
pbVar4[7] = 0;
*pbVar4 = (byte)uVar6;
pbVar4[1] = (byte)((param_1 & 0xff00) >> 8);
pbVar4[2] = (byte)param_1;
pbVar4[3] = 0;
pbVar4[8] = 0;
pbVar4[9] = 0;
pbVar4[10] = 0;
pbVar4[0xb] = 0;
if (DAT_0041b9d0 != (byte *)0x0) {
*(byte **)(pbVar4 + 8) = DAT_0041b9d0;
}
pcVar5 = "new[%x, %x]\n";
DAT_0041b9d0 = pbVar4;
}
else {
pcVar5 = "[%x, %x]\n";
}
verbose(pcVar5,param_1,param_2);
puVar7 = *(uint **)(pbVar4 + 4);
if (puVar7 != (uint *)0x0) {
do {
if ((*puVar7 == param_2) && ((uint)(byte)puVar7[1] == (param_1 >> 0x17 & 0x1f))) {
pcVar5 = inet_ntoa((in_addr)(param_2 << 0x18 | param_2 >> 0x18 | param_2 >> 8 & 0xff00 |
(param_2 & 0xff00) << 8));
bVar2 = FUN_00406ee0(pcVar5);
if ((uint)bVar2 != (int)*(char *)((int)puVar7 + 5)) {
*(byte *)((int)puVar7 + 5) = bVar2;
}
*(undefined1 *)((int)puVar7 + 6) = 1;
goto LAB_0040746c;
}
puVar7 = (uint *)puVar7[2];
} while (puVar7 != (uint *)0x0);
}
puVar7 = (uint *)malloc(0xc) //possible issue identified - semgrep
if (puVar7 != (uint *)0x0) {
*(byte *)(puVar7 + 1) = (byte)(param_1 >> 0x17) & 0x1f;
*puVar7 = param_2;
pcVar5 = inet_ntoa((in_addr)(param_2 << 0x18 | param_2 >> 0x18 | param_2 >> 8 & 0xff00 |
(param_2 & 0xff00) << 8));
uVar3 = FUN_00406ee0(pcVar5);
*(undefined1 *)((int)puVar7 + 5) = uVar3;
*(undefined1 *)((int)puVar7 + 6) = 1;
puVar7[2] = *(uint *)(pbVar4 + 4);
*(uint **)(pbVar4 + 4) = puVar7;
}
LAB_0040746c:
FUN_00406b14(pbVar4);
return;
}