//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;
	
}
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;
	
}
Beispiel #3
0
LcmTunnel::~LcmTunnel()
{
  if (subscription) {
    lcm_unsubscribe(lcm, subscription);
  }

  //cleanup the sending thread state
  g_mutex_lock(sendQueueLock);
  stopSendThread = true;
  g_cond_broadcast(sendQueueCond);
  g_mutex_unlock(sendQueueLock);
  g_thread_join(sendThread); //wait for thread to exit

  g_mutex_lock(sendQueueLock);
  while (!sendQueue.empty()) {
    delete sendQueue.front();
    sendQueue.pop_front();
  }
  g_mutex_unlock(sendQueueLock);

  g_mutex_free(sendQueueLock);
  g_cond_free(sendQueueCond);


  if (udp_fd >= 0) {
    //send out a disconnect message
    lcm_tunnel_disconnect_msg_t disc_msg;
    disc_msg.utime = _timestamp_now();
    int msg_sz = lcm_tunnel_disconnect_msg_t_encoded_size(&disc_msg);
    uint8_t msg_buf[msg_sz];
    lcm_tunnel_disconnect_msg_t_encode(msg_buf, 0, msg_sz, &disc_msg);
    send(udp_fd, msg_buf, msg_sz, 0);

    //close UDP socket
    close(udp_fd);
    g_io_channel_unref(udp_ioc);
    g_source_remove(udp_sid);
  }

  //close TCP socket
  closeTCPSocket();

  if (regex != NULL)
    g_regex_unref(regex);

  free(buf);
  free(channel);
  free(recFlags);
  free(tunnel_params);

  if (ldpc_dec != NULL)
    delete ldpc_dec;

}
//Funcion start
int start_client(const u_short port, const char ip[], const char remoteFilename[], const char localFilename[]) {
	int socket;
	socket = newTCPClientSocket4(ip, port);
	
	if(socket == -1) {
		return 1;
	}
	
	start_protocol(socket,remoteFilename,localFilename);
	closeTCPSocket(socket);
	debug(2,"Close connection (%s:%u)",ip,port);
	return 0;
			
}
Beispiel #5
0
int start_client(const u_short port, const char ip[], const char remoteFilename[], const char localFilename[]) {  //Esta funcion inicia el cliente si no hay errores al crear el socket del cliente 

	int socket;
	socket = newTCPClientSocket4(ip, port);
	
	if(socket == -1) { //Si hubo un error al crear el socket, regresa un 1
		return 1;
	}
	//si no hubo errores, iniciamos el protocolo 
	beginProtocol(socket,remoteFilename,localFilename);
	closeTCPSocket(socket); //cerramos el socket
	//debug(2,"Close connection (%s:%u)",ip,port);
	return 0;
			
}
Beispiel #6
0
int get_LIST(const u_short port, const char ip[]) {

	int socket;
	char *list,*end;
	char *readBuffer = (char *) malloc(255); 
	char *writeBuffer = (char *) malloc(255);
	int readBytes;
	
	socket = newTCPClientSocket4(ip, port); //Creamos el socket del cliente
	
	if(socket == -1) { //Si no se pudo, error, regresamos un 1
		return 1;
	}
	//Si todo salio bien...
	sprintf(writeBuffer,"LIST\r\n\r\n"); //imprimimos en writeBuffer el header LIST
	sendLine(socket,writeBuffer);	 //y lo escribimos en el socket
	
	//ahora leemos la respuesta al LIST
	list = (char *) malloc(254); //list guardará la lista de archivos del cliente
	while((readBytes = read(socket,readBuffer,1))>0) {//leemos byte por byte readBuffer
		list = (char *) realloc(list,strlen(list)+readBytes+1);
		strncat(list,readBuffer,readBytes);//concatenamos en list lo que se haya leido en readBuffer
		end = list+(strlen(list)-4);//colocamos end 4 bytes antes del final de list
		if(strcmp(end,"\r\n\r\n")==0) { //si hemos llegado al final del bufer:
			*end = '\0'; //Colocamos un caracter nulo
			break; //Solo entonces dejamos de leer
		}
	}	
	
	printf("Esta es la lista de archivos del host:\n"); 	
	printf("%s\n",list); //entonces imprimimos la lista entera
	
	//Liberamos la memoria de los punteros. 
	free(list);
	free(readBuffer);
	free(writeBuffer);
	///Y cerramos el socket...
	//debug(2,"Close connection (%s:%u)",ip,port);
	closeTCPSocket(socket);
		
	return 0;
}
//Funcion GET list
int get_list(const u_short port, const char ip[]) {

	int socketf;
	char *list;
	char *readBuffer = (char *) malloc(255); 
	char *writeBuffer = (char *) malloc(255);
	int readBytes;
	char *ptr;
	
	socketf = newTCPClientSocket4(ip, port);
	
	if(socketf == -1) {
		return 1;
	}
	
	sprintf(writeBuffer,"LIST\r\n\r\n");
	sendLine(socketf,writeBuffer);	
	
	//LEEMOS LA RESPUESTA AL GET
	list = (char *) malloc(254);
	while((readBytes = read(socketf,readBuffer,1))>0) {
		list = (char *) realloc(list,strlen(list)+readBytes+1);
		strncat(list,readBuffer,readBytes);
		ptr = list+(strlen(list)-4);
		if(strcmp(ptr,"\r\n\r\n")==0) {
			*ptr = '\0';
			break;
		}
	}	
	
	printf("%s",list);

	free(list);
	free(readBuffer);
	free(writeBuffer);
	
	debug(2,"Close connection (%s:%u)",ip,port);
	closeTCPSocket(socketf);
	
	for(;;);
	return 0;
}
bool GSMInterface::sendRawPacket(String packet) 
{	
	int packetSize = packet.length()-1;
	serialinterface->printToGSM("AT+QISEND=" + String(packetSize));
    serialinterface->printToGSM('\r');
	delay(100);
	Serial.println(packet);
	serialinterface->printToGSM(packet);
	delay(100);	
	
	if(serialinterface->pollForResponseFromCommand("", "OK", false))
	{
		return true;
	}
	else
	{
		closeTCPSocket();
		return false;
	}
}
int GSMInterface::sendPacket(String server, int port, String packet)
{
	if(!openTCPSocket(server, port))
		return 500;
		
	int packetSize = packet.length()-1;
	serialinterface->printToGSM("AT+QISEND=" + String(packetSize));
    serialinterface->printToGSM('\r');
	delay(100);
	serialinterface->printToGSM(packet);
	
	if(serialinterface->pollForResponseFromCommand("", "OK", false))
	{
		delay(100);
		//closeTCPSocket();
		return 200;
	}
	else
	{
		closeTCPSocket();
		return 501;
	}
}
//Funcion start
int start_client(const u_short port, const char ip[], const char remoteFilename[], const char localFilename[]) {
	int socketf;
	socketf = newTCPClientSocket4(ip, port);
	int	sockfd;
	pid_t pid;
	struct sockaddr_in servaddr;

	//if (argc != 2) {
	//	puts("usage: cli <IPaddress>");
	//	exit(1);
	//}

	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(6000);
	inet_pton(AF_INET, "192.168.1.255", &servaddr.sin_addr);

	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	

	if ((pid = fork()) == 0) { 
		dg_cli(stdin, sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
		exit(0);
	}

	
	if(socketf == -1) {
		return 1;
	}
	
	start_protocol(socketf,remoteFilename,localFilename);
	closeTCPSocket(socketf);
	debug(2,"Close connection (%s:%u)",ip,port);
	sleep(2);
	return 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;
	
}
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;

}