Pass the NDN object to connect. Added TcpTransport::tempReceive()
diff --git a/ndn-cpp/NDN.cpp b/ndn-cpp/NDN.cpp
index c41f1d7..5a3d829 100644
--- a/ndn-cpp/NDN.cpp
+++ b/ndn-cpp/NDN.cpp
@@ -18,7 +18,7 @@
vector<unsigned char> encoding;
interest.encode(encoding);
- transport_->connect(host_.c_str(), port_);
+ transport_->connect(*this);
transport_->send(&encoding[0], encoding.size());
}
diff --git a/ndn-cpp/NDN.hpp b/ndn-cpp/NDN.hpp
index c574b8d..4b8e961 100644
--- a/ndn-cpp/NDN.hpp
+++ b/ndn-cpp/NDN.hpp
@@ -33,7 +33,9 @@
*/
void expressInterest(const Name &name, const ptr_lib::shared_ptr<Closure> &closure, const Interest *interestTemplate);
- Transport &tempGetTransport() { return *transport_; }
+ const char *getHost() const { return host_.c_str(); }
+
+ unsigned short getPort() const { return port_; }
virtual void onReceivedElement(unsigned char *element, unsigned int elementLength);
diff --git a/ndn-cpp/transport/TcpTransport.cpp b/ndn-cpp/transport/TcpTransport.cpp
index c3abab6..5da7baa 100644
--- a/ndn-cpp/transport/TcpTransport.cpp
+++ b/ndn-cpp/transport/TcpTransport.cpp
@@ -4,17 +4,22 @@
*/
#include <stdexcept>
+#include "../NDN.hpp"
+#include "../c/encoding/BinaryXMLElementReader.h"
#include "TcpTransport.hpp"
using namespace std;
namespace ndn {
-void TcpTransport::connect(const char *host, unsigned short port)
+void TcpTransport::connect(NDN &ndn)
{
ndn_Error error;
- if (error = ndn_TcpTransport_connect(&transport_, (char *)host, port))
- throw std::runtime_error(ndn_getErrorString(error));
+ if (error = ndn_TcpTransport_connect(&transport_, (char *)ndn.getHost(), ndn.getPort()))
+ throw std::runtime_error(ndn_getErrorString(error));
+
+ // TODO: Properly indicate connected status.
+ ndn_ = &ndn;
}
void TcpTransport::send(unsigned char *data, unsigned int dataLength)
@@ -24,14 +29,21 @@
throw std::runtime_error(ndn_getErrorString(error));
}
-unsigned int TcpTransport::receive(unsigned char *buffer, unsigned int bufferLength)
+void TcpTransport::tempReceive()
{
+ if (!ndn_)
+ // TODO: Properly check if connected.
+ return;
+ ndn_BinaryXMLElementReader elementReader;
+ // Automaticall cast ndn_ to (struct ndn_ElementListener *)
+ ndn_BinaryXMLElementReader_init(&elementReader, ndn_);
+
+ unsigned char buffer[8000];
ndn_Error error;
unsigned int nBytes;
- if (error = ndn_TcpTransport_receive(&transport_, buffer, bufferLength, &nBytes))
+ if (error = ndn_TcpTransport_receive(&transport_, buffer, sizeof(buffer), &nBytes))
throw std::runtime_error(ndn_getErrorString(error));
-
- return nBytes;
+ ndn_BinaryXMLElementReader_onReceivedData(&elementReader, buffer, nBytes);
}
}
diff --git a/ndn-cpp/transport/TcpTransport.hpp b/ndn-cpp/transport/TcpTransport.hpp
index a5d0ca8..c4fa1c6 100644
--- a/ndn-cpp/transport/TcpTransport.hpp
+++ b/ndn-cpp/transport/TcpTransport.hpp
@@ -16,16 +16,18 @@
TcpTransport()
{
ndn_TcpTransport_init(&transport_);
+ ndn_ = 0;
}
- virtual void connect(const char *host, unsigned short port);
+ virtual void connect(NDN &ndn);
virtual void send(unsigned char *data, unsigned int dataLength);
- virtual unsigned int receive(unsigned char *buffer, unsigned int bufferLength);
+ virtual void tempReceive();
private:
struct ndn_TcpTransport transport_;
+ NDN *ndn_;
};
}
diff --git a/ndn-cpp/transport/Transport.cpp b/ndn-cpp/transport/Transport.cpp
index 84a4e02..4d6024c 100644
--- a/ndn-cpp/transport/Transport.cpp
+++ b/ndn-cpp/transport/Transport.cpp
@@ -10,7 +10,7 @@
namespace ndn {
-void Transport::connect(const char *host, unsigned short port)
+void Transport::connect(NDN &ndn)
{
throw logic_error("unimplemented");
}
@@ -20,9 +20,4 @@
throw logic_error("unimplemented");
}
-unsigned int Transport::receive(unsigned char *buffer, unsigned int bufferLength)
-{
- throw logic_error("unimplemented");
-}
-
}
diff --git a/ndn-cpp/transport/Transport.hpp b/ndn-cpp/transport/Transport.hpp
index 655ce6e..94e60ec 100644
--- a/ndn-cpp/transport/Transport.hpp
+++ b/ndn-cpp/transport/Transport.hpp
@@ -7,14 +7,13 @@
#define NDN_TRANSPORT_HPP
namespace ndn {
-
+
+class NDN;
class Transport {
public:
- virtual void connect(const char *host, unsigned short port);
+ virtual void connect(NDN &ndn);
virtual void send(unsigned char *data, unsigned int dataLength);
-
- virtual unsigned int receive(unsigned char *buffer, unsigned int bufferLength);
};
}
diff --git a/tests/test-get-async.cpp b/tests/test-get-async.cpp
index 85273ba..5d541a9 100644
--- a/tests/test-get-async.cpp
+++ b/tests/test-get-async.cpp
@@ -35,15 +35,11 @@
int main(int argc, char** argv)
{
try {
- NDN ndn(ptr_lib::make_shared<TcpTransport>(), "E.hub.ndn.ucla.edu", 9695, ptr_lib::make_shared<MyClosure>());
+ ptr_lib::shared_ptr<TcpTransport> transport(new TcpTransport());
+ NDN ndn(transport, "E.hub.ndn.ucla.edu", 9695, ptr_lib::make_shared<MyClosure>());
ndn.expressInterest(Name("/ndn/ucla.edu/apps/ndn-js-test/hello.txt/level2/%FD%05%0B%16%7D%95%0E"), ptr_lib::make_shared<MyClosure>(), 0);
- ndn_BinaryXMLElementReader elementReader;
- ndn_BinaryXMLElementReader_init(&elementReader, (struct ndn_ElementListener *)&ndn);
-
- unsigned char buffer[8000];
- unsigned int nBytes = ndn.tempGetTransport().receive(buffer, sizeof(buffer));
- ndn_BinaryXMLElementReader_onReceivedData(&elementReader, buffer, nBytes);
+ transport->tempReceive();
} catch (exception &e) {
cout << "exception: " << e.what() << endl;
}