예제 #1
0
//Funcion start
int start_server(const u_short port, const char baseDir[]) {

	int serverSocket;
	int clientSocket;
	
	char clientIP[18];
	u_int clientPort;
	
	int forkID;
	
	int localError;
	
	serverSocket = newTCPServerSocket4("0.0.0.0",port,5);
	
	if(serverSocket == -1) {
		return 1;
	}
	
	while(true) {
		bzero(clientIP,sizeof(clientIP));
		clientPort = 0;
		
		debug(1,"%s","Waiting for a Client...");
		clientSocket = waitConnection4(serverSocket,clientIP,&clientPort);
		if(clientSocket == -1) {
			debug(1,"%s","ERROR: Invalid Client Socket");
			continue;
		}
		debug(2,"Connected Client %s:%u",clientIP,clientPort);
	
		forkID = fork();
		if(forkID == 0) {
		
		
			//Hilo para trabajar con el Cliente
			start_protocol(clientSocket,baseDir);
			closeTCPSocket(clientSocket);
			debug(2,"Close connection (%s:%u)",clientIP,clientPort);
			
		} else if(forkID > 0) {
			//Hilo para trabajar con el Servidor
			closeTCPSocket(clientSocket);
			
		} else {
			//Debug del fork.
			localError = errno;
			debug(0,"ERROR, Cant Fork for Client %s",strerror(localError));
			return 1;
		}
		
	}

	closeTCPSocket(serverSocket);	
	return 0;
	
}
예제 #2
0
int start_server(const char iface[], const u_short port, const u_short maxClients) 
{
	int serverSocket;
	int clientSocket;
	char clientIP[18];
	u_int clientPort;
    int forkID;
	int localerror;
	
	serverSocket = newTCPServerSocket4(iface,port,maxClients);

	if(serverSocket == -1) 
    {
		return 0;
	}
	
    while(1)
    {
        bzero(clientIP,sizeof(clientIP));
        clientPort = 0;

        debug(1,"%s","Waiting for a Client...");
        clientSocket = waitConnection4(serverSocket,clientIP,&clientPort); 
        if(clientSocket == -1)
        {                        
            debug(1,"%s","ERROR: Invalid Client Socket");
            continue;    
        }

        debug(2,"Connected Client %s:%u",clientIP,clientPort);

        forkID = fork();
        if(forkID == 0)
        {
            start_protocol(clientSocket);
            closeTCPSocket(clientSocket);
            debug(2,"Close connection (%s:%u)",clientIP,clientPort);
        }
        else if(forkID > 0)
        {
            closeTCPSocket(clientSocket);
        }
        else
        {
            localerror = errno;
            debug(0,"ERROR, Cant Fork for Client %s",strerror(localerror));
            return 1;
        }

    }

	closeTCPSocket(serverSocket);	
	return 1;
	
}
예제 #3
0
int startServer(const unsigned int port) {

	int serverSocket;
	int clientSocket;
	char clientIP[16];
	unsigned int clientPort;
	SSL_CTX *ctx;
	int pid;
	
	//Init SSL library
	SSL_library_init();

	//Init SSL socket
	ctx = InitServerCTX();

	//Load certificates
	LoadCertificates(ctx, "Certificates/cert.pem", "Certificates/key.pem");

	
	serverSocket = newTCPServerSocket4("0.0.0.0",port,5);
	if(serverSocket == -1) {
		error(errno,"Can't create Socket");
		return FALSE;
	}
	debug(4,"Server Socket Created");

	while(TRUE) {
		clientSocket = waitConnection4(serverSocket,clientIP,&clientPort);
		if(clientSocket == -1) {                        
		    debug(1,"%s","ERROR: Cannot get Client Socket");
		    continue;    
		}

		debug(2,"Connected Client %s:%u",clientIP,clientPort);
		
		pid = fork();
		if(pid == -1) {
			debug(0,"Can't Fork!");
			close(clientSocket);
			continue;
		} else if(pid == 0 ) {			//Create secure connection
			// Soy el Hijo.
			clientProccess(ctx, clientSocket);
		} else if (pid > 0 ) {
			// Soy el Padre
			close(clientSocket);
		}
    	}

	return TRUE;
	
}
예제 #4
0
int startServer(const unsigned int port) {

	int serverSocket;
	int clientSocket;
	char clientIP[16];
	unsigned int clientPort;
	
	int pid;
	
	serverSocket = newTCPServerSocket4("127.0.0.1",port,5);
	if(serverSocket == -1) {
		error(errno,"Can't create Socket");
		return FALSE;
	}
	debug(4,"Server Socket Created");

	while(TRUE) {
		clientSocket = waitConnection4(serverSocket,clientIP,&clientPort);
		debug(2,"Connected Client %s:%u",clientIP,clientPort);
		
		pid = fork();
		if(pid == -1) {
			debug(0,"Can't Fork!");
			close(clientSocket);
			continue;
		} else if(pid == 0 ) {
			// Soy el Hijo.
			clientProccess(clientSocket);
		} else if (pid > 0 ) {
			// Soy el Padre
			close(clientSocket);
		}
    }

	return TRUE;
	
}
예제 #5
0
//Funcion start
int start_server(const u_short port, const char baseDir[]) {

	int serverSocket;
	int clientSocket;
	
	char clientIP[18];
	u_int clientPort;
	
	int forkID;
	
	int localError;

	

	
	
	pid_t pid;
	if ((pid = fork()) == 0) {
		int	sockfd;
		struct sockaddr_in servaddr, cliaddr;
		sockfd = socket(AF_INET, SOCK_DGRAM, 0);

	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	servaddr.sin_port = htons(PORT);

	bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

		dg_echo(sockfd, (struct sockaddr *) &cliaddr, sizeof(cliaddr));
		exit(0);
	}
	
	serverSocket = newTCPServerSocket4("0.0.0.0", 5001, 5);
	
	
	if(serverSocket == -1) {
		return 1;
	}
	
	while(true) {
		bzero(clientIP,sizeof(clientIP));
		clientPort = 0;
		
		debug(1,"%s","Waiting for a Client...");
		clientSocket = waitConnection4(serverSocket,clientIP,&clientPort);
		if(clientSocket == -1) {
			debug(1,"%s","ERROR: Invalid Client Socket");
			continue;
		}
		debug(2,"Connected Client %s:%u",clientIP,clientPort);
	
		forkID = fork();
		if(forkID == 0) {
		
		
			//Hilo para trabajar con el Cliente
			start_protocol(clientSocket,baseDir);
			closeTCPSocket(clientSocket);
			debug(2,"Close connection (%s:%u)",clientIP,clientPort);
			
		} else if(forkID > 0) {
			//Hilo para trabajar con el Servidor
			closeTCPSocket(clientSocket);
			
		} else {
			//Debug del fork.
			localError = errno;
			debug(0,"ERROR, Cant Fork for Client %s",strerror(localError));
			return 1;
		}
		
	}

	closeTCPSocket(serverSocket);	
	return 0;
	
}
예제 #6
0
int start_server(const char iface[], const u_short port, const u_short maxClients, const char *filename) {

int serverSocket;
int clientSocket;

char clientIP[18];
u_int clientPort;

int file;

int localerror;

int readBytes = 0;
int totalReadBytes = 0;
int totalWriteBytes = 0;
int writeBytes = 0;
char *readBuffer = NULL;

debug(2,"Trabajado en %s:%i",iface,port);
serverSocket = newTCPServerSocket4(iface,port,maxClients);

if(serverSocket == -1) {
return false;
}


if((file = open(filename,O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP)) == -1) {
localerror = errno;
//fprintf(stderr,"Can't open filename (%s)",strerror(localerror));
return false;
}

bzero(clientIP,sizeof(clientIP));
clientPort = 0;

debug(5,"%s","Waiting for a Client...");
clientSocket = waitConnection4(serverSocket,clientIP,&clientPort);
debug(4,"Connected Client %s:%u",clientIP,clientPort);

readBuffer = (char *) calloc(1,BUFFERSIZE);

while((readBytes = read(clientSocket,readBuffer,BUFFERSIZE)) > 0) {
debug(5,"\tSe leyeron de %s:%u %u bytes",clientIP,clientPort,readBytes);
totalWriteBytes = 0;
while(totalWriteBytes < readBytes) {
writeBytes = write(file,readBuffer+totalWriteBytes,readBytes-totalWriteBytes);
totalWriteBytes += writeBytes;
}
totalReadBytes += readBytes;
}

debug(3,"\t Se leyeron un total de %i de bytes\n",totalReadBytes);

free(readBuffer);
close(file);
closeTCPSocket(clientSocket);
debug(4,"Close connection (%s:%u)",clientIP,clientPort);

closeTCPSocket(serverSocket);
return true;

}