buffer size for each array == 5000 chars
pSock // return socket from local server
bSock // return socket from accept
tSock // reuurn socket from connected target
Code:
while(1)
{
if((bSock = accept(pSock, (struct sockaddr*)&client, &clientSize)) == -1)
{
fprintf(stdout, "error: proxy - accept()\n");
continue;
}
if((childId = fork()) == 0)
{
close(pSock);
fprintf(stdout, "Connection from: %s:%d [successfully]\n",
inet_ntoa(client.sin_addr.s_addr), htons(client.sin_port));
memset(&recvBuf, 0x00, sizeof(recvBuf));
if((recvBytes = recv(bSock, (char*)recvBuf, sizeof(recvBuf) - 1, 0)) == -1)
{
fprintf(stdout, "error: client - recv()\n");
return -4;
}
recvBuf[recvBytes] = '\0';
if(verbose == 0)
{
fprintf(stdout, "< RECEIVING HTTP HEADER >");
fprintf(stdout, "\n%s\n", recvBuf);
}
memset(&sendBuf, 0x00, sizeof(sendBuf));
if(ParseHttpHeader(recvBuf, the.hdrRef, sendBuf) < 0)
return -5;
if((tSock = SetupTargetServer(the.hdrHost)) < 0)
return -6;
if(verbose == 0)
{
fprintf(stdout, "< SENDING HTTP HEADER >");
fprintf(stdout, "\n%s\n", sendBuf);
}
if(send(tSock, (char*)sendBuf, strlen(sendBuf), 0) == -1)
{
fprintf(stdout, "error: target - send()\n");
return -7;
}
while(1)
{
memset(&htmlBuf, 0x00, sizeof(htmlBuf));
if((recvBytes = recv(tSock, (char*)htmlBuf, sizeof(htmlBuf) - 1, 0)) == -1)
{
fprintf(stdout, "error: target - recv()\n");
return -8;
}
htmlBuf[recvBytes] = '\0';
if(send(bSock, (char*)htmlBuf, strlen(htmlBuf), 0) == -1)
{
printf("error: client - send()\n");
return -9;
}
}
close(tSock);
close(bSock);
exit(EXIT_FAILURE);
}
else
{
if(childId < 0)
{
fprintf(stdout, "error: fork()\n");
exit(EXIT_FAILURE);
}
else
{
close(bSock);
}
}
}