void FUN_004053e0(int param_1,int param_2,uint param_3)

{
  byte *pbVar1;
  char cVar2;
  int iVar3;
  uint uVar4;
  undefined4 uVar5;
  char *pcVar6;
  
  param_3 = param_3 & 0xffff;
  if (*(char *)(param_2 + 0x18) != -1) {
    return;
  }
  iVar3 = memcmp((void *)(param_2 + 8),(void *)(param_1 + 0x34),0x10);
  if (iVar3 != 0) {
    iVar3 = memcmp((void *)(param_2 + 8),(void *)(param_1 + 0x44),0x10);
    pcVar6 = (char *)(param_2 + 0x28);
    if (iVar3 != 0) {
      cVar2 = *(char *)(param_2 + 6)   //possible issue identified - semgrep
      uVar4 = (*(ushort *)(param_2 + 4) & 0xff) << 8 | (uint)(*(ushort *)(param_2 + 4) >> 8);
      uVar5 = 0;
      while( true ) {
        if ((((cVar2 != '\0') && (cVar2 != '+')) && (cVar2 != '<')) && (cVar2 != '3')) {
          if (cVar2 == ':') {
            FUN_00404e0c(param_1,param_2,param_3,pcVar6,uVar4,uVar5);
            return;
          }
          cVar2 = *(char *)(param_2 + 7)   //possible issue identified - semgrep
          if (cVar2 != '\0') {
            *(char *)(param_2 + 7) = cVar2 + -1;
            cVar2 = *(char *)(param_2 + 7)   //possible issue identified - semgrep
          }
          iVar3 = g_conf;
          if (cVar2 == '\0') {
            uVar4 = *(uint *)(g_conf + 0x80) + 1;
            *(uint *)(g_conf + 0x84) =
                 (uint)(uVar4 < *(uint *)(g_conf + 0x80)) + *(int *)(g_conf + 0x84);
            *(uint *)(iVar3 + 0x80) = uVar4;
            return;
          }
          FUN_00402e60(param_1,param_2,param_3);
          return;
        }
        pbVar1 = (byte *)(pcVar6 + 1);
        cVar2 = *pcVar6;
        pcVar6 = pcVar6 + (*pbVar1 + 1) * 8;
        uVar4 = uVar4 + (*pbVar1 + 1) * -8 & 0xffff;
        if ((char *)(param_2 + param_3) < pcVar6) break;
        uVar5 = 1;
      }
      pcVar6 = "CORRUPT->DROP (%s): Header chain beyond packet data\n";
      uVar5 = 4;
      goto LAB_004054e0;
    }
  }
  pcVar6 = "Skipping packet from own host on %s\n";
  uVar5 = 7;
LAB_004054e0:
  dolog(uVar5,pcVar6,param_1 + 4);
  return;
}