int comprueba(char * path_original, char * path_final) { // Comprueba que los dos archivos enviados en los path sean identicos // Es normal que de como resultado "Byte del fallo: 54" porque es donde // empieza el archivo y termina el encabezado int resultado = 0, i = 0, tamanio = tamanio_archivo(path_original); FILE *original = fopen(path_original, "rb"); FILE *final = fopen(path_final, "rb"); char c_original, c_final; while (!feof(original) && resultado == 0 && i < tamanio) { c_original = fgetc(original); c_final = fgetc(final); i++; if (c_original != c_final) { resultado = 1; printf("Byte del fallo: %d \n", i); } } fclose(original); fclose(final); return resultado; }
void conseguirArchivoFinal(int socket_FS){ uint32_t tamanioRuta; recibir(socket_FS,&tamanioRuta,sizeof(uint32_t)); char* ruta = malloc(tamanioRuta); recibir(socket_FS,ruta,tamanioRuta); uint32_t tamanioNombre; recibir(socket_FS,&tamanioNombre,sizeof(uint32_t)); char* nombre = malloc(tamanioNombre); recibir(socket_FS,nombre,tamanioNombre); int fd_archivo = open(nombre,O_RDONLY); char* mapeo; int tamanioArchivo = tamanio_archivo(fd_archivo); if( (mapeo = mmap(NULL, tamanioArchivo, PROT_READ, MAP_SHARED, fd_archivo, 0 )) == MAP_FAILED){ //Si no se pudo ejecutar el MMAP, imprimir el error y aborta; printf("Error con MMAP"); abort(); } char idProceso = 'N'; char idOperacion = 'T'; int tamanioEnvio = tamanioArchivo + 1; enviar(socket_FS,&idProceso,sizeof(char)); enviar(socket_FS,&idOperacion,sizeof(char)); enviar(socket_FS,&tamanioRuta,sizeof(uint32_t)); enviar(socket_FS,ruta,tamanioRuta); enviar(socket_FS,&tamanioEnvio,sizeof(uint32_t)); enviar(socket_FS,mapeo,tamanioEnvio); close(fd_archivo); munmap(mapeo,tamanioEnvio); }
void conseguirBloqueYEnviar(int socket){ int tamanio; recv(socket,&tamanio,sizeof(int),0); char* nombre = malloc(tamanio); recv(socket,nombre,tamanio,0); int fd_archivo = open(nombre,O_RDONLY); char* bloqueConseguido; int tamanioArchivo = tamanio_archivo(fd_archivo); if( (bloqueConseguido = mmap(NULL, tamanioArchivo, PROT_READ, MAP_SHARED, fd_archivo, 0 )) == MAP_FAILED){ //Si no se pudo ejecutar el MMAP, imprimir el error y aborta; printf("Error con MMAP"); abort(); } int tamanioEnvio = tamanioArchivo+1; enviar(socket,&tamanioEnvio,sizeof(uint32_t)); enviar(socket,bloqueConseguido,tamanioEnvio); free(nombre); close(fd_archivo); munmap(bloqueConseguido,tamanioEnvio); }
void conseguirYEnviarLoQuePideElFS(socket_FS){ uint32_t tamanio; char* nombreArchivo; recibir(socket_FS,&tamanio,sizeof(uint32_t)); recibir(socket_FS,nombreArchivo,tamanio); int fd_archivo = open(nombreArchivo,O_RDONLY); //agregar al archivo de config!! char* mapeo; uint32_t tamanioArchivo = tamanio_archivo(fd_archivo); if( (mapeo = mmap(NULL, tamanioArchivo, PROT_READ, MAP_SHARED, fd_archivo, 0 )) == MAP_FAILED){ //Si no se pudo ejecutar el MMAP, imprimir el error y aborta; printf("Error con MMAP"); abort(); } // char idProceso = 'N'; // char idOperacion = 'A'; // enviar(socket_FS,&idProceso,sizeof(char)); // enviar(socket_FS,&idOperacion,sizeof(char)); enviar(socket_FS,&tamanioArchivo,sizeof(uint32_t)); enviar(socket_FS,mapeo,tamanioArchivo); munmap(mapeo,tamanioArchivo); }
void cifrador_archivo(int accion, char * path_origen, char * path_destino, ECRYPT_ctx * ctx){ FILE * archivo_origen; FILE * archivo_destino; // Abro los archivos y verifico que existan archivo_origen = fopen(path_origen, "rb"); archivo_destino = fopen(path_destino, "wb"); if (!archivo_origen) { printf("Imposible arbrir el archivo!"); system("exit"); } if (!archivo_destino) { printf("Imposible arbrir el archivo!"); system("exit"); } char * extension = conseguir_extension(path_origen); if (strcmp(extension, "BMP") == 0) { long int encabezado = 53; long int total_archivo = tamanio_archivo(path_origen); copiar_texto_claro( archivo_origen, archivo_destino, encabezado); cifrador(accion, archivo_origen, archivo_destino, ctx, total_archivo - encabezado); } else if(strcmp(extension, "WAV") == 0){ long int encabezado = 44; long int total_archivo = tamanio_archivo(path_origen); copiar_texto_claro( archivo_origen, archivo_destino, encabezado); cifrador(accion, archivo_origen, archivo_destino, ctx, total_archivo - encabezado); } fclose(archivo_destino); fclose(archivo_origen); free(ctx); }
char* mapearAMemoriaElEspacioDeDatos(char* path){ char* mapeo; int fd_archivo = open(path,O_RDONLY); int tamanioArchivo = tamanio_archivo(fd_archivo); if( (mapeo = mmap(NULL, tamanioArchivo, PROT_READ, MAP_SHARED, fd_archivo, 0 )) == MAP_FAILED){ //Si no se pudo ejecutar el MMAP, imprimir el error y aborta; printf("Error con MMAP"); abort(); } return mapeo; }