Commit 895e1d5b authored by Frédéric Leroy's avatar Frédéric Leroy

UE/API/USER: rename _user_data to user_at_commands_t and move it to nas_user_t

parent a399448c
......@@ -110,23 +110,16 @@ static struct {
* The buffer used to receive data from the user application layer
*/
#define USER_API_RECV_BUFFER_SIZE 4096
// FIXME not reentrant
static char _user_api_recv_buffer[USER_API_RECV_BUFFER_SIZE];
/*
* The buffer used to send data to the user application layer
*/
#define USER_API_SEND_BUFFER_SIZE USER_API_RECV_BUFFER_SIZE
// FIXME not reentrant
static char _user_api_send_buffer[USER_API_SEND_BUFFER_SIZE];
/*
* The decoded data received from the user application layer
*/
static struct {
int n_cmd; /* number of user data to be processed */
#define USER_DATA_MAX 10
at_command_t cmd[USER_DATA_MAX]; /* user data to be processed */
} _user_data = {};
/****************************************************************************/
/****************** E X P O R T E D F U N C T I O N S ******************/
/****************************************************************************/
......@@ -261,12 +254,12 @@ int user_api_get_fd(void)
** Others: None **
** **
***************************************************************************/
const void* user_api_get_data(int index)
const void* user_api_get_data(user_at_commands_t *commands, int index)
{
LOG_FUNC_IN;
if (index < _user_data.n_cmd) {
LOG_FUNC_RETURN ((void*)(&_user_data.cmd[index]));
if (index < commands->n_cmd) {
LOG_FUNC_RETURN ((void*)(&commands->cmd[index]));
}
LOG_FUNC_RETURN (NULL);
......@@ -458,22 +451,22 @@ void user_api_close(int fd)
** Others: _user_api_send_buffer, _user_data **
** **
***************************************************************************/
int user_api_decode_data(int length)
int user_api_decode_data(user_at_commands_t *commands, int length)
{
LOG_FUNC_IN;
/* Parse the AT command line */
LOG_TRACE(INFO, "USR-API - Decode user data: %s", _user_api_recv_buffer);
_user_data.n_cmd = at_command_decode(_user_api_recv_buffer, length,
_user_data.cmd);
commands->n_cmd = at_command_decode(_user_api_recv_buffer, length,
commands->cmd);
if (_user_data.n_cmd > 0) {
if (commands->n_cmd > 0) {
/* AT command data received from the user application layer
* has been successfully decoded */
LOG_TRACE(INFO, "USR-API - %d AT command%s ha%s been successfully "
"decoded", _user_data.n_cmd,
(_user_data.n_cmd > 1) ? "s" : "",
(_user_data.n_cmd > 1) ? "ve" : "s");
"decoded", commands->n_cmd,
(commands->n_cmd > 1) ? "s" : "",
(commands->n_cmd > 1) ? "ve" : "s");
} else {
int bytes;
......@@ -490,7 +483,7 @@ int user_api_decode_data(int length)
(void) _user_api_send_data(bytes);
}
LOG_FUNC_RETURN (_user_data.n_cmd);
LOG_FUNC_RETURN (commands->n_cmd);
}
/****************************************************************************
......
......@@ -42,6 +42,7 @@ Description Implements the API used by the NAS layer running in the UE
#include "commonDef.h"
#include "networkDef.h"
#include "at_command.h"
/****************************************************************************/
/********************* G L O B A L C O N S T A N T S *******************/
......@@ -51,6 +52,16 @@ Description Implements the API used by the NAS layer running in the UE
/************************ G L O B A L T Y P E S ************************/
/****************************************************************************/
/*
* The decoded data received from the user application layer
*/
typedef struct {
int n_cmd; /* number of user data to be processed */
#define USER_DATA_MAX 10
at_command_t cmd[USER_DATA_MAX]; /* user data to be processed */
} user_at_commands_t;
/****************************************************************************/
/******************** G L O B A L V A R I A B L E S ********************/
/****************************************************************************/
......@@ -65,14 +76,14 @@ int user_api_emm_callback(Stat_t stat, tac_t tac, ci_t ci, AcT_t AcT, const char
int user_api_esm_callback(int cid, network_pdn_state_t state);
int user_api_get_fd(void);
const void* user_api_get_data(int index);
const void* user_api_get_data(user_at_commands_t *commands, int index);
int user_api_read_data(int fd);
int user_api_set_data(char *message);
int user_api_send_data(int fd, int length);
void user_api_close(int fd);
int user_api_decode_data(int length);
int user_api_decode_data(user_at_commands_t *commands, int length);
int user_api_encode_data(const void* data, int add_success_code);
#endif /* __USER_API_H__ */
......@@ -74,6 +74,7 @@ static void _nas_clean(int usr_fd, int net_fd);
uint8_t usim_test = 0;
// FIXME user must be set up with right itti message instance
// FIXME allocate user and initialize its fields
nas_user_t *user = NULL;
/****************************************************************************/
......
......@@ -88,6 +88,12 @@ void *nas_ue_task(void *args_p)
itti_subscribe_event_fd (TASK_NAS_UE, user->fd);
}
user->user_at_commands = calloc(1, sizeof(user_at_commands_t));
if ( user->user_at_commands == NULL ) {
LOG_E(NAS, "[UE %d] Can't allocate memory for user_at_commands\n", 0);
// FIXME stop here
}
user->at_response = calloc(1, sizeof(at_response_t));
if ( user->at_response == NULL ) {
LOG_E(NAS, "[UE %d] Can't allocate memory for user_at_commands\n", 0);
......
......@@ -239,11 +239,11 @@ int nas_user_receive_and_process(nas_user_t *user, char *message)
}
/* Decode the user data message */
nb_command = user_api_decode_data (bytes);
nb_command = user_api_decode_data (user->user_at_commands, bytes);
for (i = 0; i < nb_command; i++) {
/* Get the user data to be processed */
const void *data = user_api_get_data (i);
const void *data = user_api_get_data (user->user_at_commands, i);
if (data == NULL) {
/* Failed to get user data at the given index;
......
......@@ -53,6 +53,7 @@ Description NAS type definition to manage a user equipment
#include "EMM/Authentication.h"
#include "EMM/IdleMode_defs.h"
#include "API/USIM/usim_api.h"
#include "API/USER/user_api.h"
#include "SecurityModeControl.h"
#include "userDef.h"
#include "at_response.h"
......@@ -77,6 +78,8 @@ typedef struct {
//
nas_user_context_t *nas_user_context;
at_response_t *at_response; // data structure returned to the user as the result of NAS procedure function call
//
user_at_commands_t *user_at_commands; //decoded data received from the user application layer
} nas_user_t;
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment