Ejemplo n.º 1
0
static void enviarRespuestaWriteFile(const resultado_t* const res,
		int32_t client, args_t* args) {
	open_file_t* file = foundOrAddOpenFileInList(res->path,
			args->lockeos->openFileList);
	pthread_rwlock_rdlock(&file->lock);
	t_stream* respuesta;
	if (res->data == NULL) {
		if (res->error == NAME_TOO_LONG) {
			respuesta = serializar_handshake(NAME_TOO_LONG);
		} else if (res->error == NO_EXISTE) {
			respuesta = serializar_handshake(NO_EXISTE);
		}else if(res->error==ESTA_LLENO){
			respuesta=serializar_handshake(ESTA_LLENO);
			puts("funco");
		}
	} else {
		respuesta = serializar_respuesta_escribir_archivo(OK, args->ped->bytes);
		free(res->data);
	}
	enviar_paquete(client, respuesta->data, respuesta->length);
	free(respuesta->data);
	free(respuesta);
	free(res->path);
	free((void*) res);
	pthread_rwlock_unlock(&file->lock);
	open_file_finishHim(args->lockeos->openFileList, file);
}
void escribir_archivo_response(const operation_result_t* const result, int32_t socket, s_Mapped_File_t* s_file){
	active_file_t* data_file = active_file_list_find(s_file->active_file_list, result->path);
	RDLOCK(data_file->rwlock);

	t_stream* respuesta;
	if( result->data == NULL){
		if (result->error == ENOENT){
			respuesta = serializar_respuesta_finalizacion(-ENOENT);
		}
		else if (result->error == ENOSPC){
					respuesta = serializar_respuesta_finalizacion(-ENOSPC);
				}
		else if (result->error == ENAMETOOLONG){
			respuesta = serializar_respuesta_finalizacion(-ENAMETOOLONG);
		}
	}
	else{
		size_t* bytes_escritos = (size_t *) result->data;
		respuesta = serializar_respuesta_escribir_archivo(RESPUESTA_OK,  *bytes_escritos);
	}

	sockete_enviar(socket, respuesta->data, respuesta->longitud);
	free(respuesta->data);
	free(respuesta);

	UNLOCK(data_file->rwlock);
	active_file_finished_using(s_file->active_file_list, data_file);
}