1 /* 2 * Copyright 2013, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Ingo Weinhold <ingo_weinhold@gmx.de> 7 */ 8 #ifndef _PACKAGE__PRIVATE__DAEMON_CLIENT_H_ 9 #define _PACKAGE__PRIVATE__DAEMON_CLIENT_H_ 10 11 12 #include <Messenger.h> 13 #include <package/PackageDefs.h> 14 #include <String.h> 15 16 #include <package/DaemonDefs.h> 17 18 19 class BDirectory; 20 21 22 namespace BPackageKit { 23 24 25 class BInstallationLocationInfo; 26 class BPackageInfoSet; 27 28 29 namespace BPrivate { 30 31 32 class BActivationTransaction; 33 34 35 class BDaemonClient { 36 public: 37 class BCommitTransactionResult; 38 39 public: 40 BDaemonClient(); 41 ~BDaemonClient(); 42 43 status_t GetInstallationLocationInfo( 44 BPackageInstallationLocation location, 45 BInstallationLocationInfo& _info); 46 status_t CommitTransaction( 47 const BActivationTransaction& transaction, 48 BCommitTransactionResult& _result); 49 // B_OK only means _result is initialized, 50 // not the success of committing the 51 // transaction 52 53 status_t CreateTransaction( 54 BPackageInstallationLocation location, 55 BActivationTransaction& _transaction, 56 BDirectory& _transactionDirectory); 57 58 private: 59 status_t _InitMessenger(); 60 status_t _ExtractPackageInfoSet(const BMessage& message, 61 const char* field, BPackageInfoSet& _infos); 62 63 status_t _CommitTransaction( 64 const BActivationTransaction& transaction, 65 BCommitTransactionResult& _result); 66 67 private: 68 BMessenger fDaemonMessenger; 69 }; 70 71 72 class BDaemonClient::BCommitTransactionResult { 73 public: 74 BCommitTransactionResult(); 75 BCommitTransactionResult(int32 error, 76 const BString& errorMessage, 77 const BString& errorPackage, 78 const BString& oldStateDirectory); 79 ~BCommitTransactionResult(); 80 81 void SetTo(int32 error, const BString& errorMessage, 82 const BString& errorPackage, 83 const BString& oldStateDirectory); 84 85 status_t Error() const; 86 BDaemonError DaemonError() const; 87 // may be B_DAEMON_OK, even if Error() is 88 // != B_OK, then Error() is as specific as 89 // is known 90 const BString& ErrorMessage() const; 91 // may be empty, even on error 92 const BString& ErrorPackage() const; 93 // may be empty, even on error 94 95 BString FullErrorMessage() const; 96 97 const BString& OldStateDirectory() const; 98 99 private: 100 int32 fError; 101 BString fErrorMessage; 102 BString fErrorPackage; 103 BString fOldStateDirectory; 104 }; 105 106 107 } // namespace BPrivate 108 } // namespace BPackageKit 109 110 111 #endif // _PACKAGE__PRIVATE__DAEMON_CLIENT_H_ 112