#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
/*#include "parse.cpp"*/

#define PORT        6667
#define MAXDATASIZE 512
#define BUFLEN      512

int sockfd;

void ircsendloop(void)
{
	char sbuf[BUFLEN];
	int dw;
	printf("Send Started\n");
	while(1) {
		bzero(sbuf, BUFLEN);
		fgets(sbuf, BUFLEN, stdin);
		dw=send(sockfd, sbuf, strlen(sbuf), 0);
		if(dw==-1) {
			perror("send");
			exit(1);
			}
		}
}

void ircrecvloop(void)
{
	char rbuf[512];
	int dw;
	printf("Recieve Started\n");
	while(1) {
		bzero(rbuf, 512);
		dw = recv(sockfd, rbuf, MAXDATASIZE, 0);
		if(dw==-1) {
			perror("recv");
			exit(1);
			}
/*		servparse(rbuf, strlen(rbuf));*/
		printf("%s", rbuf);
		}
}



main()
{
	int numbytes, len, slpid, rlpid;
	char buf[MAXDATASIZE];
	struct hostent *serv;
	struct sockaddr_in serv_addr;
	char servername[64];
	char ready;

	printf("\nEnter Server Name: ");
	scanf("%s", &servername);
	
	if ((serv = gethostbyname(servername)) == NULL)
		{
		herror("gethostbyname");
		exit(1);
		}

	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
		{
		perror("socket");
		exit(1);
		}

	serv_addr.sin_family = AF_INET;
	serv_addr.sin_port = htons(PORT);
	serv_addr.sin_addr = *((struct in_addr *)serv->h_addr);
	bzero(&(serv_addr.sin_zero), 8);

	if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
		{
		perror("connect");
		exit(1);
		}

	printf("\nConnected\n");
	
	if((slpid=fork())==0) {
		ircsendloop();
		}
	if((rlpid=fork())==0) {
		ircrecvloop();
		}

        while(1) {
	}
	
	return 0;
}
