/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined4 httpc_main(int param_1,char **param_2)

{
  int iVar1;
  char *pcVar2;
  void *__buf;
  size_t sVar3;
  socklen_t __addr_len;
  hostent *phVar4;
  uint uVar5;
  int *piVar6;
  __fd_mask *p_Var7;
  int iVar8;
  ssize_t sVar9;
  undefined4 uVar10;
  uint uVar11;
  size_t sVar12;
  sockaddr *__addr;
  in_addr iStack_450;
  int local_44c [2];
  timeval local_444;
  sockaddr local_43c;
  sockaddr local_42c;
  undefined4 local_41c;
  undefined4 local_418;
  undefined4 local_414;
  char acStack_410 [32];
  char acStack_3f0 [32];
  char acStack_3d0 [32];
  char acStack_3b0 [128];
  fd_set local_330;
  uint local_2b0 [32];
  char local_230 [512];
  fd_set *local_30;
  timeval *local_2c;
  
LAB_00407454:
  iVar1 = getopt(param_1,param_2,"hi:d:p:m:t:c:")   //possible issue identified - semgrep
  pcVar2 = _optarg;
  if (0 < iVar1) {
    uVar10 = 0xffffffff;
    switch(iVar1) {
    case 99:
      DAT_0042218c = atoi(_optarg);
      goto LAB_00407454;
    case 100:
      if (_optarg != (char *)0x0) {
        PTR_s_239_255_255_250_004221a0 = _optarg;
        pcVar2 = strrchr(_optarg,0x3a);
        if (pcVar2 != (char *)0x0) {
          *pcVar2 = '\0';
          DAT_00422190 = atoi(pcVar2 + 1);
        }
        iVar1 = inet_aton(PTR_s_239_255_255_250_004221a0,&iStack_450);
        if (iVar1 == 0) {
          printf("addr %s maybe ipv6\n",PTR_s_239_255_255_250_004221a0);
          DAT_00422a8c = 1;
        }
        else {
          DAT_00422a8c = 0;
        }
      }
      goto LAB_00407454;
    case 0x65:
    case 0x66:
    case 0x67:
    case 0x6a:
    case 0x6b:
    case 0x6c:
    case 0x6e:
    case 0x6f:
    case 0x71:
    case 0x72:
    case 0x73:
      uVar10 = 0xffffffff;
      break;
    case 0x68:
      uVar10 = 0;
      break;
    case 0x69:
      DAT_00422a90 = _optarg;
      goto LAB_00407454;
    case 0x6d:
      DAT_00422184 = atoi(_optarg);
      goto LAB_00407454;
    case 0x70:
      iVar1 = strcasecmp(_optarg,"tcp");
      if (iVar1 == 0) {
        DAT_00422180 = 2;
      }
      else {
        iVar1 = strcasecmp(pcVar2,"udp");
        if (iVar1 == 0) {
          DAT_00422180 = 1;
        }
        else {
          DAT_00422180 = 0;
        }
      }
      goto LAB_00407454;
    case 0x74:
      goto switchD_004072e4_caseD_74;
    }
    FUN_00407140(uVar10);
    goto LAB_00407454;
  }
  lrgbin_pa_init(&DAT_00422a98,0);
  DAT_00422a80 = 0;
  while ((pcVar2 = (char *)lrgbin_get_line_from_file(_stdin,1), pcVar2 != (char *)0x0 &&
         (*pcVar2 != '\0'))) {
    iVar1 = lrgbin_pa_set_nth(&DAT_00422a98,DAT_00422a80,pcVar2,1);
    if (iVar1 < 0) {
      fprintf(_stderr,"%s: memerr: unable to save header line!\n","httpc");
      goto LAB_00407d64;
    }
    DAT_00422a80 = DAT_00422a80 + 1;
  }
  while (iVar1 = fgetc(_stdin), iVar1 != -1) {   //possible issue identified - semgrep
    for (; DAT_00422a94 < DAT_00422a84 + 1; DAT_00422a94 = DAT_00422a94 + 0x200) {
      DAT_00422a88 = realloc(DAT_00422a88,DAT_00422a94 + 0x200)   //possible issue identified - semgrep
      if (DAT_00422a88 == (void *)0x0) goto LAB_00407d64;
    }
    *(char *)((int)DAT_00422a88 + DAT_00422a84) = (char)iVar1;
    DAT_00422a84 = DAT_00422a84 + 1;
  }
  snprintf(acStack_3b0,0x80,"Content-Length: %d",DAT_00422a84)   //possible issue identified - semgrep
  uVar11 = 0;
  iVar1 = 0;
  while ((uVar11 < DAT_00422a80 &&
         (pcVar2 = (char *)lrgbin_pa_get_nth(&DAT_00422a98,uVar11), pcVar2 != (char *)0x0))) {
    iVar8 = strncasecmp(pcVar2,"Content-Length:",0xf);
    if (iVar8 == 0) {
      pcVar2 = acStack_3b0;
    }
    sVar12 = strlen(pcVar2);
    iVar1 = iVar1 + sVar12 + 2   //possible issue identified - semgrep
    uVar11 = uVar11 + 1;
  }
  sVar12 = DAT_00422a84 + 2 + iVar1   //possible issue identified - semgrep
  __buf = malloc(sVar12)   //possible issue identified - semgrep
  if (__buf == (void *)0x0) goto LAB_00407d64;
  uVar11 = 0;
  iVar1 = 0;
  while ((uVar11 < DAT_00422a80 &&
         (pcVar2 = (char *)lrgbin_pa_get_nth(&DAT_00422a98,uVar11), pcVar2 != (char *)0x0))) {
    iVar8 = strncasecmp(pcVar2,"Content-Length:",0xf);
    if (iVar8 == 0) {
      pcVar2 = acStack_3b0;
    }
    strcpy((char *)((int)__buf + iVar1),pcVar2)   //possible issue identified - semgrep
    uVar11 = uVar11 + 1;
    sVar3 = strlen(pcVar2);
    iVar8 = iVar1 + sVar3   //possible issue identified - semgrep
    iVar1 = iVar8 + 2;
    strcpy((char *)((int)__buf + iVar8),"\r\n")   //possible issue identified - semgrep
  }
  strcpy((char *)((int)__buf + iVar1),"\r\n")   //possible issue identified - semgrep
  memcpy((void *)((int)__buf + iVar1 + 2),DAT_00422a88,DAT_00422a84)   //possible issue identified - semgrep
  if (DAT_00422180 == 1) {
    if (DAT_00422a8c == 0) {
      local_43c.sa_data._0_2_ = (ushort)DAT_00422190 << 8 | (ushort)DAT_00422190 >> 8;
      local_43c.sa_data[10] = '\0';
      local_43c.sa_data[0xb] = '\0';
      local_43c.sa_data[0xc] = '\0';
      local_43c.sa_data[0xd] = '\0';
      local_43c.sa_data[2] = '\0';
      local_43c.sa_data[3] = '\0';
      local_43c.sa_data[4] = '\0';
      local_43c.sa_data[5] = '\0';
      local_43c.sa_data[6] = '\0';
      local_43c.sa_data[7] = '\0';
      local_43c.sa_data[8] = '\0';
      local_43c.sa_data[9] = '\0';
      local_43c.sa_family = 2;
      local_43c.sa_data._2_4_ = inet_addr(PTR_s_239_255_255_250_004221a0);
      uVar11 = socket(2,1,0);
      if ((int)uVar11 < 1) goto LAB_00407d44;
      if (DAT_00422a90 != (char *)0x0) {
        strncpy(acStack_410,DAT_00422a90,0x10)   //possible issue identified - semgrep
        iVar1 = setsockopt(uVar11,0xffff,0x19,acStack_410,0x20);
        if (iVar1 < 0) {
LAB_00407968:
          fprintf(_stderr,"%s: can bind interface \'%s\'\n","httpc",DAT_00422a90);
          goto LAB_00407d4c;
        }
      }
      if ((local_43c.sa_data._2_4_ & 0xf0) == 0xe0) {
        setsockopt(uVar11,0,0x21,&DAT_00422188,4);
      }
      __addr = &local_43c;
      __addr_len = 0x10;
    }
    else {
      local_42c.sa_data._0_2_ = (ushort)DAT_00422190 << 8 | (ushort)DAT_00422190 >> 8;
      local_414 = 0;
      local_42c.sa_data[2] = '\0';
      local_42c.sa_data[3] = '\0';
      local_42c.sa_data[4] = '\0';
      local_42c.sa_data[5] = '\0';
      local_42c.sa_data[6] = '\0';
      local_42c.sa_data[7] = '\0';
      local_42c.sa_data[8] = '\0';
      local_42c.sa_data[9] = '\0';
      local_42c.sa_data[10] = '\0';
      local_42c.sa_data[0xb] = '\0';
      local_42c.sa_data[0xc] = '\0';
      local_42c.sa_data[0xd] = '\0';
      local_41c = 0;
      local_418 = 0;
      local_42c.sa_family = 10;
      inet_pton(10,PTR_s_239_255_255_250_004221a0,local_42c.sa_data + 6)   //possible issue identified - semgrep
      uVar11 = socket(10,1,0);
      if ((int)uVar11 < 1) goto LAB_00407d44;
      if (DAT_00422a90 != (char *)0x0) {
        strncpy(acStack_3f0,DAT_00422a90,0x10)   //possible issue identified - semgrep
        iVar1 = setsockopt(uVar11,0xffff,0x19,acStack_3f0,0x20);
        if (iVar1 < 0) goto LAB_00407968;
      }
      if (local_42c.sa_data[6] == -1) {
        setsockopt(uVar11,0x29,0x12,&DAT_00422188,4);
      }
      __addr = &local_42c;
      __addr_len = 0x1c;
    }
    sendto(uVar11,__buf,sVar12,0x4000,__addr,__addr_len);
  }
  else {
    if ((DAT_00422180 != 2) || (uVar11 = socket(2,2,6), (int)uVar11 < 0)) goto LAB_00407d64;
    phVar4 = gethostbyname(PTR_s_239_255_255_250_004221a0);
    if (phVar4 != (hostent *)0x0) {
      if (DAT_00422a90 != (char *)0x0) {
        strncpy(acStack_3d0,DAT_00422a90,0x10)   //possible issue identified - semgrep
        iVar1 = setsockopt(uVar11,0xffff,0x19,acStack_3d0,0x20);
        if (iVar1 < 0) {
          fprintf(_stderr,"%s: can bind interface \'%s\'\n","httpc",DAT_00422a90);
          goto LAB_00407d44;
        }
      }
      local_43c.sa_data[6] = '\0';
      local_43c.sa_data[7] = '\0';
      local_43c.sa_data[8] = '\0';
      local_43c.sa_data[9] = '\0';
      local_43c.sa_data[10] = '\0';
      local_43c.sa_data[0xb] = '\0';
      local_43c.sa_data[0xc] = '\0';
      local_43c.sa_data[0xd] = '\0';
      local_43c.sa_data._2_4_ = *(undefined4 *)*phVar4->h_addr_list;
      local_43c.sa_data._0_2_ = (ushort)DAT_00422190 << 8 | (ushort)DAT_00422190 >> 8;
      local_43c.sa_family = 2;
      local_444.tv_sec = DAT_0042218c;
      local_44c[1] = 4;
      local_444.tv_usec = 0;
      uVar5 = fcntl(uVar11,3);
      if (-1 < (int)uVar5) {
        iVar1 = fcntl(uVar11,4,uVar5 | 0x80);
        if (iVar1 < 0) goto LAB_00407e1c;
        iVar1 = connect(uVar11,&local_43c,0x10);
        if (iVar1 < 0) {
          piVar6 = __errno_location();
          if (*piVar6 == 0x96) {
            p_Var7 = (__fd_mask *)local_2b0;
            do {
              *p_Var7 = 0;
              p_Var7 = p_Var7 + 1;
            } while (p_Var7 != (__fd_mask *)local_230);
            local_2b0[uVar11 >> 5] = local_2b0[uVar11 >> 5] | 1 << (uVar11 & 0x1f);
            iVar1 = select(uVar11 + 1,(fd_set *)0x0,(fd_set *)local_2b0,(fd_set *)0x0,&local_444);
            if (iVar1 < 1) goto LAB_00407e1c;
            iVar8 = getsockopt(uVar11,0xffff,0x1007,local_44c,(socklen_t *)(local_44c + 1));
            iVar1 = -1;
            if ((iVar8 == 0) && (local_44c[0] == 0)) {
              iVar1 = 0;
            }
          }
          else {
LAB_00407e1c:
            iVar1 = -1;
          }
          fcntl(uVar11,4,uVar5);
          if (iVar1 != 0) goto LAB_00407d44;
        }
        sVar9 = send(uVar11,__buf,sVar12,0x4000);
        if (-1 < sVar9) {
          uVar5 = 0;
          local_30 = &local_330;
          local_2c = &local_444;
          while( true ) {
            for (; uVar5 < 0x20; uVar5 = uVar5 + 1) {
              local_330.fds_bits[uVar5] = 0;
            }
            local_330.fds_bits[uVar11 >> 5] = local_330.fds_bits[uVar11 >> 5] | 1 << (uVar11 & 0x1f)
            ;
            local_444.tv_sec = DAT_0042218c;
            local_444.tv_usec = 0;
            iVar1 = select(uVar11 + 1,local_30,(fd_set *)0x0,(fd_set *)0x0,local_2c);
            if ((iVar1 < 1) || (sVar9 = recv(uVar11,local_230,0x200,0x4000), sVar9 == 0)) break   //possible issue identified - semgrep
            for (iVar1 = 0; iVar1 < sVar9; iVar1 = iVar1 + 1) {
              fputc((int)local_230[iVar1],_stdout);
            }
            uVar5 = 0;
          }
        }
      }
    }
LAB_00407d44:
    if (uVar11 == 0) goto LAB_00407d64;
  }
LAB_00407d4c:
  close(uVar11);
LAB_00407d64:
  lrgbin_pa_destroy(&DAT_00422a98,1);
  if (DAT_00422a88 != (void *)0x0) {
    free(DAT_00422a88);
  }
  return 0;
switchD_004072e4_caseD_74:
  DAT_00422188 = atoi(_optarg);
  goto LAB_00407454;
}