int log_init() { log_filter = get_log_level_from_config(); log_info_message("log filter is %s", log_level_string(log_filter)); pthread_mutex_init(&log_thread_mutex, NULL); if(0 != pthread_create(&log_thread_t, NULL, log_monitor, NULL)) { log_error_message("log monitor thread fail"); pthread_mutex_destroy(&log_thread_mutex); return -1; } return 0; }
int socket_init() { char *ip = NULL; g_sockfd = socket(AF_INET, SOCK_STREAM, 0); if(-1 == g_sockfd) { log_error_message("socket fail"); return -1; } server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(SERVER_ADDR); server_addr.sin_port = htons(SERVER_PORT); ip = inet_ntoa(server_addr.sin_addr); if(NULL == ip) { log_error_message("inet_ntoa fail"); return -1; } int on; on = 1; setsockopt(g_sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) ); if(-1 == bind(g_sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr))) { log_error_message("bind fail"); return -1; } if(-1 == listen(g_sockfd, 3)) { log_error_message("listen fail"); return -1; } log_info_message("server ip:%s listen in:%d", ip, ntohs(server_addr.sin_port)); return g_sockfd; }
int main(int argc, char **argv) { char log_text[2000]; char* nombre = string_substring_from(argv[1], 2); char* nombre_log = string_duplicate(nombre); char* log = ".log"; string_append(&nombre_log, log); inicializar_log(nombre_log, "Programa"); habilitar_log_info(); sprintf(log_text, "Proceso Programa %s Iniciado", nombre); log_info_message(log_text); log_info_message("Chequeando el path del script..."); if (argv[1] == NULL ) { log_error_message("El path del script no puede ser vacio."); finalizar_log(); return EXIT_FAILURE; } // CONEXION CON KERNEL t_KER_PRO_CPU_UMV mensajeAEnviar = obtener_nueva_shared_str(); t_KER_PRO_CPU_UMV* mensajeARecibir; log_debug_message("Se inicia la conexion con el KERNEL"); int socket; // ACA VA LO DE LA VARIABLE DE ENTORNO char* rutaConfiguracion = getenv("ANSISOP_CONFIG"); t_config *config = config_create(rutaConfiguracion); int puerto = config_get_int_value(config, "Puerto"); char* ip = config_get_string_value(config, "IP"); sprintf(log_text, "LA IP ES: %s\n", ip); log_info_message(log_text); sprintf(log_text, "EL PUERTO ES: %i\n", puerto); log_info_message(log_text); socket = conectar_a_servidor(ip, puerto); if (socket == -1) { return EXIT_FAILURE; } log_debug_message("Conectado\n"); // SE LEVANTA EL SCRIPT sprintf(log_text, "Se levantan datos del script en el path:%s", argv[1]); log_info_message(log_text); int num = 0; log_debug_message("se abre el archivo"); FILE* script; script = fopen(argv[1], "r"); log_debug_message("se abrio el archivo"); int tamanio; fseek(script, 0, SEEK_END); tamanio = ftell(script) + 1; sprintf(log_text, "El tamanio del script es: (%d)", tamanio); log_info_message(log_text); char codigo[tamanio]; rewind(script); char aux; while (feof(script) == 0) { aux = fgetc(script); codigo[num] = aux; num++; } log_debug_message("se termino de leer"); // printf("num vale: (%d)\n", num); num = num - 1; // printf("ahora num vale: (%d)\n", num); sprintf(log_text, "LEO: ('nueva linea')y pongo en posicion (%d)", num); log_debug_message(log_text); codigo[num] = '\n'; num++; sprintf(log_text, "LEO: ('barra 0')y pongo en posicion (%d)", num); log_debug_message(log_text); codigo[num] = '\0'; sprintf(log_text, "El script es: \n%s", codigo); log_debug_message(log_text); sprintf(log_text, "La longitud del codigo es: %i\n", strlen(codigo)); log_info_message(log_text); fclose(script); mensajeAEnviar.codigo = codigo; mensajeAEnviar.mensaje = nombre; log_debug_message("se copia el codigo"); sprintf(log_text, "El codigo copiado en el mensaje es: (%s)", mensajeAEnviar.codigo); log_debug_message(log_text); // SE ENVIA EL HANDSHAKE log_info_message( "Se envia HANDSHAKE al PLP con el Codigo y el Nombre del programa\n"); enviar_mensaje_a_servidor(socket, HANDSHAKE_PROGRAMA_PLP, &mensajeAEnviar); void *msj = recibir_mensaje_de_servidor(socket); if (msj != NULL ) { mensajeARecibir = (t_KER_PRO_CPU_UMV*) msj; } else { log_debug_message("ERROR AL RECIBIR MENSAJE NULO"); return -1; } if (mensajeARecibir->gen_msg.id_MSJ != HANDSHAKE_PROGRAMA_PLP || mensajeARecibir->OK != 1) { sprintf(log_text, "%s\n", mensajeARecibir->mensaje); log_info_message(log_text); return -1; } else { log_info_message("Respuesta Handshake entre PROGRAMA-KERNEL recibida"); } while (1) { log_info_message( "\nEL PROGRAMA SE QUEDA ESPERANDO MENSAJES DE IMPRIMIR/ IMPRIMIR TEXTO O FINALIZAR EJECUCION\n"); msj = recibir_mensaje_de_servidor(socket); if (msj != NULL ) { mensajeARecibir = (t_KER_PRO_CPU_UMV*) msj; } else { log_debug_message("ERROR AL RECIBIR MENSAJE NULO"); return -1; } switch (mensajeARecibir->gen_msg.id_MSJ) { case IMPRIMIR: { log_info_message("LLEGO MENSAJE CON ID IMPRIMIR"); sprintf(log_text, "SE IMPRIME EL VALOR DE LA VARIABLE: %i\n", mensajeARecibir->valor); log_info_message(log_text); break; } case IMPRIMIR_TEXTO: { // SE HACE LO DE IMPRIMIR TEXTO log_info_message("LLEGO MENSAJE CON ID IMPRIMIR TEXTO"); sprintf(log_text, "SE IMPRIME EL TEXTO:\n\n %s\n", mensajeARecibir->texto); log_info_message(log_text); break; } case FINALIZACION_EJECUCION_PROGRAMA: { log_info_message( "\n---------------LLEGO UN MENSAJE DE FINALIZACION----------------\n"); log_info_message("\nLA EJECUCION DE ESTE PROGRAMA HA CONCLUIDO\n"); return EXIT_SUCCESS; break; } default: { log_info_message( "\n---------------LLEGO UN MENSAJE DESCONOCIDO A PROGRAMA----------------\n"); } } } return EXIT_SUCCESS; }