face: Skeleton implementation for the TCP protocol (face, channel, factory)
refs: #1132, #1133, #1134, #1135
Change-Id: I4a5935a078c7289dc6ea9b33f358f1a578c4405c
diff --git a/daemon/face/tcp-channel-factory.hpp b/daemon/face/tcp-channel-factory.hpp
new file mode 100644
index 0000000..04932ca
--- /dev/null
+++ b/daemon/face/tcp-channel-factory.hpp
@@ -0,0 +1,73 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NFD_FACE_TCP_CHANNEL_FACTORY_HPP
+#define NFD_FACE_TCP_CHANNEL_FACTORY_HPP
+
+#include "channel-factory.hpp"
+#include "tcp-channel.hpp"
+
+namespace ndn {
+
+class TcpChannelFactory : public ChannelFactory<tcp::Endpoint, TcpChannel>
+{
+public:
+ /**
+ * \brief Exception of TcpChannelFactory
+ */
+ struct Error : public ChannelFactory::Error
+ {
+ Error(const std::string& what) : ChannelFactory::Error(what) {}
+ };
+
+ /**
+ * \brief Create TCP-based channel using tcp::Endpoint
+ *
+ * tcp::Endpoint is really an alias for boost::asio::ip::tcp::endpoint.
+ *
+ * If this method called twice with the same endpoint, only one channel
+ * will be created. The second call will just retrieve the existing
+ * channel.
+ *
+ * \returns always a valid pointer to a TcpChannel object, an exception
+ * is thrown if it cannot be created.
+ *
+ * \throws TcpChannelFactory::Error
+ *
+ * \see http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/ip__tcp/endpoint.html
+ * for details on ways to create tcp::Endpoint
+ */
+ shared_ptr<TcpChannel>
+ create(const tcp::Endpoint& localEndpoint);
+
+ /**
+ * \brief Create TCP-based channel using specified host and port number
+ *
+ * This method will attempt to resolve the provided host and port numbers
+ * and will throw TcpChannelFactory::Error when channel cannot be created.
+ *
+ * Note that this call will **BLOCK** until resolution is done or failed.
+ *
+ * \throws TcpChannelFactory::Error
+ */
+ shared_ptr<TcpChannel>
+ create(const std::string& localHost, const std::string& localPort);
+
+ /**
+ * \brief Look up TcpChannel using specified local endpoint
+ *
+ * \returns shared pointer to the existing TcpChannel object
+ * or empty shared pointer when such channel does not exist
+ *
+ * \throws never
+ */
+ shared_ptr<TcpChannel>
+ find(const tcp::Endpoint& localEndpoint);
+};
+
+} // namespace ndn
+
+#endif // NFD_FACE_TCP_CHANNEL_FACTORY_HPP