aboutsummaryrefslogtreecommitdiffstats
path: root/apps/consumers
diff options
context:
space:
mode:
Diffstat (limited to 'apps/consumers')
-rwxr-xr-xapps/consumers/CMakeLists.txt9
-rwxr-xr-xapps/consumers/icnet_consumer_dash.cc217
-rwxr-xr-xapps/consumers/icnet_consumer_test.cc70
-rwxr-xr-xapps/consumers/icnet_iget.cc159
4 files changed, 16 insertions, 439 deletions
diff --git a/apps/consumers/CMakeLists.txt b/apps/consumers/CMakeLists.txt
index 68e79834..86752da7 100755
--- a/apps/consumers/CMakeLists.txt
+++ b/apps/consumers/CMakeLists.txt
@@ -14,17 +14,8 @@
cmake_minimum_required(VERSION 3.2)
set(CONSUMER_SOURCE_FILES icnet_consumer_test.cc)
-set(IGET_SOURCE_FILES icnet_iget.cc)
-set(CONSUMERDASH_SOURCE_FILES icnet_consumer_dash.cc)
add_executable(consumer-test ${CONSUMER_SOURCE_FILES})
-add_executable(iget ${IGET_SOURCE_FILES})
-add_executable(consumer-dash ${CONSUMERDASH_SOURCE_FILES})
target_link_libraries(consumer-test icnet ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
-target_link_libraries(iget icnet ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
-target_link_libraries(consumer-dash icnet ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
-
install(TARGETS consumer-test DESTINATION ${CMAKE_INSTALL_PREFIX}/bin COMPONENT library)
-install(TARGETS iget DESTINATION ${CMAKE_INSTALL_PREFIX}/bin COMPONENT library)
-install(TARGETS consumer-dash DESTINATION ${CMAKE_INSTALL_PREFIX}/bin COMPONENT library)
diff --git a/apps/consumers/icnet_consumer_dash.cc b/apps/consumers/icnet_consumer_dash.cc
deleted file mode 100755
index 4ec4a2c9..00000000
--- a/apps/consumers/icnet_consumer_dash.cc
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "icnet_socket_consumer.h"
-
-#define DEFAULT_BETA 0.99
-#define DEFAULT_GAMMA 0.07
-
-namespace icnet {
-
-class CallbackContainer {
- public:
- CallbackContainer()
- : work_(new boost::asio::io_service::work(io_service_)),
- handler_(std::async(std::launch::async, [this]() { io_service_.run(); })) {
- seen_manifest_segments_ = 0;
- seen_data_segments_ = 0;
- byte_counter_ = 0;
- }
-
- ~CallbackContainer() {
- work_.reset();
- }
-
- void processPayload(ConsumerSocket &c, const uint8_t *buffer, size_t bufferSize) {
- std::cout << "Content retrieved!! Size: " << bufferSize << std::endl;
- }
-
- bool verifyData(ConsumerSocket &c, const ContentObject &contentObject) {
- if (contentObject.getContentType() == PayloadType::DATA) {
- std::cout << "VERIFY CONTENT" << std::endl;
- } else if (contentObject.getContentType() == PayloadType::MANIFEST) {
- std::cout << "VERIFY MANIFEST" << std::endl;
- }
-
- return true;
- }
-
- void processLeavingInterest(ConsumerSocket &c, const Interest &interest) {
- // std::cout << "LEAVES " << interest.getName().toUri() << std::endl;
- }
-
- private:
- int seen_manifest_segments_;
- int seen_data_segments_;
- int byte_counter_;
- boost::asio::io_service io_service_;
- std::shared_ptr<boost::asio::io_service::work> work_;
- std::future<void> handler_;
-};
-
-class Verificator {
- public:
- Verificator() {
- };
-
- ~Verificator() {
- }
-
- bool onPacket(ConsumerSocket &c, const ContentObject &contentObject) {
- return true;
- }
-
-};
-
-void becomeDaemon() {
- pid_t process_id = 0;
- pid_t sid = 0;
-
- // Create child process
- process_id = fork();
-
- // Indication of fork() failure
- if (process_id < 0) {
- printf("fork failed!\n");
- // Return failure in exit status
- exit(EXIT_FAILURE);
- }
-
- // PARENT PROCESS. Need to kill it.
- if (process_id > 0) {
- printf("process_id of child process %d \n", process_id);
- // return success in exit status
- exit(EXIT_SUCCESS);
- }
-
- //unmask the file mode
- umask(0);
-
- //set new session
- sid = setsid();
- if (sid < 0) {
- // Return failure
- exit(EXIT_FAILURE);
- }
-
- // Change the current working directory to root.
- chdir("/");
-
- // Close stdin. stdout and stderr
- close(STDIN_FILENO);
- close(STDOUT_FILENO);
- close(STDERR_FILENO);
-
- // Really start application
-}
-
-int main(int argc, char **argv) {
- double beta = DEFAULT_BETA;
- double drop_factor = DEFAULT_GAMMA;
- bool daemon = false;
- bool rtt_stats = false;
- int n_segment = 427;
- bool looping = false;
-
- int opt;
- while ((opt = getopt(argc, argv, "b:d:DRn:l")) != -1) {
- switch (opt) {
- case 'b':
- beta = std::stod(optarg);
- break;
- case 'd':
- drop_factor = std::stod(optarg);
- break;
- case 'D':
- daemon = true;
- break;
- case 'R':
- rtt_stats = true;
- break;
- case 'n':
- n_segment = std::stoi(optarg);
- break;
- case 'l':
- looping = true;
- break;
- default:
- exit(EXIT_FAILURE);
- }
- }
-
- std::string name = "ccnx:/webserver/get/sintel/18000";
-
- if (argv[optind] == 0) {
- std::cerr << "Using default name ccnx:/webserver/sintel/18000" << std::endl;
- } else {
- name = argv[optind];
- }
-
- if (daemon) {
- becomeDaemon();
- }
-
- ConsumerSocket c(Name(name.c_str()), TransportProtocolAlgorithms::RAAQM);
-
- CallbackContainer stubs;
- Verificator verificator;
-
- c.setSocketOption(GeneralTransportOptions::INTEREST_LIFETIME, 1001);
- c.setSocketOption(RaaqmTransportOptions::BETA_VALUE, beta);
- c.setSocketOption(RaaqmTransportOptions::DROP_FACTOR, drop_factor);
- c.setSocketOption(GeneralTransportOptions::MAX_INTEREST_RETX, 10);
- c.setSocketOption(OtherOptions::VIRTUAL_DOWNLOAD, true);
- c.setSocketOption(RaaqmTransportOptions::RTT_STATS, rtt_stats);
-
- c.setSocketOption(ConsumerCallbacksOptions::CONTENT_OBJECT_TO_VERIFY,
- (ConsumerContentObjectVerificationCallback) std::bind(&Verificator::onPacket,
- &verificator,
- std::placeholders::_1,
- std::placeholders::_2));
-
- c.setSocketOption(ConsumerCallbacksOptions::CONTENT_RETRIEVED,
- (ConsumerContentCallback) std::bind(&CallbackContainer::processPayload,
- &stubs,
- std::placeholders::_1,
- std::placeholders::_2,
- std::placeholders::_3));
-
- c.setSocketOption(ConsumerCallbacksOptions::INTEREST_OUTPUT,
- (ConsumerInterestCallback) std::bind(&CallbackContainer::processLeavingInterest,
- &stubs,
- std::placeholders::_1,
- std::placeholders::_2));
-
- do {
- std::stringstream ss;
- for (int i = 1; i < n_segment; i++) {
- ss << "ccnx:/seg_" << i << ".m4s";
- auto str = ss.str();
- c.consume(Name(str));
- ss.str("");
- }
- } while (looping);
-
- c.stop();
-
- return 0;
-
-}
-
-} // end namespace icnet
-
-int main(int argc, char **argv) {
- return icnet::main(argc, argv);
-}
diff --git a/apps/consumers/icnet_consumer_test.cc b/apps/consumers/icnet_consumer_test.cc
index d5b57d6f..5c7eecb0 100755
--- a/apps/consumers/icnet_consumer_test.cc
+++ b/apps/consumers/icnet_consumer_test.cc
@@ -13,13 +13,16 @@
* limitations under the License.
*/
-#include "icnet_socket_consumer.h"
+#include "icnet_transport_socket_consumer.h"
+#include "icnet_utils_daemonizator.h"
#define DEFAULT_BETA 0.99
#define DEFAULT_GAMMA 0.07
namespace icnet {
+namespace transport {
+
class CallbackContainer {
public:
CallbackContainer()
@@ -34,20 +37,20 @@ class CallbackContainer {
work_.reset();
}
- void processPayload(ConsumerSocket &c, const uint8_t *buffer, size_t bufferSize) {
- std::cout << "Content retrieved!! Size: " << bufferSize << std::endl;
+ void processPayload(ConsumerSocket &c, std::vector<uint8_t> &&payload) {
+ std::cout << "Content retrieved!! Size: " << payload.size() << std::endl;
- io_service_.dispatch([buffer, bufferSize]() {
- std::ofstream file("ciao.txt", std::ofstream::binary);
- file.write((char *) buffer, bufferSize);
+ io_service_.dispatch([payload]() {
+ std::ofstream file("consumer_test_file", std::ofstream::binary);
+ file.write((char *) payload.data(), payload.size());
file.close();
});
}
bool verifyData(ConsumerSocket &c, const ContentObject &contentObject) {
- if (contentObject.getContentType() == PayloadType::DATA) {
+ if (contentObject.getPayloadType() == PayloadType::DATA) {
std::cout << "VERIFY CONTENT" << std::endl;
- } else if (contentObject.getContentType() == PayloadType::MANIFEST) {
+ } else if (contentObject.getPayloadType() == PayloadType::MANIFEST) {
std::cout << "VERIFY MANIFEST" << std::endl;
}
@@ -82,48 +85,6 @@ class Verificator {
}
};
-void becomeDaemon() {
- pid_t process_id = 0;
- pid_t sid = 0;
-
- // Create child process
- process_id = fork();
-
- // Indication of fork() failure
- if (process_id < 0) {
- printf("fork failed!\n");
- // Return failure in exit status
- exit(EXIT_FAILURE);
- }
-
- // PARENT PROCESS. Need to kill it.
- if (process_id > 0) {
- printf("process_id of child process %d \n", process_id);
- // return success in exit status
- exit(EXIT_SUCCESS);
- }
-
- //unmask the file mode
- umask(0);
-
- //set new session
- sid = setsid();
- if (sid < 0) {
- // Return failure
- exit(EXIT_FAILURE);
- }
-
- // Change the current working directory to root.
- chdir("/");
-
- // Close stdin. stdout and stderr
- close(STDIN_FILENO);
- close(STDOUT_FILENO);
- close(STDERR_FILENO);
-
- // Really start application
-}
-
int main(int argc, char *argv[]) {
double beta = DEFAULT_BETA;
double dropFactor = DEFAULT_GAMMA;
@@ -159,7 +120,7 @@ int main(int argc, char *argv[]) {
}
if (daemon) {
- becomeDaemon();
+ utils::Daemonizator::daemonize();
}
ConsumerSocket c(Name(name.c_str()), TransportProtocolAlgorithms::RAAQM);
@@ -184,8 +145,7 @@ int main(int argc, char *argv[]) {
(ConsumerContentCallback) std::bind(&CallbackContainer::processPayload,
&stubs,
std::placeholders::_1,
- std::placeholders::_2,
- std::placeholders::_3));
+ std::placeholders::_2));
c.setSocketOption(ConsumerCallbacksOptions::INTEREST_OUTPUT,
(ConsumerInterestCallback) std::bind(&CallbackContainer::processLeavingInterest,
@@ -203,6 +163,8 @@ int main(int argc, char *argv[]) {
} // end namespace icnet
+} // end namespace transport
+
int main(int argc, char *argv[]) {
- return icnet::main(argc, argv);
+ return icnet::transport::main(argc, argv);
}
diff --git a/apps/consumers/icnet_iget.cc b/apps/consumers/icnet_iget.cc
deleted file mode 100755
index db5ef173..00000000
--- a/apps/consumers/icnet_iget.cc
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "icnet_socket_consumer.h"
-
-typedef std::chrono::time_point<std::chrono::system_clock> Time;
-typedef std::chrono::milliseconds TimeDuration;
-
-Time t1 = std::chrono::system_clock::now();
-
-#define DEFAULT_BETA 0.99
-#define DEFAULT_GAMMA 0.07
-
-namespace icnet {
-
-class CallbackContainer {
- public:
- CallbackContainer()
- : work_(new boost::asio::io_service::work(io_service_)),
- handler_(std::async(std::launch::async, [this]() { io_service_.run(); })) {
- seen_manifest_segments_ = 0;
- seen_data_segments_ = 0;
- byte_counter_ = 0;
- }
-
- ~CallbackContainer() {
- work_.reset();
- }
-
- void processPayload(ConsumerSocket &c, const uint8_t *buffer, size_t buffer_size) {
- Name m_name;
- c.getSocketOption(GeneralTransportOptions::NAME_PREFIX, m_name);
- std::string filename = m_name.toString().substr(1 + m_name.toString().find_last_of("/"));
- io_service_.dispatch([buffer, buffer_size, filename]() {
- std::cout << "Saving to: " << filename << " " << buffer_size / 1024 << "kB" << std::endl;
- Time t3 = std::chrono::system_clock::now();;
- std::ofstream file(filename.c_str(), std::ofstream::binary);
- file.write((char *) buffer, buffer_size);
- file.close();
- Time t2 = std::chrono::system_clock::now();;
- TimeDuration dt = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1);
- TimeDuration dt3 = std::chrono::duration_cast<std::chrono::milliseconds>(t3 - t1);
- long msec = dt.count();
- long msec3 = dt3.count();
- std::cout << "Elapsed Time: " << msec / 1000.0 << " seconds -- " << buffer_size * 8 / msec / 1000.0
- << "[Mbps] -- " << buffer_size * 8 / msec3 / 1000.0 << "[Mbps]" << std::endl;
- });
- }
-
- bool verifyData(ConsumerSocket &c, const ContentObject &content_object) {
- if (content_object.getContentType() == PayloadType::DATA) {
- std::cout << "VERIFY CONTENT" << std::endl;
- } else if (content_object.getContentType() == PayloadType::MANIFEST) {
- std::cout << "VERIFY MANIFEST" << std::endl;
- }
-
- return true;
- }
-
- void processLeavingInterest(ConsumerSocket &c, const Interest &interest) {
- // std::cout << "OUTPUT: " << interest.getName() << std::endl;
- }
-
- private:
- int seen_manifest_segments_;
- int seen_data_segments_;
- int byte_counter_;
- boost::asio::io_service io_service_;
- std::shared_ptr<boost::asio::io_service::work> work_;
- std::future<void> handler_;
-};
-
-/*
- * The client signature verification is currently being reworked with the new API.
- * The implementation is disabled for the moment.
- */
-
-class Verificator {
- public:
- Verificator() {
- };
-
- ~Verificator() {
- // m_keyChain.deleteIdentity(Name(IDENTITY_NAME));
- }
-
- bool onPacket(ConsumerSocket &c, const ContentObject &contentObject) {
- return true;
- }
-};
-
-int main(int argc, char **argv) {
-
- std::string url = "";
- std::string locator = "";
- std::string path = "";
- std::string name = "ccnx:/locator/get/path";
- size_t found = 0;
- size_t path_begin = 0;
-
- if (argv[optind] == 0) {
- std::cerr << "Missing URL" << std::endl;
- return 0;
- } else {
- url = argv[optind];
- std::cout << "Iget " << url << std::endl;
- }
-
- found = url.find("//");
- path_begin = url.find('/', found + 2);
- locator = url.substr(found + 2, path_begin - (found + 2));
- path = url.substr(path_begin, std::string::npos);
- std::cout << "locator " << locator << std::endl;
- std::cout << "path " << path << std::endl;
- name = "ccnx:/" + locator + "/get" + path;
- std::cout << "Iget ccnx name: " << name << std::endl;
-
- ConsumerSocket c(Name(name.c_str()), TransportProtocolAlgorithms::RAAQM);
- CallbackContainer stubs;
- Verificator verificator;
-
- c.setSocketOption(ConsumerCallbacksOptions::CONTENT_OBJECT_TO_VERIFY,
- (ConsumerContentObjectVerificationCallback) std::bind(&Verificator::onPacket,
- &verificator,
- std::placeholders::_1,
- std::placeholders::_2));
- c.setSocketOption(ConsumerCallbacksOptions::CONTENT_RETRIEVED,
- (ConsumerContentCallback) std::bind(&CallbackContainer::processPayload,
- &stubs,
- std::placeholders::_1,
- std::placeholders::_2,
- std::placeholders::_3));
- c.setSocketOption(ConsumerCallbacksOptions::INTEREST_OUTPUT,
- (ConsumerInterestCallback) std::bind(&CallbackContainer::processLeavingInterest,
- &stubs,
- std::placeholders::_1,
- std::placeholders::_2));
- c.consume(Name());
- c.stop();
- return 0;
-}
-
-} // end namespace icnet
-
-int main(int argc, char **argv) {
- return icnet::main(argc, argv);
-}