161 lines
6.6 KiB
C
161 lines
6.6 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 OBEX_TRANSMISSION_H_INCLUDED
|
|
#define OBEX_TRANSMISSION_H_INCLUDED
|
|
|
|
#include "bt_common.h"
|
|
#include "bt_co_list.h"
|
|
#include "obex_protocol.h"
|
|
|
|
/*------ What Is A Transmission ------*/
|
|
/* An user (application) fires a operation (CONNECT/DISCONNECT/PUT/GET/SETPATH/ABORT) to server to do something */
|
|
/* The operation is in fact a packet of data which is called Transmission here */
|
|
/* A Transmission is composed of fixed 'Field' plus some optional 'HEADER' */
|
|
/* For the fixed 'Field', here using obex_transmisson_prepare to reserve the buffer in Transmission */
|
|
/* For the optional 'Header', here using obex_transmisson_add_XXX to add it in Transmission */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct {
|
|
uint16 len;
|
|
uint8 *text;
|
|
uint8 valid;
|
|
} obex_transmission_header_Unicode_t;
|
|
|
|
typedef struct {
|
|
uint16 len;
|
|
uint8 *buff;
|
|
uint8 valid;
|
|
} obex_transmission_header_ByteSequence_t;
|
|
|
|
typedef struct {
|
|
uint8 value;
|
|
uint8 valid;
|
|
} obex_transmission_header_1ByteQuality;
|
|
|
|
typedef struct {
|
|
uint32 value;
|
|
uint8 valid;
|
|
} obex_transmission_header_4ByteQuality;
|
|
|
|
typedef struct {
|
|
obex_transmission_header_4ByteQuality Count;
|
|
obex_transmission_header_Unicode_t Name;
|
|
obex_transmission_header_ByteSequence_t Type;
|
|
obex_transmission_header_4ByteQuality Length;
|
|
obex_transmission_header_ByteSequence_t Time_ISO8601;
|
|
obex_transmission_header_4ByteQuality Time_4Bytes;
|
|
obex_transmission_header_Unicode_t Description;
|
|
obex_transmission_header_ByteSequence_t Target;
|
|
obex_transmission_header_ByteSequence_t HTTP;
|
|
obex_transmission_header_ByteSequence_t Body;
|
|
obex_transmission_header_ByteSequence_t EndOfBody;
|
|
obex_transmission_header_ByteSequence_t Who;
|
|
obex_transmission_header_4ByteQuality ConnectionID;
|
|
obex_transmission_header_ByteSequence_t AppParameters;
|
|
obex_transmission_header_ByteSequence_t AuthChallenge;
|
|
obex_transmission_header_ByteSequence_t AuthResponse;
|
|
obex_transmission_header_ByteSequence_t ObjectClass;
|
|
} obex_transmission_headers_t;
|
|
|
|
typedef struct {
|
|
uint8 *buff;
|
|
uint16 packet_len;
|
|
uint16 max_buff_len;
|
|
bool is_final;
|
|
uint8 flag;
|
|
} obex_transmission_t;
|
|
|
|
//------ Initialize a transmission in a give buffer ------//
|
|
int32 obex_transmission_init(obex_transmission_t *trasmission, uint8 *buff, uint32 len);
|
|
int32 obex_transmission_prepare(obex_transmission_t *trasmission, obex_operation_opcode_t operation_code);
|
|
|
|
int32 obex_transmission_parse_headers(uint8 *buff, uint32 len, obex_transmission_headers_t *headers);
|
|
|
|
bool obex_is_final_transmission(obex_transmission_t *transmission);
|
|
void obex_transmission_set_final(obex_transmission_t *transmission, bool final);
|
|
uint8 obex_transmission_get_flag(obex_transmission_t *transmission);
|
|
void obex_transmission_set_flag(obex_transmission_t *transmission, uint8 flag);
|
|
|
|
#define obex_transmission_add_Count(tr,Count) \
|
|
obex_transmission_add_4ByteQuantity(tr,obex_header_id_Count,Count)
|
|
|
|
#define obex_transmission_add_Name(tr,name,name_len_without_null) \
|
|
obex_transmission_add_Unicode(tr,obex_header_id_Name,name,name_len_without_null)
|
|
|
|
#define obex_transmission_add_Type(tr,type,type_len_with_null) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_Type,type,type_len_with_null)
|
|
|
|
#define obex_transmission_add_Length(tr,Length) \
|
|
obex_transmission_add_4ByteQuantity(tr,obex_header_id_Length,Length)
|
|
|
|
#define obex_transmission_add_Time_ISO8601t(tr,time,time_len) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_Time_ISO8601,time,time_len)
|
|
|
|
#define obex_transmission_add_Time_4Byte(tr,Time) \
|
|
obex_transmission_add_4ByteQuantity(tr,obex_header_id_Time_4byte,Time)
|
|
|
|
#define obex_transmission_add_Description(tr,desc,desc_len_without_null) \
|
|
obex_transmission_add_Unicode(tr,obex_header_id_Description,desc,desc_len_without_null)
|
|
|
|
#define obex_transmission_add_Target(tr,uuid,uuid_len) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_Target,uuid,uuid_len)
|
|
|
|
#define obex_transmission_add_HTTP(tr,http,http_len) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_HTTP,http,http_len)
|
|
|
|
#define obex_transmission_add_Body(tr,body,body_len) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_Body,body,body_len)
|
|
|
|
#define obex_transmission_add_EndOfBody(tr,body,body_len) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_EndofBody,body,body_len)
|
|
|
|
#define obex_transmission_add_Who(tr,who,who_len) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_Who,who,who_len)
|
|
|
|
#define obex_transmission_add_ConnectionID(tr,ConnectionID) \
|
|
obex_transmission_add_4ByteQuantity(tr,obex_header_id_ConnectionID,ConnectionID)
|
|
|
|
#define obex_transmission_add_ApplicationParameters(tr,tlv,tlv_len) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_ApplicationParameters,tlv,tlv_len)
|
|
|
|
#define obex_transmission_add_AuthenticateChallenge(tr,ac,ac_len) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_AuthenticateChallenge,ac,ac_len)
|
|
|
|
#define obex_transmission_add_AuthenticateResponse(tr,as,as_len) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_AuthenticateResponse,as,as_len)
|
|
|
|
#define obex_transmission_add_ObjectClass(tr,oc,oc_len) \
|
|
obex_transmission_add_ByteSequence(tr,obex_header_id_ObjectClass,oc,oc_len)
|
|
|
|
//------ null terminated Unicode text, length prefixed with 2 byte unsigned integer ------//
|
|
int32 obex_transmission_add_Unicode(obex_transmission_t *tr, obex_header_id_t id, uint8 *ascii, uint32 ascii_len_without_null);
|
|
//------ byte sequence, length prefixed with 2 byte unsigned integer ------//
|
|
int32 obex_transmission_add_ByteSequence(obex_transmission_t *tr, obex_header_id_t id, uint8 *bytes, uint32 bytes_len);
|
|
//------ 1 byte quantity ------//
|
|
int32 obex_transmission_add_1ByteQuantity(obex_transmission_t *tr, obex_header_id_t id, uint8 value);
|
|
//------ 4 byte quantity ------//
|
|
int32 obex_transmission_add_4ByteQuantity(obex_transmission_t *tr, obex_header_id_t id, uint32 value);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // OBEX_TRANSMISSION_H_INCLUDED
|