pinebuds/services/bt_profiles_enhanced/inc/obex_transmission.h
2022-08-15 17:20:27 +08:00

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