xref: /btstack/src/classic/obex_message_builder.h (revision 81fb6ec90482af7668a0f5509573987b63e75f9f)
17c006017SMilanka Ringwald /*
27c006017SMilanka Ringwald  * Copyright (C) 2019 BlueKitchen GmbH
37c006017SMilanka Ringwald  *
47c006017SMilanka Ringwald  * Redistribution and use in source and binary forms, with or without
57c006017SMilanka Ringwald  * modification, are permitted provided that the following conditions
67c006017SMilanka Ringwald  * are met:
77c006017SMilanka Ringwald  *
87c006017SMilanka Ringwald  * 1. Redistributions of source code must retain the above copyright
97c006017SMilanka Ringwald  *    notice, this list of conditions and the following disclaimer.
107c006017SMilanka Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
117c006017SMilanka Ringwald  *    notice, this list of conditions and the following disclaimer in the
127c006017SMilanka Ringwald  *    documentation and/or other materials provided with the distribution.
137c006017SMilanka Ringwald  * 3. Neither the name of the copyright holders nor the names of
147c006017SMilanka Ringwald  *    contributors may be used to endorse or promote products derived
157c006017SMilanka Ringwald  *    from this software without specific prior written permission.
167c006017SMilanka Ringwald  * 4. Any redistribution, use, or modification is done solely for
177c006017SMilanka Ringwald  *    personal benefit and not for any commercial purpose or for
187c006017SMilanka Ringwald  *    monetary gain.
197c006017SMilanka Ringwald  *
207c006017SMilanka Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
217c006017SMilanka Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
227c006017SMilanka Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
237c006017SMilanka Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
247c006017SMilanka Ringwald  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
257c006017SMilanka Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
267c006017SMilanka Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
277c006017SMilanka Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
287c006017SMilanka Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
297c006017SMilanka Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
307c006017SMilanka Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
317c006017SMilanka Ringwald  * SUCH DAMAGE.
327c006017SMilanka Ringwald  *
337c006017SMilanka Ringwald  * Please inquire about commercial licensing options at
347c006017SMilanka Ringwald  * [email protected]
357c006017SMilanka Ringwald  *
367c006017SMilanka Ringwald  */
377c006017SMilanka Ringwald 
387c006017SMilanka Ringwald #ifndef __OBEX_MESSAGE_BUILDER_H
397c006017SMilanka Ringwald 
407c006017SMilanka Ringwald #if defined __cplusplus
417c006017SMilanka Ringwald extern "C" {
427c006017SMilanka Ringwald #endif
437c006017SMilanka Ringwald 
447c006017SMilanka Ringwald #include <stdint.h>
457c006017SMilanka Ringwald #include <stdio.h>
467c006017SMilanka Ringwald #include <stdlib.h>
477c006017SMilanka Ringwald #include <string.h>
487c006017SMilanka Ringwald 
497c006017SMilanka Ringwald #include "btstack_defines.h"
507c006017SMilanka Ringwald 
517c006017SMilanka Ringwald //------------------------------------------------------------------------------------------------------------
527c006017SMilanka Ringwald // obex_message_builder.h
537c006017SMilanka Ringwald //
54*81fb6ec9SMilanka Ringwald // Functions to incrementaly construct an OBEX message. The current length of the message is stored at
55*81fb6ec9SMilanka Ringwald // offset 1 in the buffer. All functions return status code ERROR_CODE_MEMORY_CAPACITY_EXCEEDED id the
56*81fb6ec9SMilanka Ringwald // buffer is too small.
577c006017SMilanka Ringwald 
587c006017SMilanka Ringwald /* API_START */
597c006017SMilanka Ringwald 
607c006017SMilanka Ringwald /**
617c006017SMilanka Ringwald  * @brief Start Connect request
627c006017SMilanka Ringwald  * @param buffer
637c006017SMilanka Ringwald  * @param buffer_len
647c006017SMilanka Ringwald  * @param obex_version_number
657c006017SMilanka Ringwald  * @param flags
667c006017SMilanka Ringwald  * @param maximum_obex_packet_length
67*81fb6ec9SMilanka Ringwald  * @return status
687c006017SMilanka Ringwald  */
697c006017SMilanka Ringwald uint8_t obex_message_builder_request_create_connect(uint8_t * buffer, uint16_t buffer_len, uint8_t obex_version_number, uint8_t flags, uint16_t maximum_obex_packet_length);
707c006017SMilanka Ringwald 
717c006017SMilanka Ringwald /**
727c006017SMilanka Ringwald  * @brief Start Disconnect request
737c006017SMilanka Ringwald  * @param buffer
747c006017SMilanka Ringwald  * @param buffer_len
757c006017SMilanka Ringwald  * @param connection_id
76*81fb6ec9SMilanka Ringwald  * @return status
777c006017SMilanka Ringwald  */
787c006017SMilanka Ringwald uint8_t obex_message_builder_request_create_disconnect(uint8_t * buffer, uint16_t buffer_len, uint32_t connection_id);
797c006017SMilanka Ringwald 
807c006017SMilanka Ringwald /**
817c006017SMilanka Ringwald  * @brief Create Get request
827c006017SMilanka Ringwald  * @param buffer
837c006017SMilanka Ringwald  * @param buffer_len
847c006017SMilanka Ringwald  * @param connection_id
85*81fb6ec9SMilanka Ringwald  * @return status
867c006017SMilanka Ringwald  */
877c006017SMilanka Ringwald uint8_t obex_message_builder_request_create_get(uint8_t * buffer, uint16_t buffer_len, uint32_t connection_id);
887c006017SMilanka Ringwald 
897c006017SMilanka Ringwald /**
907c006017SMilanka Ringwald  * @brief Create Put request
917c006017SMilanka Ringwald  * @param buffer
927c006017SMilanka Ringwald  * @param buffer_len
937c006017SMilanka Ringwald  * @param connection_id
94*81fb6ec9SMilanka Ringwald  * @return status
957c006017SMilanka Ringwald  */
967c006017SMilanka Ringwald uint8_t obex_message_builder_request_create_put(uint8_t * buffer, uint16_t buffer_len, uint32_t connection_id);
977c006017SMilanka Ringwald 
987c006017SMilanka Ringwald 
997c006017SMilanka Ringwald /**
1007c006017SMilanka Ringwald  * @brief Create Abort request
1017c006017SMilanka Ringwald  * @param buffer
1027c006017SMilanka Ringwald  * @param buffer_len
1037c006017SMilanka Ringwald  * @param connection_id
104*81fb6ec9SMilanka Ringwald  * @return status
1057c006017SMilanka Ringwald  */
1067c006017SMilanka Ringwald uint8_t obex_message_builder_request_create_abort(uint8_t * buffer, uint16_t buffer_len, uint32_t connection_id);
1077c006017SMilanka Ringwald 
1087c006017SMilanka Ringwald /**
1097c006017SMilanka Ringwald  * @brief Start Set Path request
1107c006017SMilanka Ringwald  * @param buffer
1117c006017SMilanka Ringwald  * @param buffer_len
1127c006017SMilanka Ringwald  * @param connection_id
113*81fb6ec9SMilanka Ringwald  * @return status
1147c006017SMilanka Ringwald  */
1157c006017SMilanka Ringwald uint8_t obex_message_builder_request_create_set_path(uint8_t * buffer, uint16_t buffer_len, uint8_t flags, uint32_t connection_id);
1167c006017SMilanka Ringwald 
1177c006017SMilanka Ringwald /**
1187c006017SMilanka Ringwald  * @brief Add SRM Enable
1197c006017SMilanka Ringwald  * @param buffer
1207c006017SMilanka Ringwald  * @param buffer_len
121*81fb6ec9SMilanka Ringwald  * @return status
1227c006017SMilanka Ringwald  */
1237c006017SMilanka Ringwald uint8_t obex_message_builder_header_add_srm_enable(uint8_t * buffer, uint16_t buffer_len);
1247c006017SMilanka Ringwald 
125*81fb6ec9SMilanka Ringwald /**
126*81fb6ec9SMilanka Ringwald  * @brief Add header with single byte value (8 bit)
127*81fb6ec9SMilanka Ringwald  * @param buffer
128*81fb6ec9SMilanka Ringwald  * @param buffer_len
129*81fb6ec9SMilanka Ringwald  * @param header_type
130*81fb6ec9SMilanka Ringwald  * @param value
131*81fb6ec9SMilanka Ringwald  * @return status
132*81fb6ec9SMilanka Ringwald  */
133*81fb6ec9SMilanka Ringwald uint8_t obex_message_builder_header_add_byte(uint8_t * buffer, uint16_t buffer_len, uint8_t header_type, uint8_t value);
1347c006017SMilanka Ringwald 
135*81fb6ec9SMilanka Ringwald /**
136*81fb6ec9SMilanka Ringwald  * @brief Add header with word value (32 bit)
137*81fb6ec9SMilanka Ringwald  * @param buffer
138*81fb6ec9SMilanka Ringwald  * @param buffer_len
139*81fb6ec9SMilanka Ringwald  * @param header_type
140*81fb6ec9SMilanka Ringwald  * @param value
141*81fb6ec9SMilanka Ringwald  * @return status
142*81fb6ec9SMilanka Ringwald  */
143*81fb6ec9SMilanka Ringwald uint8_t obex_message_builder_header_add_word(uint8_t * buffer, uint16_t buffer_len, uint8_t header_type, uint32_t value);
1447c006017SMilanka Ringwald 
145*81fb6ec9SMilanka Ringwald /**
146*81fb6ec9SMilanka Ringwald  * @brief Add header with variable size
147*81fb6ec9SMilanka Ringwald  * @param buffer
148*81fb6ec9SMilanka Ringwald  * @param buffer_len
149*81fb6ec9SMilanka Ringwald  * @param header_type
150*81fb6ec9SMilanka Ringwald  * @param header_data
151*81fb6ec9SMilanka Ringwald  * @param header_data_length
152*81fb6ec9SMilanka Ringwald  * @return status
153*81fb6ec9SMilanka Ringwald  */
154*81fb6ec9SMilanka Ringwald uint8_t obex_message_builder_header_add_variable(uint8_t * buffer, uint16_t buffer_len, uint8_t header_type, const uint8_t * header_data, uint16_t header_data_length);
1557c006017SMilanka Ringwald 
1567c006017SMilanka Ringwald /**
1577c006017SMilanka Ringwald  * @brief Add name header to current request
1587c006017SMilanka Ringwald  * @param buffer
1597c006017SMilanka Ringwald  * @param buffer_len
1607c006017SMilanka Ringwald  * @param name
161*81fb6ec9SMilanka Ringwald  * @return status
1627c006017SMilanka Ringwald  */
1637c006017SMilanka Ringwald uint8_t obex_message_builder_header_add_name(uint8_t * buffer, uint16_t buffer_len, const char * name);
1647c006017SMilanka Ringwald 
1657c006017SMilanka Ringwald /**
1667c006017SMilanka Ringwald  * @brief Add target header to current request
1677c006017SMilanka Ringwald  * @param buffer
1687c006017SMilanka Ringwald  * @param buffer_len
1697c006017SMilanka Ringwald  * @param target
1707c006017SMilanka Ringwald  * @param lenght of target
171*81fb6ec9SMilanka Ringwald  * @return status
1727c006017SMilanka Ringwald  */
1737c006017SMilanka Ringwald uint8_t obex_message_builder_header_add_target(uint8_t * buffer, uint16_t buffer_len, const uint8_t * target, uint16_t length);
1747c006017SMilanka Ringwald 
1757c006017SMilanka Ringwald /**
1767c006017SMilanka Ringwald  * @brief Add type header to current request
1777c006017SMilanka Ringwald  * @param buffer
1787c006017SMilanka Ringwald  * @param buffer_len
1797c006017SMilanka Ringwald  * @param type
180*81fb6ec9SMilanka Ringwald  * @return status
1817c006017SMilanka Ringwald  */
1827c006017SMilanka Ringwald uint8_t obex_message_builder_header_add_type(uint8_t * buffer, uint16_t buffer_len, const char * type);
1837c006017SMilanka Ringwald 
1847c006017SMilanka Ringwald /**
1857c006017SMilanka Ringwald  * @brief Add count header to current request
1867c006017SMilanka Ringwald  * @param buffer
1877c006017SMilanka Ringwald  * @param buffer_len
1887c006017SMilanka Ringwald  * @param count
189*81fb6ec9SMilanka Ringwald  * @return status
1907c006017SMilanka Ringwald  */
1917c006017SMilanka Ringwald uint8_t obex_message_builder_header_add_count(uint8_t * buffer, uint16_t buffer_len, uint32_t count);
1927c006017SMilanka Ringwald 
1937c006017SMilanka Ringwald /**
1947c006017SMilanka Ringwald  * @brief Add application parameters header to current request
1957c006017SMilanka Ringwald  * @param buffer
1967c006017SMilanka Ringwald  * @param buffer_len
1977c006017SMilanka Ringwald  * @param data
1987c006017SMilanka Ringwald  * @param lenght of application parameters
199*81fb6ec9SMilanka Ringwald  * @return status
2007c006017SMilanka Ringwald  */
2017c006017SMilanka Ringwald uint8_t obex_message_builder_header_add_application_parameters(uint8_t * buffer, uint16_t buffer_len, const uint8_t * data, uint16_t length);
2027c006017SMilanka Ringwald 
2037c006017SMilanka Ringwald /**
2047c006017SMilanka Ringwald  * @brief Add application parameters header to current request
2057c006017SMilanka Ringwald  * @param buffer
2067c006017SMilanka Ringwald  * @param buffer_len
2077c006017SMilanka Ringwald  * @param data
2087c006017SMilanka Ringwald  * @param lenght of challenge response
209*81fb6ec9SMilanka Ringwald  * @return status
2107c006017SMilanka Ringwald  */
2117c006017SMilanka Ringwald uint8_t obex_message_builder_header_add_challenge_response(uint8_t * buffer, uint16_t buffer_len, const uint8_t * data, uint16_t length);
2127c006017SMilanka Ringwald 
2137c006017SMilanka Ringwald /**
2147c006017SMilanka Ringwald  * @brief Add body
2157c006017SMilanka Ringwald  * @param buffer
2167c006017SMilanka Ringwald  * @param buffer_len
2177c006017SMilanka Ringwald  * @param data
2187c006017SMilanka Ringwald  * @param lenght
219*81fb6ec9SMilanka Ringwald  * @return status
2207c006017SMilanka Ringwald  */
2217c006017SMilanka Ringwald uint8_t obex_message_builder_static_add_body(uint8_t * buffer, uint16_t buffer_len, const uint8_t * data, uint32_t length);
2227c006017SMilanka Ringwald 
2237c006017SMilanka Ringwald /* API_END */
2247c006017SMilanka Ringwald 
225*81fb6ec9SMilanka Ringwald // int  obex_message_builder_add_body_dynamic(uint8_t * buffer, uint16_t buffer_len, uint32_t length, void (*data_callback)(uint32_t offset, uint8_t * buffer, uint32_t len));
226*81fb6ec9SMilanka Ringwald 
2277c006017SMilanka Ringwald #if defined __cplusplus
2287c006017SMilanka Ringwald }
2297c006017SMilanka Ringwald #endif
2307c006017SMilanka Ringwald #endif
2317c006017SMilanka Ringwald 
232