Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-NRF
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenXG
OpenXG-NRF
Commits
89656255
Commit
89656255
authored
Dec 22, 2020
by
Tien-Thinh Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add Update of Subscription to NF Instances
parent
bef804bd
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
156 additions
and
4 deletions
+156
-4
src/api-server/impl/SubscriptionIDDocumentApiImpl.cpp
src/api-server/impl/SubscriptionIDDocumentApiImpl.cpp
+34
-3
src/nrf_app/nrf_app.cpp
src/nrf_app/nrf_app.cpp
+93
-0
src/nrf_app/nrf_app.hpp
src/nrf_app/nrf_app.hpp
+25
-0
yaml/cmd.txt
yaml/cmd.txt
+4
-1
No files found.
src/api-server/impl/SubscriptionIDDocumentApiImpl.cpp
View file @
89656255
...
...
@@ -37,7 +37,8 @@ void SubscriptionIDDocumentApiImpl::remove_subscription(
int
http_code
=
0
;
ProblemDetails
problem_details
=
{};
m_nrf_app
->
handle_remove_subscription
(
subscriptionID
,
http_code
,
1
,
problem_details
);
m_nrf_app
->
handle_remove_subscription
(
subscriptionID
,
http_code
,
1
,
problem_details
);
nlohmann
::
json
json_data
=
{};
std
::
string
content_type
=
"application/json"
;
...
...
@@ -59,9 +60,39 @@ void SubscriptionIDDocumentApiImpl::remove_subscription(
void
SubscriptionIDDocumentApiImpl
::
update_subscription
(
const
std
::
string
&
subscriptionID
,
const
std
::
vector
<
PatchItem
>
&
patchItem
,
Pistache
::
Http
::
ResponseWriter
&
response
)
{
response
.
send
(
Pistache
::
Http
::
Code
::
Ok
,
"Do some magic
\n
"
);
}
Logger
::
nrf_sbi
().
info
(
"Got a request to update of subscription to NF instances, subscription "
"ID %s"
,
subscriptionID
.
c_str
());
int
http_code
=
0
;
ProblemDetails
problem_details
=
{};
m_nrf_app
->
handle_update_subscription
(
subscriptionID
,
patchItem
,
http_code
,
1
,
problem_details
);
// TODO: (section 5.2.2.5.6, Update of Subscription to NF Instances,
// 3GPP TS 29.510 V16.0.0 (2019-06)) if the NRF accepts the extension
// of the lifetime of the subscription, but it assigns a validity time
// different than the value suggested by the NF Service Consumer, a
// "200 OK" response code shall be returned
nlohmann
::
json
json_data
=
{};
std
::
string
content_type
=
"application/json"
;
if
(
http_code
!=
HTTP_STATUS_CODE_204_NO_CONTENT
)
{
to_json
(
json_data
,
problem_details
);
content_type
=
"application/problem+json"
;
// content type
response
.
headers
().
add
<
Pistache
::
Http
::
Header
::
ContentType
>
(
Pistache
::
Http
::
Mime
::
MediaType
(
content_type
));
response
.
send
(
Pistache
::
Http
::
Code
(
http_code
),
json_data
.
dump
().
c_str
());
}
else
{
// content type
response
.
headers
().
add
<
Pistache
::
Http
::
Header
::
ContentType
>
(
Pistache
::
Http
::
Mime
::
MediaType
(
content_type
));
response
.
send
(
Pistache
::
Http
::
Code
(
http_code
));
}
}
}
// namespace api
}
// namespace nrf
}
// namespace oai
src/nrf_app/nrf_app.cpp
View file @
89656255
...
...
@@ -383,6 +383,85 @@ void nrf_app::handle_remove_subscription(const std::string &sub_id,
protocol_application_error_e2str
[
SUBSCRIPTION_NOT_FOUND
]);
}
}
//------------------------------------------------------------------------------
void
nrf_app
::
handle_update_subscription
(
const
std
::
string
&
sub_id
,
const
std
::
vector
<
PatchItem
>
&
patchItem
,
int
&
http_code
,
const
uint8_t
http_version
,
ProblemDetails
&
problem_details
)
{
Logger
::
nrf_app
().
info
(
"Handle an Update of subscription to NF Instance (HTTP version %d)"
,
http_version
);
// Find the existing subscription
std
::
shared_ptr
<
nrf_subscription
>
ss
=
{};
ss
=
find_subscription
(
sub_id
);
bool
op_success
=
false
;
if
(
ss
.
get
()
!=
nullptr
)
{
// patchItem should contain only 1 element
for
(
auto
p
:
patchItem
)
{
patch_op_type_t
op
=
api_conv
::
string_to_patch_operation
(
p
.
getOp
());
// Verify Path
if
((
p
.
getPath
().
substr
(
0
,
1
).
compare
(
"/"
)
!=
0
)
or
(
p
.
getPath
().
length
()
<
2
))
{
Logger
::
nrf_app
().
warn
(
"Bad value for operation path: %s "
,
p
.
getPath
().
c_str
());
http_code
=
HTTP_STATUS_CODE_400_BAD_REQUEST
;
problem_details
.
setCause
(
protocol_application_error_e2str
[
MANDATORY_IE_INCORRECT
]);
return
;
}
std
::
string
path
=
p
.
getPath
().
substr
(
1
);
switch
(
op
)
{
case
PATCH_OP_REPLACE
:
{
if
(
path
.
compare
(
"validityTime"
)
==
0
)
{
try
{
// TODO: (section 5.2.2.5.6, Update of Subscription to NF
// Instances, 3GPP TS 29.510 V16.0.0 (2019-06)) if the NRF accepts
// the extension of the lifetime of the subscription, but it
// assigns a validity time different than the value suggested by
// the NF Service Consumer, a "200 OK" response code shall be
// returned
boost
::
posix_time
::
ptime
pt
(
boost
::
posix_time
::
from_iso_string
(
p
.
getValue
()));
ss
.
get
()
->
set_validity_time
(
pt
);
Logger
::
nrf_app
().
debug
(
"New validity time: %s"
,
p
.
getValue
().
c_str
());
Logger
::
nrf_app
().
debug
(
"Updated a subscription to the DB"
);
// display the info
ss
.
get
()
->
display
();
http_code
=
HTTP_STATUS_CODE_204_NO_CONTENT
;
op_success
=
true
;
}
catch
(
std
::
exception
&
e
)
{
std
::
cout
<<
" Exception: "
<<
e
.
what
()
<<
std
::
endl
;
}
}
}
break
;
default:
{
Logger
::
nrf_app
().
warn
(
"Requested operation is not valid!"
);
}
}
if
(
!
op_success
)
{
http_code
=
HTTP_STATUS_CODE_400_BAD_REQUEST
;
problem_details
.
setCause
(
protocol_application_error_e2str
[
MANDATORY_IE_INCORRECT
]);
}
}
}
else
{
Logger
::
nrf_app
().
debug
(
"Subscription with ID %s does not exit"
,
sub_id
.
c_str
());
http_code
=
HTTP_STATUS_CODE_404_NOT_FOUND
;
problem_details
.
setCause
(
protocol_application_error_e2str
[
SUBSCRIPTION_NOT_FOUND
]);
}
}
//------------------------------------------------------------------------------
bool
nrf_app
::
add_nf_profile
(
const
std
::
string
&
profile_id
,
const
std
::
shared_ptr
<
nrf_profile
>
&
p
)
{
...
...
@@ -547,6 +626,20 @@ bool nrf_app::remove_subscription(const std::string &sub_id) {
}
}
//------------------------------------------------------------------------------
std
::
shared_ptr
<
nrf_subscription
>
nrf_app
::
find_subscription
(
const
std
::
string
&
sub_id
)
const
{
// Logger::nrf_app().info("Find a subscription with ID %s", sub_id.c_str());
std
::
shared_lock
lock
(
m_instance_id2nrf_subscription
);
if
(
instance_id2nrf_subscription
.
count
(
sub_id
)
>
0
)
{
return
instance_id2nrf_subscription
.
at
(
sub_id
);
}
else
{
Logger
::
nrf_app
().
info
(
"Subscription (ID %s) not found"
,
sub_id
.
c_str
());
return
nullptr
;
}
}
//------------------------------------------------------------------------------
void
nrf_app
::
subscribe_task_tick
(
uint64_t
ms
)
{
struct
itimerspec
its
;
...
...
src/nrf_app/nrf_app.hpp
View file @
89656255
...
...
@@ -151,6 +151,22 @@ class nrf_app {
void
handle_remove_subscription
(
const
std
::
string
&
sub_id
,
int
&
http_code
,
const
uint8_t
http_version
,
ProblemDetails
&
problem_details
);
/*
* Handle a Update of Subscription to NF Instances
* @param [const std::string &] sub_id: Subscription ID
* @param [const std::vector<PatchItem> &] patchItem: List of modifications
* need to be applied
* @param [int &] http_code: HTTP code used to return to the consumer
* @param [const uint8_t] http_version: HTTP version
* @param [ProblemDetails &] problem_details: Store details of the error
* @return void
*/
void
handle_update_subscription
(
const
std
::
string
&
sub_id
,
const
std
::
vector
<
PatchItem
>
&
patchItem
,
int
&
http_code
,
const
uint8_t
http_version
,
ProblemDetails
&
problem_details
);
/*
* Insert a nrf profile
* @param [const std::string &] profile_id: Profile ID
...
...
@@ -232,6 +248,15 @@ class nrf_app {
* @return true if successful, otherwise, return false
*/
bool
remove_subscription
(
const
std
::
string
&
sub_id
);
/*
* Find a subscription with its ID
* @param [const std::string &] sub_id: Subscription ID
* @return shared pointer to the subscription if found, otherwise nullptr
*/
std
::
shared_ptr
<
nrf_subscription
>
find_subscription
(
const
std
::
string
&
sub_id
)
const
;
/*
* Subscribe to the task tick event
* @param [uint64_t &] ms: Current time in ms
...
...
yaml/cmd.txt
View file @
89656255
...
...
@@ -7,6 +7,9 @@ curl -X POST http://192.168.1.23/nnrf-nfm/v1/subscriptions -d '{"nfStatusNotific
curl -X POST http://192.168.1.23/nnrf-nfm/v1/subscriptions -d '{"nfStatusNotificationUri":"http://192.168.1.23/nnrf-nfm/v1/nf-instances/343a924e-6494-4927-860b-d45692c95c2d", "subscrCond": {"NfInstanceIdCond": {"nfInstanceId":"AMF"} } }'
curl -X POST http://192.168.1.23/nnrf-nfm/v1/subscriptions -d '{"nfStatusNotificationUri":"http://192.168.1.23/nnrf-nfm/v1/nf-instances/343a924e-6494-4927-860b-d45692c95c2d", "subscrCond": {"NfTypeCond": {"nfType":"AMF"} } }'
curl -X POST -H "Content-Type: application/json" "http://192.168.1.23/nnrf-nfm/v1/subscriptions" -d '{"nfStatusNotificationUri":"http://192.168.1.23/nnrf-nfm/v1/nf-instances/343a924e-6494-4927-860b-d45692c95c2d", "subscrCond": {"NfTypeCond": {"nfType":"AMF"}}, "reqNotifEvents":["NF_REGISTERED", "NF_DEREGISTERED"], "validityTime":"20020131T235959" }'
\ No newline at end of file
curl -X POST -H "Content-Type: application/json" "http://192.168.1.23/nnrf-nfm/v1/subscriptions" -d '{"nfStatusNotificationUri":"http://192.168.1.23/nnrf-nfm/v1/nf-instances/343a924e-6494-4927-860b-d45692c95c2d", "subscrCond": {"NfTypeCond": {"nfType":"AMF"}}, "reqNotifEvents":["NF_REGISTERED", "NF_DEREGISTERED"], "validityTime":"20020131T235959" }'
curl -X PATCH -H "Content-Type: application/json" http://192.168.1.23/nnrf-nfm/v1/subscriptions/1 -d '[{"op":"replace","path":"/validityTime", "value": "20201231T235959"}]'
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment