undefined4 APSendPacket(int param_1,undefined4 *param_2)
{
char cVar1;
char cVar2;
byte bVar3;
int iVar4;
undefined4 *puVar5;
ushort uVar6;
uint uVar7;
bool bVar8;
int iVar9;
uint uVar10;
uint uVar11;
int iVar12;
int iVar13;
byte local_48;
undefined1 local_47 [3];
byte *local_44;
uint local_40;
undefined1 auStack_3c [8];
uint local_34;
RTMP_QueryPacketInfo(param_2,auStack_3c,&local_44,&local_40);
if (local_44 == (byte *)0x0) goto LAB_0007dcb8;
if (local_40 < 0xe) {
if (RTDebugLevel != 0) {
printk("APSendPacket --> Ndis Packet buffer error !!!\n");
}
goto LAB_0007dcb8;
}
uVar10 = (uint)*(byte *)(param_2 + 9);
iVar12 = param_1 + uVar10 * 0xa20 + 0x5cf38;
local_47[0] = 0;
local_48 = 0;
iVar4 = RTMPCheckEtherType(param_1,param_2,iVar12,1,local_47,&local_48);
if (iVar4 == 0) goto LAB_0007dcb8;
if ((*(int *)(param_1 + uVar10 * 0xa20 + 0x5cf38) != 1) && (uVar10 != 0)) {
if (RTDebugLevel != 0) {
printk("I/F(ra%d) APSendPacket --> Drop unknow packet !!!\n",0);
}
goto LAB_0007dcb8;
}
iVar4 = uVar10 * 0xa20 + param_1;
cVar1 = *(char *)(iVar4 + 0x5d1a8) //possible issue identified - semgrep
cVar2 = *(char *)(iVar4 + 0x5d285) //possible issue identified - semgrep
iVar13 = *(int *)(iVar4 + 0x5d1ac);
if (uVar10 == 0) {
if (*(char *)(param_1 + 0x168c8) == '\0') goto LAB_0007dcb8;
uVar11 = (uint)*(byte *)(param_2 + 10);
if (uVar11 != 0) {
if (RTDebugLevel != 0) {
printk("%s> Error! apidx = %d > MAX_MBSSID_NUM!\n","APSendPacket",uVar11);
}
uVar11 = 0;
}
iVar9 = uVar11 * 0x1140 + param_1 + 0x51ac;
}
else {
iVar9 = *(int *)(iVar4 + 0x5d8b4);
uVar11 = (uint)*(byte *)(iVar4 + 0x5cf69);
}
if (iVar9 != 0) {
if (*(uint *)(iVar9 + 0x30) < 3) {
if (*(char *)(iVar9 + 0x109) != '\x01') goto LAB_0007da0c;
bVar3 = *(byte *)((int)param_2 + 0x2d);
}
else {
bVar3 = *(byte *)((int)param_2 + 0x2d);
}
if ((bVar3 & 2) == 0) {
if (uVar10 == 0) {
uVar6 = (ushort)*(byte *)(iVar9 + 299);
}
else {
uVar6 = *(ushort *)(uVar10 * 0xa20 + param_1 + 0x5d12a);
}
if (uVar6 == 2) goto LAB_0007dcb8;
}
}
LAB_0007da0c:
uVar7 = 1;
if (((*local_44 & 1) == 0) &&
(((iVar12 == 0 || (iVar4 = uVar10 * 0xa20 + param_1, *(int *)(iVar4 + 0x5cf38) != 1)) ||
(uVar7 = 1, (*(uint *)(iVar4 + 0x5d34c) & 2) == 0)))) {
uVar7 = *(ushort *)(param_1 + 0x16a54) - 0x1c;
if (local_34 - 6 < uVar7) {
uVar7 = 1;
}
else {
uVar7 = (local_34 - 6) / uVar7 + 1 & 0xff;
}
}
*(char *)((int)param_2 + 0x23) = (char)uVar7;
if (uVar7 < 2) {
uVar6 = *(ushort *)(param_1 + 0x16a52);
}
else {
uVar6 = *(ushort *)(param_1 + 0x16a52);
local_34 = (uint)*(ushort *)(param_1 + 0x16a54);
}
bVar8 = uVar6 < local_34;
if (((byte)(cVar2 - 4U) < 8) && ((*(uint *)(param_1 + 0x16abc) & 4) != 0)) {
bVar8 = true;
}
*(bool *)((int)param_2 + 0x26) = bVar8;
*(char *)((int)param_2 + 0x27) = cVar2;
detect_wmm_traffic(param_1,local_47[0],1);
*(undefined1 *)((int)param_2 + 0x22) = local_47[0];
*(byte *)((int)param_2 + 0x32) = *(byte *)((int)param_2 + 0x32) & 0xf7;
if ((iVar12 == 0) || (2 < *(int *)(uVar10 * 0xa20 + param_1 + 0x5cf38) - 2U)) {
if (((*local_44 & 1) != 0) && (*(char *)(param_1 + 0x7134c) != '\0')) {
if (0x1f < *(uint *)(param_1 + 0x71344)) {
RTMPFreeNdisPacket(param_1,param_2);
if (RTDebugLevel < 3) {
return 1;
}
printk("M/BCAST PSQ(=%ld) full, drop it!\n",*(undefined4 *)(param_1 + 0x71344));
return 1;
}
local_bh_disable();
*param_2 = *(undefined4 *)(param_1 + 0x7133c);
*(undefined4 **)(param_1 + 0x7133c) = param_2;
if (*(int *)(param_1 + 0x71340) == 0) {
*(undefined4 **)(param_1 + 0x71340) = param_2;
}
*(int *)(param_1 + 0x71344) = *(int *)(param_1 + 0x71344) + 1;
local_bh_enable();
iVar4 = uVar11 * 0x1140 + param_1;
*(byte *)(iVar4 + 0x5250) = NUM_BIT8 | *(byte *)(iVar4 + 0x5250);
goto LAB_0007dd30;
}
if ((((cVar1 == '\x01') && (iVar12 != 0)) && (*(int *)(uVar10 * 0xa20 + param_1 + 0x5cf38) == 1)
) && (iVar13 == 2)) {
iVar4 = APInsertPsQueue(param_1,param_2,iVar12,local_48);
if (iVar4 != 0) {
return 1;
}
goto LAB_0007dd30;
}
}
if (0x1ff < *(uint *)((uint)local_48 * 0xc + param_1 + 0x2a38)) {
LAB_0007dcb8:
RTMPFreeNdisPacket(param_1,param_2);
return 1;
}
local_bh_disable();
*param_2 = 0;
iVar4 = (uint)local_48 * 0xc + param_1;
puVar5 = *(undefined4 **)(iVar4 + 0x2a34);
if (puVar5 == (undefined4 *)0x0) {
*(undefined4 **)(iVar4 + 0x2a30) = param_2;
}
else {
*puVar5 = param_2;
}
iVar4 = (uint)local_48 * 0xc + param_1;
*(undefined4 **)(iVar4 + 0x2a34) = param_2;
*(int *)(iVar4 + 0x2a38) = *(int *)(iVar4 + 0x2a38) + 1;
local_bh_enable();
LAB_0007dd30:
RTMP_BASetup(param_1,iVar12,local_47[0]);
return 0;
}