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