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_DAEMON_H
9#define PACKAGE_DAEMON_H
10
11
12#include <fs_info.h>
13#include <Node.h>
14#include <ObjectList.h>
15#include <VolumeRoster.h>
16
17#include <Server.h>
18
19
20class Root;
21class Volume;
22
23
24class PackageDaemon : public BServer {
25public:
26								PackageDaemon(status_t* _error);
27	virtual						~PackageDaemon();
28
29			status_t			Init();
30
31	virtual	void				MessageReceived(BMessage* message);
32
33private:
34			typedef BObjectList<Root> RootList;
35
36private:
37			status_t			_RegisterVolume(dev_t device);
38			void				_UnregisterVolume(Volume* volume);
39
40			status_t			_GetOrCreateRoot(const node_ref& nodeRef,
41									Root*& _root);
42			Root*				_FindRoot(const node_ref& nodeRef) const;
43			void				_PutRoot(Root* root);
44
45			Volume*				_FindVolume(dev_t deviceID) const;
46
47			void				_HandleVolumeMounted(const BMessage* message);
48			void				_HandleVolumeUnmounted(const BMessage* message);
49
50private:
51			Root*				fSystemRoot;
52			RootList			fRoots;
53			BVolumeRoster		fVolumeWatcher;
54};
55
56
57
58#endif	// PACKAGE_DAEMON_H
59