xref: /btstack/src/classic/obex_srm_server.h (revision 50c752545e4437ff5ececf03019a5eaedabe1b28)
1e001955aSMatthias Ringwald /*
2e001955aSMatthias Ringwald  * Copyright (C) 2023 BlueKitchen GmbH
3e001955aSMatthias Ringwald  *
4e001955aSMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
5e001955aSMatthias Ringwald  * modification, are permitted provided that the following conditions
6e001955aSMatthias Ringwald  * are met:
7e001955aSMatthias Ringwald  *
8e001955aSMatthias Ringwald  * 1. Redistributions of source code must retain the above copyright
9e001955aSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
10e001955aSMatthias Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
11e001955aSMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
12e001955aSMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
13e001955aSMatthias Ringwald  * 3. Neither the name of the copyright holders nor the names of
14e001955aSMatthias Ringwald  *    contributors may be used to endorse or promote products derived
15e001955aSMatthias Ringwald  *    from this software without specific prior written permission.
16e001955aSMatthias Ringwald  * 4. Any redistribution, use, or modification is done solely for
17e001955aSMatthias Ringwald  *    personal benefit and not for any commercial purpose or for
18e001955aSMatthias Ringwald  *    monetary gain.
19e001955aSMatthias Ringwald  *
20e001955aSMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
21e001955aSMatthias Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22e001955aSMatthias Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23e001955aSMatthias Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BLUEKITCHEN
24e001955aSMatthias Ringwald  * GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25e001955aSMatthias Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26e001955aSMatthias Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27e001955aSMatthias Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28e001955aSMatthias Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29e001955aSMatthias Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
30e001955aSMatthias Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31e001955aSMatthias Ringwald  * SUCH DAMAGE.
32e001955aSMatthias Ringwald  *
33e001955aSMatthias Ringwald  * Please inquire about commercial licensing options at
34e001955aSMatthias Ringwald  * [email protected]
35e001955aSMatthias Ringwald  *
36e001955aSMatthias Ringwald  */
37e001955aSMatthias Ringwald 
38e001955aSMatthias Ringwald #ifndef OBEX_SRM_H
39e001955aSMatthias Ringwald #define OBEX_SRM_H
40e001955aSMatthias Ringwald 
41e001955aSMatthias Ringwald #include <stdint.h>
42e001955aSMatthias Ringwald 
43e001955aSMatthias Ringwald #if defined __cplusplus
44e001955aSMatthias Ringwald extern "C" {
45e001955aSMatthias Ringwald #endif
46e001955aSMatthias Ringwald 
47e001955aSMatthias Ringwald typedef enum {
48e001955aSMatthias Ringwald     OBEX_SRM_STATE_DISABLED,
49e001955aSMatthias Ringwald     OBEX_SRM_STATE_SEND_CONFIRM,
50e001955aSMatthias Ringwald     OBEX_SRM_STATE_SEND_CONFIRM_WAIT,
51e001955aSMatthias Ringwald     OBEX_SRM_STATE_ENABLED,
52e001955aSMatthias Ringwald     OBEX_SRM_STATE_ENABLED_WAIT,
530173416cSMatthias Ringwald } obex_srm_server_state_t;
54e001955aSMatthias Ringwald 
55e001955aSMatthias Ringwald typedef struct {
560173416cSMatthias Ringwald     obex_srm_server_state_t srm_state;
57e001955aSMatthias Ringwald 
58e001955aSMatthias Ringwald     uint8_t srm_value;
59e001955aSMatthias Ringwald     uint8_t srmp_value;
600173416cSMatthias Ringwald } obex_srm_server_t;
61e001955aSMatthias Ringwald 
62*50c75254SMatthias Ringwald /**
63*50c75254SMatthias Ringwald  * Init SRM to disabled state
64*50c75254SMatthias Ringwald  * SRM needs to be disabled for each new GET/PUT operation
65*50c75254SMatthias Ringwald  * @param obex_srm
66*50c75254SMatthias Ringwald  */
670173416cSMatthias Ringwald void obex_srm_server_init (obex_srm_server_t    *obex_srm);
68*50c75254SMatthias Ringwald 
69*50c75254SMatthias Ringwald /**
70*50c75254SMatthias Ringwald  * Reset SRM/SRMP fields
71*50c75254SMatthias Ringwald  * Needs to be called before parsing request
72*50c75254SMatthias Ringwald  * @param obex_srm
73*50c75254SMatthias Ringwald  */
74*50c75254SMatthias Ringwald void obex_srm_server_reset_fields (obex_srm_server_t *obex_srm);
75*50c75254SMatthias Ringwald 
76*50c75254SMatthias Ringwald /**
77*50c75254SMatthias Ringwald  * Store SRM or SRMP header field
78*50c75254SMatthias Ringwald  * @param obex_srm
79*50c75254SMatthias Ringwald  * @param header_id
80*50c75254SMatthias Ringwald  * @param total_len
81*50c75254SMatthias Ringwald  * @param data_offset
82*50c75254SMatthias Ringwald  * @param data_buffer
83*50c75254SMatthias Ringwald  * @param data_len
84*50c75254SMatthias Ringwald  */
850173416cSMatthias Ringwald void obex_srm_server_header_store (obex_srm_server_t    *obex_srm,
86e001955aSMatthias Ringwald                                      uint8_t        header_id,
87e001955aSMatthias Ringwald                                      uint16_t       total_len,
88e001955aSMatthias Ringwald                                      uint16_t       data_offset,
89e001955aSMatthias Ringwald                                      const uint8_t *data_buffer,
90e001955aSMatthias Ringwald                                      uint16_t       data_len);
91*50c75254SMatthias Ringwald 
92*50c75254SMatthias Ringwald /**
93*50c75254SMatthias Ringwald  * Update SRM state based on SRM headers
94*50c75254SMatthias Ringwald  * @param obex_srm
95*50c75254SMatthias Ringwald  */
9691a1f2a1SMatthias Ringwald void obex_srm_server_handle_headers (obex_srm_server_t *obex_srm);
97*50c75254SMatthias Ringwald 
98*50c75254SMatthias Ringwald /**
99*50c75254SMatthias Ringwald  * Add SRM headers to current response
100*50c75254SMatthias Ringwald  * @param obex_srm
101*50c75254SMatthias Ringwald  * @param goep_cid
102*50c75254SMatthias Ringwald  */
1030173416cSMatthias Ringwald void obex_srm_server_add_srm_headers (obex_srm_server_t   *obex_srm,
104e001955aSMatthias Ringwald                                       uint16_t             goep_cid);
105*50c75254SMatthias Ringwald /**
106*50c75254SMatthias Ringwald  * Check if SRM is active
107*50c75254SMatthias Ringwald  * @param obex_srm
108*50c75254SMatthias Ringwald  */
109*50c75254SMatthias Ringwald bool obex_srm_server_is_srm_active (obex_srm_server_t   *obex_srm);
110e001955aSMatthias Ringwald 
111e001955aSMatthias Ringwald #if defined __cplusplus
112e001955aSMatthias Ringwald }
113e001955aSMatthias Ringwald #endif
114e001955aSMatthias Ringwald 
115e001955aSMatthias Ringwald #endif
116