summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichele Papalini <micpapal@cisco.com>2020-02-17 17:08:12 +0000
committerGerrit Code Review <gerrit@fd.io>2020-02-17 17:08:12 +0000
commite539441a59c53f790f273eb6f0df79b38a2776fb (patch)
treebb2c38bc40d8f235acc1f82fbf2fc04e3e80f8f1
parent64a22cf6f812fbdd1b5a0eb184b178d88c6a329f (diff)
parentbdb6ed48ba56ec9d7f2cd1ec62beb75593eb6dcb (diff)
Merge "[HICN-524 HICN-526] Add manifest and content lifetime options to hproxy command line"
-rw-r--r--apps/http-proxy/main.cc25
-rw-r--r--apps/http-proxy/src/IcnReceiver.cc11
-rw-r--r--apps/http-proxy/src/IcnReceiver.h5
3 files changed, 28 insertions, 13 deletions
diff --git a/apps/http-proxy/main.cc b/apps/http-proxy/main.cc
index 8dfaec77e..20655071c 100644
--- a/apps/http-proxy/main.cc
+++ b/apps/http-proxy/main.cc
@@ -19,11 +19,11 @@ using namespace transport;
int usage(char* program) {
std::cerr << "ICN Plugin not loaded!" << std::endl;
- std::cerr
- << "USAGE: " << program << "\n"
- << "[HTTP_PREFIX] -a [SERVER_IP_ADDRESS] "
- "-p [SERVER_PORT] -c [CACHE_SIZE] -m [MTU] -P [FIRST_IPv6_WORD_HEX]"
- << std::endl;
+ std::cerr << "USAGE: " << program << "\n"
+ << "[HTTP_PREFIX] -a [SERVER_IP_ADDRESS] "
+ "-p [SERVER_PORT] -c [CACHE_SIZE] -m [MTU] -l [DEFAULT_LIFETIME "
+ "(seconds)] -P [FIRST_IPv6_WORD_HEX] -M (enable manifest)"
+ << std::endl;
return -1;
}
@@ -34,9 +34,11 @@ int main(int argc, char** argv) {
std::string cache_size("50000");
std::string mtu("1500");
std::string first_ipv6_word("b001");
+ std::string default_content_lifetime("7200"); // seconds
+ bool manifest = false;
int opt;
- while ((opt = getopt(argc, argv, "a:p:c:m:P:")) != -1) {
+ while ((opt = getopt(argc, argv, "a:p:c:m:P:l:M")) != -1) {
switch (opt) {
case 'a':
ip_address = optarg;
@@ -53,6 +55,12 @@ int main(int argc, char** argv) {
case 'P':
first_ipv6_word = optarg;
break;
+ case 'l':
+ default_content_lifetime = optarg;
+ break;
+ case 'M':
+ manifest = true;
+ break;
case 'h':
default:
return usage(argv[0]);
@@ -69,8 +77,9 @@ int main(int argc, char** argv) {
std::cout << "Connecting to " << ip_address << " port " << port
<< " Cache size " << cache_size << " Prefix " << prefix << " MTU "
<< mtu << " IPv6 first word " << first_ipv6_word << std::endl;
- transport::AsyncConsumerProducer proxy(prefix, ip_address, port, cache_size,
- mtu, first_ipv6_word);
+ transport::AsyncConsumerProducer proxy(
+ prefix, ip_address, port, cache_size, mtu, first_ipv6_word,
+ std::stoul(default_content_lifetime) * 1000, manifest);
proxy.run();
diff --git a/apps/http-proxy/src/IcnReceiver.cc b/apps/http-proxy/src/IcnReceiver.cc
index 8d0fb4917..cc47e2ed4 100644
--- a/apps/http-proxy/src/IcnReceiver.cc
+++ b/apps/http-proxy/src/IcnReceiver.cc
@@ -55,7 +55,8 @@ core::Prefix generatePrefix(const std::string& prefix_url,
AsyncConsumerProducer::AsyncConsumerProducer(
const std::string& prefix, std::string& ip_address, std::string& port,
- std::string& cache_size, std::string& mtu, std::string& first_ipv6_word)
+ std::string& cache_size, std::string& mtu, std::string& first_ipv6_word,
+ unsigned long default_lifetime, bool manifest)
: prefix_(generatePrefix(prefix, first_ipv6_word)),
producer_socket_(),
ip_address_(ip_address),
@@ -71,7 +72,8 @@ AsyncConsumerProducer::AsyncConsumerProducer(
[this]() {
std::queue<interface::PublicationOptions> empty;
std::swap(response_name_queue_, empty);
- }) {
+ }),
+ default_content_lifetime_(default_lifetime) {
int ret = producer_socket_.setSocketOption(
interface::GeneralTransportOptions::OUTPUT_BUFFER_SIZE, cache_size_);
@@ -80,7 +82,7 @@ AsyncConsumerProducer::AsyncConsumerProducer(
}
ret = producer_socket_.setSocketOption(
- interface::GeneralTransportOptions::MAKE_MANIFEST, true);
+ interface::GeneralTransportOptions::MAKE_MANIFEST, manifest);
if (ret != SOCKET_OPTION_SET) {
TRANSPORT_LOGD("Warning: impossible to enable signatures.");
@@ -166,7 +168,8 @@ void AsyncConsumerProducer::manageIncomingInterest(
pair.first->second.second = true;
- response_name_queue_.emplace(std::move(name), is_mpd ? 1000 : 100000);
+ response_name_queue_.emplace(std::move(name),
+ is_mpd ? 1000 : default_content_lifetime_);
connector_.send(payload, [packet = std::move(packet)]() {});
}
diff --git a/apps/http-proxy/src/IcnReceiver.h b/apps/http-proxy/src/IcnReceiver.h
index 67f615ad7..9d0ab5172 100644
--- a/apps/http-proxy/src/IcnReceiver.h
+++ b/apps/http-proxy/src/IcnReceiver.h
@@ -36,7 +36,8 @@ class AsyncConsumerProducer {
explicit AsyncConsumerProducer(const std::string& prefix,
std::string& ip_address, std::string& port,
std::string& cache_size, std::string& mtu,
- std::string& first_ipv6_word);
+ std::string& first_ipv6_word,
+ unsigned long default_content_lifetime, bool manifest);
void start();
@@ -69,6 +70,8 @@ class AsyncConsumerProducer {
// connection_map_;
ATSConnector connector_;
+ unsigned long default_content_lifetime_;
+
// ResponseInfoMap --> max_seq_number + bool indicating whether request is in
// production
ResponseInfoMap chunk_number_map_;