[Amis-vcs] SF.net SVN: amis: [2172] branches/amis3
Brought to you by:
julienq,
marisademeglio
From: <mar...@us...> - 2007-09-26 00:03:50
|
Revision: 2172 http://amis.svn.sourceforge.net/amis/?rev=2172&view=rev Author: marisademeglio Date: 2007-09-25 17:03:54 -0700 (Tue, 25 Sep 2007) Log Message: ----------- Hooked up everything for PDTB support. The last issue is in this function: pdtb.cpp -> registerBookKeyFile the function gets called with the correct parameters, but it feels like ambulant doesn't see the pdtb plugin. (even after i remembered to reroute the pdtbplugin projects' build outputs to the AMIS3 branch.). Modified Paths: -------------- branches/amis3/AmisCore/include/dtb/Dtb.h branches/amis3/AmisCore/include/dtb/DtbFileSet.h branches/amis3/AmisCore/src/dtb/Dtb.cpp branches/amis3/AmisCore/src/dtb/DtbFileSet.cpp branches/amis3/AmisGuiMFC2/src/gui/AmisGuiMFC2.cpp branches/amis3/VC7/amis.sln Modified: branches/amis3/AmisCore/include/dtb/Dtb.h =================================================================== --- branches/amis3/AmisCore/include/dtb/Dtb.h 2007-09-25 15:58:17 UTC (rev 2171) +++ branches/amis3/AmisCore/include/dtb/Dtb.h 2007-09-26 00:03:54 UTC (rev 2172) @@ -36,6 +36,8 @@ { namespace dtb { +typedef bool (*ProtectedBookKeyHandlerFunctionPtr)(const ambulant::net::url*, const ambulant::net::url*); + class Dtb { public: @@ -69,7 +71,8 @@ ambulant::net::url calculateUriOfData(amis::dtb::smil::SmilMediaGroup*); int getDaisyVersion(); - //bool isProtected(); + bool isProtected(); + void setCallbackForPreprocessingBookKey(ProtectedBookKeyHandlerFunctionPtr); private: bool processNcc(const ambulant::net::url*); @@ -81,8 +84,7 @@ void cleanUpObjects(); void setNewLastmark(amis::dtb::smil::SmilMediaGroup*); string searchFullTextRelative(int); - //bool registerBookKeyFile(const ambulant::net::url*); - //bool checkForCopyProtection(amis::dtb::Metadata*); + bool checkForCopyProtection(amis::dtb::Metadata*); private: amis::dtb::Metadata* mpMetadata; @@ -100,10 +102,8 @@ string mLastSearchResult; string mLastSearchedTextFile; int mDaisyVersion; - //bool mbIsProtected; - //ambulant::net::url mBookKeyFile; - //ambulant::net::url mNccPdtbFile; - + bool mbIsProtected; + ProtectedBookKeyHandlerFunctionPtr mpCallbackForPreprocessingBookKey; }; } } Modified: branches/amis3/AmisCore/include/dtb/DtbFileSet.h =================================================================== --- branches/amis3/AmisCore/include/dtb/DtbFileSet.h 2007-09-25 15:58:17 UTC (rev 2171) +++ branches/amis3/AmisCore/include/dtb/DtbFileSet.h 2007-09-26 00:03:54 UTC (rev 2172) @@ -58,6 +58,11 @@ void setTextFile(const ambulant::net::url*); amis::UrlList* getTextFiles(); + void setProtectedNavFilepath(const ambulant::net::url*); + const ambulant::net::url* getProtectedNavFilepath(); + void setProtectedBookKeyFilepath(const ambulant::net::url*); + const ambulant::net::url* getProtectedBookKeyFilepath(); + private: string calculateSafeBookmarksFilename(wstring); void findTextFiles(); @@ -69,6 +74,8 @@ ambulant::net::url mBookmarksDirectory; ambulant::net::url mBookmarksFilepath; ambulant::net::url mSmilFilepath; + ambulant::net::url mProtectedNavFilepath; + ambulant::net::url mProtectedBookKeyFilepath; UrlList mTextFiles; }; } Modified: branches/amis3/AmisCore/src/dtb/Dtb.cpp =================================================================== --- branches/amis3/AmisCore/src/dtb/Dtb.cpp 2007-09-25 15:58:17 UTC (rev 2171) +++ branches/amis3/AmisCore/src/dtb/Dtb.cpp 2007-09-26 00:03:54 UTC (rev 2172) @@ -19,6 +19,11 @@ License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "AmisCore.h" +#if defined(AMIS_COMPILER_MSVC) +//windows header containing charset conversion macros +#include <afxpriv.h> +#endif #include "dtb/Dtb.h" #include "io/NccFileReader.h" @@ -28,13 +33,8 @@ #include "io/TextSearch.h" #include "io/OpfFileReader.h" #include "io/NcxFileReader.h" - -#if defined(AMIS_COMPILER_MSVC) -//windows header containing charset conversion macros -#include <afxpriv.h> -#endif -//#include "ambulant/common/plugin_engine.h" +#include "ambulant/common/plugin_engine.h" //constructor amis::dtb::Dtb::Dtb() @@ -51,6 +51,7 @@ mpCustomTests = NULL; mUid.erase(); mDaisyVersion = 0; + mpCallbackForPreprocessingBookKey = NULL; } //destructor amis::dtb::Dtb::~Dtb() @@ -136,8 +137,6 @@ mpFiles->initWithNccOrOpf(fileUrl); mpFiles->setBookmarksDirectory(bookmarksDirectory); - //mpFiles->print(); - if (DtbFileSet::isNccFile(fileUrl)) { mDaisyVersion = 2; @@ -218,19 +217,28 @@ //if this NCC file turned out to be a protected book, then we need to get custom tests and a nav model //from an encrypted file - if (1)// (checkForCopyProtection(mpMetadata)) + if (checkForCopyProtection(mpMetadata)) { - /* mbIsProtected = true; + mbIsProtected = true; if (mpNavModel) delete mpNavModel; if (mpCustomTests) delete mpCustomTests; - //register key file with ambulant - this->registerBookKeyFile(&mBookKeyFile); - //reparse the ncc.pdtb file - if (!ncc_file_reader.readFromFile(&mNccPdtbFile)) return false; + if (mpCallbackForPreprocessingBookKey != NULL) + { + if (mpCallbackForPreprocessingBookKey( + getFileSet()->getProtectedNavFilepath(), + getFileSet()->getProtectedBookKeyFilepath() + ) == true) + { + //reparse the ncc.pdtb file + if (!ncc_file_reader.readFromFile(getFileSet()->getProtectedNavFilepath())) return false; - mpNavModel = ncc_file_reader.getNavModel(); - mpCustomTests = ncc_file_reader.getCustomTests();*/ + mpNavModel = ncc_file_reader.getNavModel(); + mpCustomTests = ncc_file_reader.getCustomTests(); + } + else return false; //TODO error message + } + else return false; //TODO error message } mpSpine = spine_visitor.getSpine(mpNavModel, this->getFileSet()->getBookDirectory()); @@ -238,7 +246,7 @@ mUid = getUid(); mpFiles->setAdditionalDataAfterInitialParse(this->mUid, NULL, NULL); amis::dtb::nav::ResolveSmilDataVisitor resolve_smil_visitor; - resolve_smil_visitor.resolve(mpNavModel, mpSpine, /*mpFiles->getBookDirectory(),*/ true); + resolve_smil_visitor.resolve(mpNavModel, mpSpine, true); this->mpTextSmilMap = resolve_smil_visitor.getSmilTextMap(); } @@ -257,7 +265,7 @@ //note that this step takes a very long time if the book is large, because //it involves walking the nav model and also opening all the SMIL files - resolve_smil_visitor.resolve(mpNavModel, mpSpine, /*mpFiles->getBookDirectory(),*/ false); + resolve_smil_visitor.resolve(mpNavModel, mpSpine, false); this->mpTextSmilMap = resolve_smil_visitor.getSmilTextMap(); } @@ -611,29 +619,24 @@ return p_bmk; } -//set the book key in the ambulant plugin engine -/* -bool amis::dtb::Dtb::registerBookKeyFile(const ambulant::net::url* key) +//set the function that deals with protected books +//in our case (amis-ambulant), the callback will register the key file with the decryption plugin +//I decided to do this instead of linking the plugin to AmisCore directly +//the callback here will get invoked during processNcc +void amis::dtb::Dtb::setCallbackForPreprocessingBookKey(ProtectedBookKeyHandlerFunctionPtr pFunction) { - // Check whether the plugin is available. - /*ambulant::common::plugin_engine *pe = ambulant::common::plugin_engine::get_plugin_engine(); - assert(pe); - pdtb_plugin_interface *pdata = (pdtb_plugin_interface *)pe->get_extra_data("pdtb_plugin"); - if (!pdata) return false; //TODO give error message - return pdata->set_key(mURL, key); - return false; -}*/ + mpCallbackForPreprocessingBookKey = pFunction; +} + //this function looks at the metadata and decides if the book is a protected book //if so, the book key and "real" ncc file path are saved -/* bool amis::dtb::Dtb::checkForCopyProtection(amis::dtb::Metadata* pMetadata) { #if defined(AMIS_COMPILER_MSVC) //windows utility for converting wstring to string USES_CONVERSION; #endif - if (!pMetadata) return false; //metadata uses wide strings @@ -653,15 +656,15 @@ { ambulant::net::url keyfile = ambulant::net::url::from_filename(s_key); ambulant::net::url ncc = ambulant::net::url::from_filename(s_ncc); - mBookKeyFile = keyfile.join_to_base(*getFileSet()->getBookDirectory()); - mNccPdtbFile = ncc.join_to_base(*getFileSet()->getBookDirectory()); + getFileSet()->setProtectedBookKeyFilepath(&keyfile.join_to_base(*getFileSet()->getBookDirectory())); + getFileSet()->setProtectedNavFilepath(&ncc.join_to_base(*getFileSet()->getBookDirectory())); return true; } else return false; } -*/ + //just in case this info is useful to anyone -/*bool amis::dtb::Dtb::isProtected() +bool amis::dtb::Dtb::isProtected() { return mbIsProtected; -}*/ \ No newline at end of file +} \ No newline at end of file Modified: branches/amis3/AmisCore/src/dtb/DtbFileSet.cpp =================================================================== --- branches/amis3/AmisCore/src/dtb/DtbFileSet.cpp 2007-09-25 15:58:17 UTC (rev 2171) +++ branches/amis3/AmisCore/src/dtb/DtbFileSet.cpp 2007-09-26 00:03:54 UTC (rev 2172) @@ -274,3 +274,24 @@ { return &mTextFiles; } + +//this should be a full path (inconsistent, I know, but at least documented) +void amis::dtb::DtbFileSet::setProtectedNavFilepath(const ambulant::net::url* file) +{ + mProtectedNavFilepath = *file; +} + +const ambulant::net::url* amis::dtb::DtbFileSet::getProtectedNavFilepath() +{ + return &mProtectedNavFilepath; +} + +//this should be a full path +void amis::dtb::DtbFileSet::setProtectedBookKeyFilepath(const ambulant::net::url* file) +{ + mProtectedBookKeyFilepath = *file; +} +const ambulant::net::url* amis::dtb::DtbFileSet::getProtectedBookKeyFilepath() +{ + return &mProtectedBookKeyFilepath; +} \ No newline at end of file Modified: branches/amis3/AmisGuiMFC2/src/gui/AmisGuiMFC2.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/gui/AmisGuiMFC2.cpp 2007-09-25 15:58:17 UTC (rev 2171) +++ branches/amis3/AmisGuiMFC2/src/gui/AmisGuiMFC2.cpp 2007-09-26 00:03:54 UTC (rev 2172) @@ -173,6 +173,8 @@ //load user keys into the ambulant plugin engine addUserKeysToAmbulantPluginEngine(); + //set the callback function to handle book key registration + amis::dtb::DtbWithHooks::Instance()->setCallbackForPreprocessingBookKey(registerBookKeyFile); return TRUE; } @@ -253,9 +255,9 @@ string filename = p_dlg->showOpen(); //the user is able to open UAK files through AMIS - if (isUakFile(filename)) + if (isUserKeyFile(filename)) { - importUakIntoRegistry(filename); + importUserKeysIntoRegistry(filename); } //else it's a book Modified: branches/amis3/VC7/amis.sln =================================================================== --- branches/amis3/VC7/amis.sln 2007-09-25 15:58:17 UTC (rev 2171) +++ branches/amis3/VC7/amis.sln 2007-09-26 00:03:54 UTC (rev 2172) @@ -17,6 +17,14 @@ {E0F81CE5-9C15-4E36-BC71-42BE1C0F2406} = {E0F81CE5-9C15-4E36-BC71-42BE1C0F2406} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pdtbplugin", "..\..\..\..\ambulant-private\pdtbplugin\pdtbplugin.vcproj", "{D909EB3F-6D3E-43D5-ADFF-190F3F9EA840}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PdtbIePlugin", "..\..\..\..\ambulant-private\pdtbplugin\PdtbIePlugin\PdtbIePlugin.vcproj", "{8B8E82A3-277F-4486-8D6A-4BCFB2DE3464}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug @@ -39,6 +47,14 @@ {A7A37247-BAAC-4376-8354-96A8C09F926A}.Debug.Build.0 = Debug|Win32 {A7A37247-BAAC-4376-8354-96A8C09F926A}.Release.ActiveCfg = Release|Win32 {A7A37247-BAAC-4376-8354-96A8C09F926A}.Release.Build.0 = Release|Win32 + {D909EB3F-6D3E-43D5-ADFF-190F3F9EA840}.Debug.ActiveCfg = Debug|Win32 + {D909EB3F-6D3E-43D5-ADFF-190F3F9EA840}.Debug.Build.0 = Debug|Win32 + {D909EB3F-6D3E-43D5-ADFF-190F3F9EA840}.Release.ActiveCfg = Release|Win32 + {D909EB3F-6D3E-43D5-ADFF-190F3F9EA840}.Release.Build.0 = Release|Win32 + {8B8E82A3-277F-4486-8D6A-4BCFB2DE3464}.Debug.ActiveCfg = Debug|Win32 + {8B8E82A3-277F-4486-8D6A-4BCFB2DE3464}.Debug.Build.0 = Debug|Win32 + {8B8E82A3-277F-4486-8D6A-4BCFB2DE3464}.Release.ActiveCfg = Release|Win32 + {8B8E82A3-277F-4486-8D6A-4BCFB2DE3464}.Release.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |