Skip to content
Snippets Groups Projects
Verified Commit da873b4a authored by Rohan's avatar Rohan
Browse files

maintain http version of subscription

parent 99c5366b
No related branches found
No related tags found
1 merge request!19httpv2 support
...@@ -432,7 +432,7 @@ void nrf_app::handle_create_subscription( ...@@ -432,7 +432,7 @@ void nrf_app::handle_create_subscription(
// generate a subscription ID // generate a subscription ID
generate_ev_subscription_id(evsub_id); generate_ev_subscription_id(evsub_id);
ss.get()->set_subscription_id(evsub_id); ss.get()->set_subscription_id(evsub_id);
ss.get()->set_http_version(http_version);
// subscribe to NF status registered // subscribe to NF status registered
// subscribe_nf_status(evsub_id); // from nrf_app // subscribe_nf_status(evsub_id); // from nrf_app
// subscribe to NF status // subscribe to NF status
...@@ -471,7 +471,7 @@ void nrf_app::handle_create_subscription( ...@@ -471,7 +471,7 @@ void nrf_app::handle_create_subscription(
for (auto p : profiles) { for (auto p : profiles) {
// send notifications // send notifications
nrf_client_inst->notify_subscribed_event( nrf_client_inst->notify_subscribed_event(
p, NOTIFICATION_TYPE_NF_REGISTERED, notification_uris); p, NOTIFICATION_TYPE_NF_REGISTERED, notification_uris, http_version);
} }
} }
...@@ -1025,12 +1025,13 @@ void nrf_app::handle_nf_status_registered(const std::string& profile_id) { ...@@ -1025,12 +1025,13 @@ void nrf_app::handle_nf_status_registered(const std::string& profile_id) {
find_nf_profile(profile_id, profile); find_nf_profile(profile_id, profile);
if (profile.get() != nullptr) { if (profile.get() != nullptr) {
std::vector<std::string> notification_uris = {}; std::vector<std::string> notification_uris = {};
uint8_t httpVersion = 1;
get_subscription_list( get_subscription_list(
profile_id, NOTIFICATION_TYPE_NF_REGISTERED, notification_uris); profile_id, NOTIFICATION_TYPE_NF_REGISTERED, notification_uris, httpVersion);
// send notifications // send notifications
if (notification_uris.size() > 0) if (notification_uris.size() > 0)
nrf_client_inst->notify_subscribed_event( nrf_client_inst->notify_subscribed_event(
profile, NOTIFICATION_TYPE_NF_REGISTERED, notification_uris); profile, NOTIFICATION_TYPE_NF_REGISTERED, notification_uris, httpVersion);
else else
Logger::nrf_app().debug("\tNo subscription found"); Logger::nrf_app().debug("\tNo subscription found");
...@@ -1056,13 +1057,14 @@ void nrf_app::handle_nf_status_deregistered( ...@@ -1056,13 +1057,14 @@ void nrf_app::handle_nf_status_deregistered(
p.get()->get_nf_instance_id().c_str()); p.get()->get_nf_instance_id().c_str());
std::vector<std::string> notification_uris = {}; std::vector<std::string> notification_uris = {};
uint8_t http_version = 1;
get_subscription_list( get_subscription_list(
p.get()->get_nf_instance_id(), NOTIFICATION_TYPE_NF_DEREGISTERED, p.get()->get_nf_instance_id(), NOTIFICATION_TYPE_NF_DEREGISTERED,
notification_uris); notification_uris, http_version);
// send notifications // send notifications
if (notification_uris.size() > 0) if (notification_uris.size() > 0)
nrf_client_inst->notify_subscribed_event( nrf_client_inst->notify_subscribed_event(
p, NOTIFICATION_TYPE_NF_DEREGISTERED, notification_uris); p, NOTIFICATION_TYPE_NF_DEREGISTERED, notification_uris, http_version);
else else
Logger::nrf_app().debug("\tNo subscription found"); Logger::nrf_app().debug("\tNo subscription found");
} }
...@@ -1085,14 +1087,15 @@ void nrf_app::handle_nf_status_profile_changed(const std::string& profile_id) { ...@@ -1085,14 +1087,15 @@ void nrf_app::handle_nf_status_profile_changed(const std::string& profile_id) {
find_nf_profile(profile_id, profile); find_nf_profile(profile_id, profile);
if (profile.get() != nullptr) { if (profile.get() != nullptr) {
std::vector<std::string> notification_uris = {}; std::vector<std::string> notification_uris = {};
uint8_t http_version = 1;
get_subscription_list( get_subscription_list(
profile_id, NOTIFICATION_TYPE_NF_PROFILE_CHANGED, notification_uris); profile_id, NOTIFICATION_TYPE_NF_PROFILE_CHANGED, notification_uris, http_version);
// Notification data includes NF profile (other alternative, includes // Notification data includes NF profile (other alternative, includes
// profile_changes) // profile_changes)
// send notifications // send notifications
if (notification_uris.size() > 0) if (notification_uris.size() > 0)
nrf_client_inst->notify_subscribed_event( nrf_client_inst->notify_subscribed_event(
profile, NOTIFICATION_TYPE_NF_PROFILE_CHANGED, notification_uris); profile, NOTIFICATION_TYPE_NF_PROFILE_CHANGED, notification_uris, http_version);
else else
Logger::nrf_app().debug("\tNo subscription found"); Logger::nrf_app().debug("\tNo subscription found");
} else { } else {
...@@ -1104,7 +1107,7 @@ void nrf_app::handle_nf_status_profile_changed(const std::string& profile_id) { ...@@ -1104,7 +1107,7 @@ void nrf_app::handle_nf_status_profile_changed(const std::string& profile_id) {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void nrf_app::get_subscription_list( void nrf_app::get_subscription_list(
const std::string& profile_id, const uint8_t& notification_type, const std::string& profile_id, const uint8_t& notification_type,
std::vector<std::string>& uris) const { std::vector<std::string>& uris, uint8_t& http_version) const {
Logger::nrf_app().info( Logger::nrf_app().info(
"\tGet the list of subscriptions related to this profile, profile id %s", "\tGet the list of subscriptions related to this profile, profile id %s",
profile_id.c_str()); profile_id.c_str());
...@@ -1123,6 +1126,8 @@ void nrf_app::get_subscription_list( ...@@ -1123,6 +1126,8 @@ void nrf_app::get_subscription_list(
std::string uri; std::string uri;
s.second.get()->get_notification_uri(uri); s.second.get()->get_notification_uri(uri);
http_version = s.second.get()->get_http_version();
// check notification event type // check notification event type
bool match_notif_type = false; bool match_notif_type = false;
for (auto i : s.second.get()->get_notif_events()) { for (auto i : s.second.get()->get_notif_events()) {
......
...@@ -409,7 +409,7 @@ class nrf_app { ...@@ -409,7 +409,7 @@ class nrf_app {
*/ */
void get_subscription_list( void get_subscription_list(
const std::string& profile_id, const uint8_t& notification_type, const std::string& profile_id, const uint8_t& notification_type,
std::vector<std::string>& uris) const; std::vector<std::string>& uris, uint8_t& http_version) const;
/* /*
* Verify whether the requester is allowed to discover the NF services * Verify whether the requester is allowed to discover the NF services
......
...@@ -88,8 +88,8 @@ nrf_client::~nrf_client() { ...@@ -88,8 +88,8 @@ nrf_client::~nrf_client() {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
CURL* nrf_client::curl_create_handle( CURL* nrf_client::curl_create_handle(
const std::string& uri, const std::string& data, const std::string& uri, const std::string& data, std::string& response_data,
std::string& response_data) { uint8_t http_version) {
// create handle for a curl request // create handle for a curl request
CURL* curl = curl_easy_init(); CURL* curl = curl_easy_init();
...@@ -106,17 +106,26 @@ CURL* nrf_client::curl_create_handle( ...@@ -106,17 +106,26 @@ CURL* nrf_client::curl_create_handle(
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, data.length()); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, data.length());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str()); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());
if (http_version == 2) {
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
// curl_easy_setopt(curl, CURLOPT_PORT, 8080);
// We use a self-signed test server, skip verification during debugging
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(
curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE);
}
} }
return curl; return curl;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void nrf_client::send_curl_multi( void nrf_client::send_curl_multi(
const std::string& uri, const std::string& data, const std::string& uri, const std::string& data, std::string& response_data,
std::string& response_data) { uint8_t http_version) {
// create a new handle and add to the multi handle // create a new handle and add to the multi handle
// the curl will actually be sent in perform_curl_multi // the curl will actually be sent in perform_curl_multi
CURL* tmp = curl_create_handle(uri, data, response_data); CURL* tmp = curl_create_handle(uri, data, response_data, http_version);
curl_multi_add_handle(curl_multi, tmp); curl_multi_add_handle(curl_multi, tmp);
handles.push_back(tmp); handles.push_back(tmp);
} }
...@@ -209,9 +218,11 @@ void nrf_client::curl_release_handles() { ...@@ -209,9 +218,11 @@ void nrf_client::curl_release_handles() {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void nrf_client::notify_subscribed_event( void nrf_client::notify_subscribed_event(
const std::shared_ptr<nrf_profile>& profile, const uint8_t& event_type, const std::shared_ptr<nrf_profile>& profile, const uint8_t& event_type,
const std::vector<std::string>& uris) { const std::vector<std::string>& uris, uint8_t http_version) {
Logger::nrf_app().debug( Logger::nrf_app().debug(
"Send notification for the subscribed event to the subscriptions"); "Send notification for the subscribed event to the subscriptions (HTTP "
"VERSION %d)",
http_version);
std::map<std::string, std::string> responses = {}; std::map<std::string, std::string> responses = {};
// Fill the json part // Fill the json part
...@@ -255,7 +266,7 @@ void nrf_client::notify_subscribed_event( ...@@ -255,7 +266,7 @@ void nrf_client::notify_subscribed_event(
for (auto uri : uris) { for (auto uri : uris) {
responses[uri] = ""; responses[uri] = "";
std::unique_ptr<std::string> httpData(new std::string()); std::unique_ptr<std::string> httpData(new std::string());
send_curl_multi(uri, body, responses[uri]); send_curl_multi(uri, body, responses[uri], http_version);
} }
perform_curl_multi( perform_curl_multi(
......
...@@ -64,7 +64,7 @@ class nrf_client { ...@@ -64,7 +64,7 @@ class nrf_client {
*/ */
void notify_subscribed_event( void notify_subscribed_event(
const std::shared_ptr<nrf_profile>& profile, const uint8_t& event_type, const std::shared_ptr<nrf_profile>& profile, const uint8_t& event_type,
const std::vector<std::string>& uris); const std::vector<std::string>& uris, uint8_t http_version);
/* /*
* Create Curl handle for multi curl * Create Curl handle for multi curl
...@@ -75,7 +75,7 @@ class nrf_client { ...@@ -75,7 +75,7 @@ class nrf_client {
*/ */
CURL* curl_create_handle( CURL* curl_create_handle(
const std::string& uri, const std::string& data, const std::string& uri, const std::string& data,
std::string& response_data); std::string& response_data, uint8_t http_version);
/* /*
* Prepare to send a request using curl multi * Prepare to send a request using curl multi
...@@ -86,7 +86,7 @@ class nrf_client { ...@@ -86,7 +86,7 @@ class nrf_client {
*/ */
void send_curl_multi( void send_curl_multi(
const std::string& uri, const std::string& data, const std::string& uri, const std::string& data,
std::string& response_data); std::string& response_data, uint8_t http_version);
/* /*
* Perform curl multi to actually process the available data * Perform curl multi to actually process the available data
......
...@@ -115,6 +115,16 @@ boost::posix_time::ptime nrf_subscription::get_validity_time() const { ...@@ -115,6 +115,16 @@ boost::posix_time::ptime nrf_subscription::get_validity_time() const {
return validity_time; return validity_time;
} }
//------------------------------------------------------------------------------
void nrf_subscription::set_http_version(const uint8_t& httpVersion) {
http_version = httpVersion;
}
//------------------------------------------------------------------------------
uint8_t nrf_subscription::get_http_version() const{
return http_version;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void nrf_subscription::display() { void nrf_subscription::display() {
Logger::nrf_app().debug("Subscription information"); Logger::nrf_app().debug("Subscription information");
......
...@@ -157,7 +157,19 @@ class nrf_subscription { ...@@ -157,7 +157,19 @@ class nrf_subscription {
* @return [boost::posix_time::ptime &] validity time * @return [boost::posix_time::ptime &] validity time
*/ */
boost::posix_time::ptime get_validity_time() const; boost::posix_time::ptime get_validity_time() const;
/*
* Set the http_version
* @param [uint8_t&]: http_version: http_version
* @return void
*/
void set_http_version(const uint8_t& http_version);
/*
* Get the http_version
* @param [void]
* @return http_version
*/
uint8_t get_http_version() const;
/* /*
* Subscribe to be notified when a new NF registered to the NRF * Subscribe to be notified when a new NF registered to the NRF
* @param void * @param void
...@@ -188,6 +200,7 @@ class nrf_subscription { ...@@ -188,6 +200,7 @@ class nrf_subscription {
nrf_event& m_event_sub; nrf_event& m_event_sub;
bs2::connection ev_connection; bs2::connection ev_connection;
boost::posix_time::ptime validity_time; boost::posix_time::ptime validity_time;
uint8_t http_version =1;
}; };
} // namespace app } // namespace app
} // namespace nrf } // namespace nrf
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment