diff options
author | Max Kellermann <max@duempel.org> | 2014-03-15 15:29:10 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-06-17 03:21:25 +0200 |
commit | c99559dbe937eba73376137ceb5551f1c55764d5 (patch) | |
tree | 0887f02b73b695adc35a30b468b1078d1ac7359f /src/lib/nfs/Manager.hxx | |
parent | 966c4244cbe0de174df1e72e917078269ec9dbb9 (diff) | |
download | mpd-c99559dbe937eba73376137ceb5551f1c55764d5.tar.gz mpd-c99559dbe937eba73376137ceb5551f1c55764d5.tar.xz mpd-c99559dbe937eba73376137ceb5551f1c55764d5.zip |
input/nfs: use the asynchronous libnfs API
More robust and cancellable.
Diffstat (limited to 'src/lib/nfs/Manager.hxx')
-rw-r--r-- | src/lib/nfs/Manager.hxx | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/lib/nfs/Manager.hxx b/src/lib/nfs/Manager.hxx new file mode 100644 index 000000000..4a380bd51 --- /dev/null +++ b/src/lib/nfs/Manager.hxx @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2003-2014 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPD_NFS_MANAGER_HXX +#define MPD_NFS_MANAGER_HXX + +#include "check.h" +#include "Connection.hxx" + +#include <string> +#include <map> + +/** + * A manager for NFS connections. Handles multiple connections to + * multiple NFS servers. + */ +class NfsManager { + class ManagedConnection final : public NfsConnection { + NfsManager &manager; + + public: + ManagedConnection(NfsManager &_manager, EventLoop &_loop, + const char *_server, + const char *_export_name) + :NfsConnection(_loop, _server, _export_name), + manager(_manager) {} + + protected: + /* virtual methods from NfsConnection */ + void OnNfsConnectionError(Error &&error) override; + }; + + EventLoop &loop; + + /** + * Maps server+":"+export_name (see method Key()) to + * #ManagedConnection. + */ + std::map<std::string, ManagedConnection> connections; + +public: + NfsManager(EventLoop &_loop) + :loop(_loop) {} + + gcc_pure + NfsConnection &GetConnection(const char *server, + const char *export_name); + +private: + gcc_pure + static std::string Key(const char *server, const char *export_name) { + return std::string(server) + ':' + export_name; + } +}; + +#endif |