int RTMPDeFragmentDataFrame(int param_1,int param_2)
{
byte bVar1;
bool bVar2;
int iVar3;
char *pcVar4;
int iVar5;
void *pvVar6;
void *__src;
uint __n;
uint uVar7;
undefined4 uVar8;
__src = *(void **)(param_2 + 0x14);
uVar8 = *(undefined4 *)(param_2 + 0x18);
pvVar6 = *(void **)(param_2 + 0x1c);
__n = (uint)*(ushort *)(param_2 + 0x20);
if (__src == (void *)0x0) {
printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data.c:%d assert pHeaderfailed\n"
,0xd58);
}
uVar7 = (int)pvVar6 - (int)__src & 0xff //possible issue identified - semgrep
if ((*(byte *)((int)__src + 0x16) & 0xf) == 0) {
if ((*(byte *)((int)__src + 1) & 4) == 0) {
bVar2 = false;
goto LAB_00022b98;
}
if (*(int *)(param_1 + 0x76654) == 0) {
printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data.c:%d assert pAd->FragFrame.pFragPacketfailed\n"
,0xd62);
}
pvVar6 = *(void **)(*(int *)(param_1 + 0x76654) + 0x9c);
*(uint *)(param_1 + 0x76658) = uVar7 + __n;
memmove(pvVar6,__src,uVar7 + __n) //possible issue identified - semgrep
*(ushort *)(param_1 + 0x7665c) =
(ushort)*(byte *)((int)__src + 0x17) << 4 | (ushort)(*(byte *)((int)__src + 0x16) >> 4);
bVar1 = *(byte *)((int)__src + 0x16);
*(ushort *)(param_1 + 0x7665e) = bVar1 & 0xf;
if ((bVar1 & 0xf) != 0) {
printk("<4>/home/eric/release/dir600b5/progs.priv/rt2860v2/build/rt2860v2_ap/../rt2860v2/common/cmm_data.c:%d assert pAd->FragFrame.LastFrag == 0failed\n"
,0xd68);
bVar2 = false;
goto LAB_00022b98;
}
LAB_00022b90:
bVar2 = false;
}
else {
if ((((uint)*(byte *)((int)__src + 0x17) << 4 | (uint)(*(byte *)((int)__src + 0x16) >> 4)) ==
(uint)*(ushort *)(param_1 + 0x7665c)) &&
((*(byte *)((int)__src + 0x16) & 0xf) == *(ushort *)(param_1 + 0x7665e) + 1)) {
if (__n + *(int *)(param_1 + 0x76658) < 0x92b) {
iVar5 = memcmp(pvVar6,&SNAP_802_1H,6);
if (iVar5 == 0) {
if (RTDebugLevel == 0) {
bVar2 = false;
}
else {
printk("Find another LLC at Middle or End fragment(SN=%d, Frag=%d)\n",
(uint)*(byte *)((int)__src + 0x17) << 4 |
(uint)(*(byte *)((int)__src + 0x16) >> 4),*(byte *)((int)__src + 0x16) & 0xf);
bVar2 = false;
}
goto LAB_00022b98;
}
memmove((void *)(*(int *)(*(int *)(param_1 + 0x76654) + 0x9c) + *(int *)(param_1 + 0x76658))
,pvVar6,__n) //possible issue identified - semgrep
*(uint *)(param_1 + 0x76658) = __n + *(int *)(param_1 + 0x76658);
*(ushort *)(param_1 + 0x7665e) = *(byte *)((int)__src + 0x16) & 0xf;
bVar2 = true;
if ((*(byte *)((int)__src + 1) & 4) == 0) goto LAB_00022b98;
goto LAB_00022b90;
}
*(undefined4 *)(param_1 + 0x76660) = 0;
*(undefined4 *)(param_1 + 0x76658) = 0;
*(undefined2 *)(param_1 + 0x7665c) = 0;
*(undefined2 *)(param_1 + 0x7665e) = 0;
if (RTDebugLevel == 0) {
bVar2 = false;
goto LAB_00022b98;
}
pcVar4 = "Fragment frame is too large, it exeeds the maximum frame size.\n";
}
else {
*(undefined4 *)(param_1 + 0x76660) = 0;
*(undefined4 *)(param_1 + 0x76658) = 0;
*(undefined2 *)(param_1 + 0x7665c) = 0;
*(undefined2 *)(param_1 + 0x7665e) = 0;
if (RTDebugLevel == 0) {
bVar2 = false;
goto LAB_00022b98;
}
pcVar4 = "Fragment is not the same sequence or out of fragment number order.\n";
}
bVar2 = false;
printk(pcVar4);
}
LAB_00022b98:
RTMPFreeNdisPacket(param_1,uVar8);
iVar5 = 0;
if (bVar2) {
iVar3 = RTMP_AllocateFragPacketBuffer(param_1,0xf00);
if (iVar3 == 0) {
*(undefined4 *)(param_1 + 0x76660) = 0;
*(undefined4 *)(param_1 + 0x76658) = 0;
*(undefined2 *)(param_1 + 0x7665c) = 0;
*(undefined2 *)(param_1 + 0x7665e) = 0;
iVar5 = 0;
}
else {
iVar5 = *(int *)(param_1 + 0x76654);
*(int *)(param_1 + 0x76654) = iVar3;
iVar3 = *(int *)(iVar5 + 0x9c);
*(uint *)(param_2 + 0x1c) = iVar3 + uVar7;
*(int *)(param_2 + 0x14) = iVar3;
uVar8 = *(undefined4 *)(param_1 + 0x76658);
*(int *)(param_2 + 0x18) = iVar5;
*(short *)(param_2 + 0x20) = (short)uVar8 - (short)uVar7;
}
}
return iVar5;
}