Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-AUSF
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-AUSF
Commits
4c8c76ec
Commit
4c8c76ec
authored
May 17, 2021
by
Tien-Thinh Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replace Curl.cpp/hpp by ausf_client.cpp/hpp
parent
f2918401
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
169 additions
and
259 deletions
+169
-259
src/5gaka/sha256.cpp
src/5gaka/sha256.cpp
+1
-2
src/api_server/impl/DefaultApiImpl.cpp
src/api_server/impl/DefaultApiImpl.cpp
+3
-3
src/ausf_app/CMakeLists.txt
src/ausf_app/CMakeLists.txt
+0
-1
src/ausf_app/ausf_app.cpp
src/ausf_app/ausf_app.cpp
+4
-4
src/ausf_app/ausf_app.hpp
src/ausf_app/ausf_app.hpp
+1
-1
src/ausf_app/ausf_client.cpp
src/ausf_app/ausf_client.cpp
+152
-1
src/ausf_app/ausf_client.hpp
src/ausf_app/ausf_client.hpp
+7
-0
src/ausf_app/ausf_config.cpp
src/ausf_app/ausf_config.cpp
+0
-1
src/ausf_app/curl.cpp
src/ausf_app/curl.cpp
+0
-188
src/ausf_app/curl.hpp
src/ausf_app/curl.hpp
+0
-58
src/common/ausf.h
src/common/ausf.h
+1
-0
No files found.
src/5gaka/sha256.cpp
View file @
4c8c76ec
...
...
@@ -19,9 +19,8 @@
* contact@openairinterface.org
*/
/*! \file
rijndael
.cpp
/*! \file
sha256
.cpp
\brief
\brief Based on https://github.com/OPENAIRINTERFACE/openair-hss
\author Jian Yang, Fengjiao He, Hongxin Wang
\company
\date 2020
...
...
src/api_server/impl/DefaultApiImpl.cpp
View file @
4c8c76ec
...
...
@@ -49,7 +49,7 @@
#include <typeinfo>
#include <map>
#include "ausf_config.hpp"
#include "
curl
.hpp"
#include "
ausf_client
.hpp"
#include "ProblemDetails.h"
using
namespace
config
;
...
...
@@ -223,7 +223,7 @@ void DefaultApiImpl::ue_authentications_auth_ctx_id5g_aka_confirmation_put(
confirmResultInfo
[
"authRemovalInd"
]
=
false
;
cout
<<
confirmResultInfo
.
dump
()
<<
endl
;
Curl
::
curl_http_client
(
ausf_client
::
curl_http_client
(
udmUri
,
Method
,
confirmResultInfo
.
dump
(),
Response
);
}
}
...
...
@@ -304,7 +304,7 @@ void DefaultApiImpl::ue_authentications_post(
Logger
::
ausf_server
().
info
(
"received normal authInfo from amf"
);
}
Curl
::
curl_http_client
(
udmUri
,
Method
,
AuthInfo
.
dump
(),
Response
);
ausf_client
::
curl_http_client
(
udmUri
,
Method
,
AuthInfo
.
dump
(),
Response
);
Logger
::
ausf_server
().
error
(
"response: %s"
,
Response
.
c_str
());
...
...
src/ausf_app/CMakeLists.txt
View file @
4c8c76ec
...
...
@@ -31,7 +31,6 @@ add_library (AUSF STATIC
ausf_app.cpp
ausf_client.cpp
ausf_config.cpp
curl.cpp
)
src/ausf_app/ausf_app.cpp
View file @
4c8c76ec
...
...
@@ -23,7 +23,7 @@
\brief
\author Tien-Thinh NGUYEN
\company Eurecom
\date 202
0
\date 202
1
\email: Tien-Thinh.Nguyen@eurecom.fr
*/
...
...
@@ -50,11 +50,11 @@ ausf_client* ausf_client_inst = nullptr;
//------------------------------------------------------------------------------
ausf_app
::
ausf_app
(
const
std
::
string
&
config_file
)
{
// logger::ausf_server
().startup("Starting...");
Logger
::
ausf_app
().
startup
(
"Starting..."
);
// logger::ausf_server
().startup("Started");
Logger
::
ausf_app
().
startup
(
"Started"
);
}
ausf_app
::~
ausf_app
()
{
// logger::ausf_server
().debug("Delete AUSF_APP instance...");
Logger
::
ausf_app
().
debug
(
"Delete AUSF_APP instance..."
);
}
src/ausf_app/ausf_app.hpp
View file @
4c8c76ec
...
...
@@ -23,7 +23,7 @@
\brief
\author Tien-Thinh NGUYEN
\company Eurecom
\date 202
0
\date 202
1
\email: Tien-Thinh.Nguyen@eurecom.fr
*/
...
...
src/ausf_app/ausf_client.cpp
View file @
4c8c76ec
...
...
@@ -41,9 +41,11 @@
using
namespace
Pistache
::
Http
;
using
namespace
Pistache
::
Http
::
Mime
;
using
namespace
oai
::
ausf
::
app
;
using
namespace
config
;
using
json
=
nlohmann
::
json
;
extern
ausf_client
*
ausf_client_inst
;
extern
ausf_config
ausf_cfg
;
//------------------------------------------------------------------------------
// To read content of the response from NF
...
...
@@ -59,5 +61,154 @@ ausf_client::ausf_client() {}
//------------------------------------------------------------------------------
ausf_client
::~
ausf_client
()
{
Logger
::
ausf_server
().
debug
(
"Delete AUSF Client instance..."
);
Logger
::
ausf_app
().
debug
(
"Delete AUSF Client instance..."
);
}
void
ausf_client
::
curl_http_client
(
std
::
string
remoteUri
,
std
::
string
Method
,
std
::
string
msgBody
,
std
::
string
&
Response
)
{
Logger
::
ausf_server
().
info
(
"Send HTTP message with body %s"
,
msgBody
.
c_str
());
uint32_t
str_len
=
msgBody
.
length
();
char
*
body_data
=
(
char
*
)
malloc
(
str_len
+
1
);
memset
(
body_data
,
0
,
str_len
+
1
);
memcpy
((
void
*
)
body_data
,
(
void
*
)
msgBody
.
c_str
(),
str_len
);
curl_global_init
(
CURL_GLOBAL_ALL
);
CURL
*
curl
=
curl_easy_init
();
if
(
curl
)
{
CURLcode
res
=
{};
struct
curl_slist
*
headers
=
nullptr
;
if
(
!
Method
.
compare
(
"POST"
)
||
!
Method
.
compare
(
"PUT"
)
||
!
Method
.
compare
(
"PATCH"
))
{
std
::
string
content_type
=
"Content-Type: application/json"
;
headers
=
curl_slist_append
(
headers
,
content_type
.
c_str
());
curl_easy_setopt
(
curl
,
CURLOPT_HTTPHEADER
,
headers
);
}
curl_easy_setopt
(
curl
,
CURLOPT_URL
,
remoteUri
.
c_str
());
if
(
!
Method
.
compare
(
"POST"
))
curl_easy_setopt
(
curl
,
CURLOPT_HTTPPOST
,
1
);
else
if
(
!
Method
.
compare
(
"PUT"
))
curl_easy_setopt
(
curl
,
CURLOPT_CUSTOMREQUEST
,
"PUT"
);
else
if
(
!
Method
.
compare
(
"DELETE"
))
curl_easy_setopt
(
curl
,
CURLOPT_CUSTOMREQUEST
,
"DELETE"
);
else
if
(
!
Method
.
compare
(
"PATCH"
))
curl_easy_setopt
(
curl
,
CURLOPT_CUSTOMREQUEST
,
"PATCH"
);
else
curl_easy_setopt
(
curl
,
CURLOPT_HTTPGET
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_TIMEOUT_MS
,
CURL_TIMEOUT_MS
);
curl_easy_setopt
(
curl
,
CURLOPT_TCP_KEEPALIVE
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_INTERFACE
,
ausf_cfg
.
sbi
.
if_name
.
c_str
());
Logger
::
ausf_server
().
info
(
"[CURL] request sent by interface "
+
ausf_cfg
.
sbi
.
if_name
);
// Response information.
long
httpCode
=
{
0
};
std
::
unique_ptr
<
std
::
string
>
httpData
(
new
std
::
string
());
std
::
unique_ptr
<
std
::
string
>
httpHeaderData
(
new
std
::
string
());
// Hook up data handling function.
curl_easy_setopt
(
curl
,
CURLOPT_WRITEFUNCTION
,
&
callback
);
curl_easy_setopt
(
curl
,
CURLOPT_WRITEDATA
,
httpData
.
get
());
curl_easy_setopt
(
curl
,
CURLOPT_HEADERDATA
,
httpHeaderData
.
get
());
if
(
!
Method
.
compare
(
"POST"
)
||
!
Method
.
compare
(
"PUT"
)
||
!
Method
.
compare
(
"PATCH"
))
{
curl_easy_setopt
(
curl
,
CURLOPT_POSTFIELDSIZE
,
msgBody
.
length
());
curl_easy_setopt
(
curl
,
CURLOPT_POSTFIELDS
,
body_data
);
}
res
=
curl_easy_perform
(
curl
);
curl_easy_getinfo
(
curl
,
CURLINFO_RESPONSE_CODE
,
&
httpCode
);
// get the response
std
::
string
response
=
*
httpData
.
get
();
std
::
string
json_data_response
=
""
;
std
::
string
resMsg
=
""
;
bool
is_response_ok
=
true
;
Logger
::
ausf_server
().
info
(
"Get response with httpcode (%d)"
,
httpCode
);
if
(
httpCode
==
0
)
{
Logger
::
ausf_server
().
info
(
"Cannot get response when calling %s"
,
remoteUri
.
c_str
());
// free curl before returning
curl_slist_free_all
(
headers
);
curl_easy_cleanup
(
curl
);
return
;
}
nlohmann
::
json
response_data
=
{};
if
(
httpCode
!=
200
&&
httpCode
!=
201
&&
httpCode
!=
204
)
{
is_response_ok
=
false
;
if
(
response
.
size
()
<
1
)
{
Logger
::
ausf_server
().
info
(
"There's no content in the response"
);
// TODO: send context response error
return
;
}
Logger
::
ausf_server
().
info
(
"Wrong response code"
);
return
;
}
else
{
// httpCode = 200 || httpCode = 201 || httpCode = 204
/*
//store location of the created context
std::string header_response = *httpHeaderData.get();
std::string CRLF = "\r\n";
std::size_t location_pos = header_response.find("Location");
if (location_pos != std::string::npos)
{
std::size_t crlf_pos = header_response.find(CRLF, location_pos);
if (crlf_pos != std::string::npos)
{
std::string location = header_response.substr(location_pos + 10,
crlf_pos - (location_pos + 10)); printf("Location of the created SMF
context: %s", location.c_str());
}
}
try
{
response_data = nlohmann::json::parse(response);
}
catch (nlohmann::json::exception &e)
{
printf("Could not get Json content from the response");
//Set the default Cause
response_data["error"]["cause"] = "504 Gateway Timeout";
}*/
Response
=
*
httpData
.
get
();
}
if
(
!
is_response_ok
)
{
try
{
response_data
=
nlohmann
::
json
::
parse
(
json_data_response
);
}
catch
(
nlohmann
::
json
::
exception
&
e
)
{
Logger
::
ausf_server
().
info
(
"Could not get Json content from the response"
);
// Set the default Cause
response_data
[
"error"
][
"cause"
]
=
"504 Gateway Timeout"
;
}
Logger
::
ausf_server
().
info
(
"Get response with jsonData: %s"
,
json_data_response
.
c_str
());
std
::
string
cause
=
response_data
[
"error"
][
"cause"
];
Logger
::
ausf_server
().
info
(
"Call Network Function services failure"
);
Logger
::
ausf_server
().
info
(
"Cause value: %s"
,
cause
.
c_str
());
}
curl_slist_free_all
(
headers
);
curl_easy_cleanup
(
curl
);
}
curl_global_cleanup
();
if
(
body_data
)
{
free
(
body_data
);
body_data
=
NULL
;
}
fflush
(
stdout
);
}
src/ausf_app/ausf_client.hpp
View file @
4c8c76ec
...
...
@@ -34,6 +34,9 @@
#include <curl/curl.h>
#include "logger.hpp"
#include "ausf_config.hpp"
namespace
oai
{
namespace
ausf
{
namespace
app
{
...
...
@@ -45,6 +48,10 @@ class ausf_client {
virtual
~
ausf_client
();
ausf_client
(
ausf_client
const
&
)
=
delete
;
static
void
curl_http_client
(
std
::
string
remoteUri
,
std
::
string
Method
,
std
::
string
msgBody
,
std
::
string
&
Response
);
};
}
// namespace app
}
// namespace ausf
...
...
src/ausf_app/ausf_config.cpp
View file @
4c8c76ec
...
...
@@ -46,7 +46,6 @@ extern "C" {
}
using
namespace
libconfig
;
// using namespace amf_application;
namespace
config
{
...
...
src/ausf_app/curl.cpp
deleted
100644 → 0
View file @
f2918401
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (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.openairinterface.org/?page_id=698
*
* 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.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file curl.cpp
\brief
\author Fengjiao He, BUPT
\date 2021
\email: contact@openairinterface.org
*/
#include "curl.hpp"
using
namespace
config
;
extern
ausf_config
ausf_cfg
;
std
::
size_t
callback
(
const
char
*
in
,
std
::
size_t
size
,
std
::
size_t
num
,
std
::
string
*
out
)
{
const
std
::
size_t
totalBytes
(
size
*
num
);
out
->
append
(
in
,
totalBytes
);
return
totalBytes
;
}
void
Curl
::
curl_http_client
(
std
::
string
remoteUri
,
std
::
string
Method
,
std
::
string
msgBody
,
std
::
string
&
Response
)
{
Logger
::
ausf_server
().
info
(
"Send HTTP message with body %s"
,
msgBody
.
c_str
());
uint32_t
str_len
=
msgBody
.
length
();
char
*
body_data
=
(
char
*
)
malloc
(
str_len
+
1
);
memset
(
body_data
,
0
,
str_len
+
1
);
memcpy
((
void
*
)
body_data
,
(
void
*
)
msgBody
.
c_str
(),
str_len
);
curl_global_init
(
CURL_GLOBAL_ALL
);
CURL
*
curl
=
curl_easy_init
();
if
(
curl
)
{
CURLcode
res
=
{};
struct
curl_slist
*
headers
=
nullptr
;
if
(
!
Method
.
compare
(
"POST"
)
||
!
Method
.
compare
(
"PUT"
)
||
!
Method
.
compare
(
"PATCH"
))
{
std
::
string
content_type
=
"Content-Type: application/json"
;
headers
=
curl_slist_append
(
headers
,
content_type
.
c_str
());
curl_easy_setopt
(
curl
,
CURLOPT_HTTPHEADER
,
headers
);
}
curl_easy_setopt
(
curl
,
CURLOPT_URL
,
remoteUri
.
c_str
());
if
(
!
Method
.
compare
(
"POST"
))
curl_easy_setopt
(
curl
,
CURLOPT_HTTPPOST
,
1
);
else
if
(
!
Method
.
compare
(
"PUT"
))
curl_easy_setopt
(
curl
,
CURLOPT_CUSTOMREQUEST
,
"PUT"
);
else
if
(
!
Method
.
compare
(
"DELETE"
))
curl_easy_setopt
(
curl
,
CURLOPT_CUSTOMREQUEST
,
"DELETE"
);
else
if
(
!
Method
.
compare
(
"PATCH"
))
curl_easy_setopt
(
curl
,
CURLOPT_CUSTOMREQUEST
,
"PATCH"
);
else
curl_easy_setopt
(
curl
,
CURLOPT_HTTPGET
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_TIMEOUT_MS
,
CURL_TIMEOUT_MS
);
curl_easy_setopt
(
curl
,
CURLOPT_TCP_KEEPALIVE
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_INTERFACE
,
ausf_cfg
.
sbi
.
if_name
.
c_str
());
Logger
::
ausf_server
().
info
(
"[CURL] request sent by interface "
+
ausf_cfg
.
sbi
.
if_name
);
// Response information.
long
httpCode
=
{
0
};
std
::
unique_ptr
<
std
::
string
>
httpData
(
new
std
::
string
());
std
::
unique_ptr
<
std
::
string
>
httpHeaderData
(
new
std
::
string
());
// Hook up data handling function.
curl_easy_setopt
(
curl
,
CURLOPT_WRITEFUNCTION
,
&
callback
);
curl_easy_setopt
(
curl
,
CURLOPT_WRITEDATA
,
httpData
.
get
());
curl_easy_setopt
(
curl
,
CURLOPT_HEADERDATA
,
httpHeaderData
.
get
());
if
(
!
Method
.
compare
(
"POST"
)
||
!
Method
.
compare
(
"PUT"
)
||
!
Method
.
compare
(
"PATCH"
))
{
curl_easy_setopt
(
curl
,
CURLOPT_POSTFIELDSIZE
,
msgBody
.
length
());
curl_easy_setopt
(
curl
,
CURLOPT_POSTFIELDS
,
body_data
);
}
res
=
curl_easy_perform
(
curl
);
curl_easy_getinfo
(
curl
,
CURLINFO_RESPONSE_CODE
,
&
httpCode
);
// get the response
std
::
string
response
=
*
httpData
.
get
();
std
::
string
json_data_response
=
""
;
std
::
string
resMsg
=
""
;
bool
is_response_ok
=
true
;
Logger
::
ausf_server
().
info
(
"Get response with httpcode (%d)"
,
httpCode
);
if
(
httpCode
==
0
)
{
Logger
::
ausf_server
().
info
(
"Cannot get response when calling %s"
,
remoteUri
.
c_str
());
// free curl before returning
curl_slist_free_all
(
headers
);
curl_easy_cleanup
(
curl
);
return
;
}
nlohmann
::
json
response_data
=
{};
if
(
httpCode
!=
200
&&
httpCode
!=
201
&&
httpCode
!=
204
)
{
is_response_ok
=
false
;
if
(
response
.
size
()
<
1
)
{
Logger
::
ausf_server
().
info
(
"There's no content in the response"
);
// TODO: send context response error
return
;
}
Logger
::
ausf_server
().
info
(
"Wrong response code"
);
return
;
}
else
{
// httpCode = 200 || httpCode = 201 || httpCode = 204
/*
//store location of the created context
std::string header_response = *httpHeaderData.get();
std::string CRLF = "\r\n";
std::size_t location_pos = header_response.find("Location");
if (location_pos != std::string::npos)
{
std::size_t crlf_pos = header_response.find(CRLF, location_pos);
if (crlf_pos != std::string::npos)
{
std::string location = header_response.substr(location_pos + 10,
crlf_pos - (location_pos + 10)); printf("Location of the created SMF
context: %s", location.c_str());
}
}
try
{
response_data = nlohmann::json::parse(response);
}
catch (nlohmann::json::exception &e)
{
printf("Could not get Json content from the response");
//Set the default Cause
response_data["error"]["cause"] = "504 Gateway Timeout";
}*/
Response
=
*
httpData
.
get
();
}
if
(
!
is_response_ok
)
{
try
{
response_data
=
nlohmann
::
json
::
parse
(
json_data_response
);
}
catch
(
nlohmann
::
json
::
exception
&
e
)
{
Logger
::
ausf_server
().
info
(
"Could not get Json content from the response"
);
// Set the default Cause
response_data
[
"error"
][
"cause"
]
=
"504 Gateway Timeout"
;
}
Logger
::
ausf_server
().
info
(
"Get response with jsonData: %s"
,
json_data_response
.
c_str
());
std
::
string
cause
=
response_data
[
"error"
][
"cause"
];
Logger
::
ausf_server
().
info
(
"Call Network Function services failure"
);
Logger
::
ausf_server
().
info
(
"Cause value: %s"
,
cause
.
c_str
());
}
curl_slist_free_all
(
headers
);
curl_easy_cleanup
(
curl
);
}
curl_global_cleanup
();
if
(
body_data
)
{
free
(
body_data
);
body_data
=
NULL
;
}
fflush
(
stdout
);
}
src/ausf_app/curl.hpp
deleted
100644 → 0
View file @
f2918401
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (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.openairinterface.org/?page_id=698
*
* 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.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file curl.hpp
\brief
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _CURL_H_
#define _CURL_H_
// extern "C"{
#include <pthread.h>
#include <stdint.h>
#include <stdio.h>
#include <string>
#include <unistd.h>
//}
#include <curl/curl.h>
#include <nlohmann/json.hpp>
#include "bstrlib.h"
#include "logger.hpp"
#include "ausf_config.hpp"
#define CURL_TIMEOUT_MS 100L
class
Curl
{
public:
/****** curl function ********/
static
void
curl_http_client
(
std
::
string
remoteUri
,
std
::
string
Method
,
std
::
string
msgBody
,
std
::
string
&
Response
);
private:
};
#endif
src/common/ausf.h
View file @
4c8c76ec
...
...
@@ -70,6 +70,7 @@ static const std::vector<std::string> patch_op_type_e2str = {
"ADD"
,
"REMOVE"
,
"REPLACE"
,
"MOVE"
,
"COPY"
,
"TEST"
,
"UNKNOWN"
};
#define NF_CURL_TIMEOUT_MS 1000L
#define CURL_TIMEOUT_MS 100L
#define MAX_WAIT_MSECS 20000 // 1 second
...
...
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