212 lines
5.7 KiB
C
212 lines
5.7 KiB
C
/***************************************************************************
|
|
*
|
|
* Copyright 2015-2019 BES.
|
|
* All rights reserved. All unpublished rights reserved.
|
|
*
|
|
* No part of this work may be used or reproduced in any form or by any
|
|
* means, or stored in a database or retrieval system, without prior written
|
|
* permission of BES.
|
|
*
|
|
* Use of this work is governed by a license granted by BES.
|
|
* This work contains confidential and proprietary information of
|
|
* BES. which is protected by copyright, trade secret,
|
|
* trademark and other intellectual property rights.
|
|
*
|
|
****************************************************************************/
|
|
#ifndef MAP_SESSION_H_INCLUDED
|
|
#define MAP_SESSION_H_INCLUDED
|
|
|
|
#include "obex_session.h"
|
|
#include "map_protocol.h"
|
|
#include "map_bmessage_builder.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define MAP_SESSION_FOLDER_LEVEL_MAX (32)
|
|
#define MAP_MAX_PACKET_LENGTH (512)
|
|
#define MAP_OBEX_VERSION (0x10)
|
|
|
|
typedef enum {
|
|
MAP_SESSION_TYPE_MAS = 0,
|
|
MAP_SESSION_TYPE_MNS, // 1
|
|
} map_session_type_t;
|
|
|
|
typedef struct {
|
|
map_session_type_t type;
|
|
obex_session_role_t obex_role;
|
|
} map_session_config_t;
|
|
|
|
typedef enum {
|
|
MAP_FUNC_NONE = 0,
|
|
MAP_FUNC_SendEvent,
|
|
MAP_FUNC_SetNotificationRegistration,
|
|
MAP_FUNC_SetFolder,
|
|
MAP_FUNC_GetFolderListing,
|
|
MAP_FUNC_GetMessagesListing,
|
|
MAP_FUNC_GetMessage,
|
|
MAP_FUNC_SetMessageStatus,
|
|
MAP_FUNC_PushMessage,
|
|
MAP_FUNC_UpdateInbox,
|
|
} map_session_function_t;
|
|
|
|
typedef struct {
|
|
union {
|
|
struct {
|
|
uint32 bmsg_offset;
|
|
} PushMessage;
|
|
struct {
|
|
uint8 level;
|
|
} SetFolder;
|
|
} state;
|
|
} map_session_function_state_t;
|
|
|
|
typedef enum {
|
|
MAP_SESSION_ERR_NO_ERROR = 0,
|
|
MAP_SESSION_ERR_SDP_REQUEST_FAIL, // 1
|
|
MAP_SESSION_ERR_CHANNEL_CLOSE, // 2
|
|
} map_session_error_t;
|
|
|
|
typedef struct {
|
|
union {
|
|
struct {
|
|
map_session_error_t error;
|
|
uint8 error_detail;
|
|
} close;
|
|
struct {
|
|
uint8 *packet;
|
|
uint32 packet_len;
|
|
} data;
|
|
struct {
|
|
struct bdaddr_t *remote;
|
|
} open;
|
|
} p;
|
|
} map_session_cb_param_t;
|
|
|
|
typedef enum {
|
|
MAP_SESSION_EVENT_OPEN_IND = 0,
|
|
MAP_SESSION_EVENT_OPEN, // 1
|
|
MAP_SESSION_EVENT_CLOSE, // 2
|
|
} map_session_event_t;
|
|
|
|
typedef enum {
|
|
MAP_SESSION_STATE_CLOSE = 0,
|
|
MAP_SESSION_STATE_SDP_REQUESTING, // 1
|
|
MAP_SESSION_STATE_OPENING, // 2
|
|
MAP_SESSION_STATE_CONNECTING, // 3
|
|
MAP_SESSION_STATE_OPEN, // 4
|
|
MAP_SESSION_STATE_CONNECTED, // 5
|
|
} map_session_state_t;
|
|
|
|
struct _map_session_t;
|
|
|
|
typedef int32 (*map_session_event_handler_t)(struct _map_session_t *, map_session_event_t event, map_session_cb_param_t *param);
|
|
|
|
typedef struct {
|
|
union {
|
|
struct
|
|
{
|
|
} SendEvent;
|
|
struct
|
|
{
|
|
} SetNotificationRegistration;
|
|
struct
|
|
{
|
|
char *folder[MAP_SESSION_FOLDER_LEVEL_MAX];
|
|
uint8 folder_level;
|
|
uint8 up_level;
|
|
} SetFolder;
|
|
struct
|
|
{
|
|
} GetFolderListing;
|
|
struct
|
|
{
|
|
} GetMessagesListing;
|
|
struct
|
|
{
|
|
} GetMessage;
|
|
struct
|
|
{
|
|
} SetMessageStatus;
|
|
struct
|
|
{
|
|
char *folder;
|
|
uint32 folder_len;
|
|
char *msg_body;
|
|
uint32 msg_body_len;
|
|
uint8 retry;
|
|
uint8 transparent;
|
|
map_bmessage_type_t type;
|
|
char *originator_name;
|
|
uint32 originator_name_len;
|
|
char *originator_tel;
|
|
uint32 originator_tel_len;
|
|
char *receipt_name;
|
|
uint32 receipt_name_len;
|
|
char *receipt_tel;
|
|
uint32 receipt_tel_len;
|
|
} PushMessage;
|
|
struct
|
|
{
|
|
} UpdateInbox;
|
|
} p;
|
|
} map_session_function_param_t;
|
|
|
|
typedef enum {
|
|
MAP_FUNC_ACTION_NONE = 0,
|
|
MAP_FUNC_ACTION_START,
|
|
MAP_FUNC_ACTION_STOP,
|
|
MAP_FUNC_ACTION_REQUEST,
|
|
MAP_FUNC_ACTION_RESPONSE,
|
|
MAP_FUNC_ACTION_CONNECTED,
|
|
} map_session_function_action_t;
|
|
|
|
typedef struct {
|
|
void *priv;
|
|
union {
|
|
struct {
|
|
uint8 *packet;
|
|
uint32 packet_len;
|
|
} request;
|
|
struct {
|
|
uint8 *packet;
|
|
uint32 packet_len;
|
|
} response;
|
|
} p;
|
|
} map_session_function_action_param_t;
|
|
|
|
typedef struct _map_session_t {
|
|
map_session_config_t config;
|
|
map_session_state_t state;
|
|
obex_session_t obex_session;
|
|
obex_transmission_t obex_transm;
|
|
struct sdp_request sdp_request;
|
|
map_sdp_callback_t sdp_callback;
|
|
map_sdp_server_property_t remote_server_property;
|
|
struct bdaddr_t remote;
|
|
map_session_event_handler_t event_handler;
|
|
uint8 transm_buffer[MAP_MAX_PACKET_LENGTH];
|
|
uint8 tlv_buffer[MAP_MAX_PACKET_LENGTH];
|
|
uint8 bmsg_buffer[MAP_MAX_PACKET_LENGTH];
|
|
map_bmsg_t bmsg;
|
|
map_session_function_t function;
|
|
map_session_function_param_t function_param;
|
|
map_session_function_state_t function_state;
|
|
} map_session_t;
|
|
|
|
typedef void (*map_callback_t) (obex_session_cb_param_t * param, map_session_t * map_session);
|
|
|
|
void map_callback_register(map_callback_t callback);
|
|
int32 map_session_init(map_session_t *session, map_session_config_t *cfg, map_session_event_handler_t event_handler);
|
|
int32 map_session_open(map_session_t *session, struct bdaddr_t *remote);
|
|
int32 map_session_close(map_session_t *session);
|
|
int32 map_session_exec_function(map_session_t *session, map_session_function_t func, map_session_function_param_t *param);
|
|
int32 map_session_restore(map_session_t *session, uint32 conn_id,uint32 server_chnl);
|
|
bool map_session_check_is_idle(map_session_t *map_session);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // MAP_SESSION_H_INCLUDED
|