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