Basic sequence of operations
Fairmount uses the following process to allow the usage of an encrypted DVD as if it was decrypted:
- A disc is inserted by the user
- Fairmount receives a notification that a new disc is available
- If the disk is a video DVD, the original disk is unmounted
- Fairmount starts a local web server, accessible only by the local host, to serve the decrypted image
- The decrypted image is then mounted using hdiutil
- When the decrypted image is ejected, the web server is stopped and the original disc is ejected
Source files overview
The source code of Fairmount is distributed with the DVDRemaster package. Here is an overview of each source file:
- Types.h:
Specifies some data types used throughout the code.
- Decryption.[h,m]:
Provides the API for interfacing with dvdcss, which is not distributed with Fairmount. It is rather loaded from the user's disk by searching for VLC Media Player's bundle.
- FairMount.[h,m]:
Contains the main classes for Fairmount, the Fairmount class which registers itself with the Disk Arbitration framework to receive disk notifications and the DVDServer class doing the heavywork and containing the web server object.
- Overlay.[h,m]:
Contains the code neccessary to show the progress overlay.
- socketWrap.[h,c]:
Provides a simplified socket API.
- FileSize.[h,c]:
Provides the byte size of block devices.
- ListFiles.[h,cpp]:
Lists the files of the ISO9660 filesystem of the DVD. Used by CSSFileAccess to ensure decryption is only applied to VOB files.
- HTTPServer.[h,cpp]:
Minimal web server able to serve large files.
- IFileAccess.h:
Provides an interface to all data access done by the web server.
- FileAccess.cpp:
Simple file access module used for debugging purposes.
- CSSFileAccess.cpp:
File access module doing the decryption on the VOB files.
- CachedFileAccess.cpp:
File access module providing threaded read-ahead cache.
Working on Fairmount
The first thing to do is to set the DYLD_INSERT_LIBRARIES environment variable to /usr/lib/libMallocDebug.A.dylib. This ensures memory bugs are found sooner.
We welcome comments, suggestions and fixes. Any modifications should be sent to fairmount@metakine.com
for integration.