HomePort
request_api.c
Go to the documentation of this file.
1 /*
2  * Copyright 2011 Aalborg University. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without modification, are
5  * permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain the above copyright notice, this list of
8  * conditions and the following disclaimer.
9  *
10  * 2. Redistributions in binary form must reproduce the above copyright notice, this list
11  * of conditions and the following disclaimer in the documentation and/or other materials
12  * provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY Aalborg University ''AS IS'' AND ANY EXPRESS OR IMPLIED
15  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Aalborg University OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  *
24  * The views and conclusions contained in the software and documentation are those of the
25  * authors and should not be interpreted as representing official policies, either expressed
26  */
27 
28 #include "discovery.h"
29 #include "daemon.h"
30 #include "hpd/hpd_api.h"
31 #include "request.h"
32 #include "log.h"
33 #include "comm.h"
34 
36  hpd_response_f on_response)
37 {
38  if (!request || !id) LOG_RETURN_E_NULL();
39  if (method <= HPD_M_NONE || method >= HPD_M_COUNT)
40  LOG_RETURN(HPD_E_ARGUMENT, "Unknown method given to %s().", __func__);
41  return request_alloc_request(request, id, method, on_response);
42 }
43 
45 {
46  if (!request) LOG_RETURN_E_NULL();
47  return request_free_request(request);
48 }
49 
51 {
52  if (!request) LOG_RETURN_E_NULL();
53  return request_set_request_value(request, value);
54 }
55 
57 {
58  if (!request) LOG_RETURN_E_NULL();
59  return request_set_request_data(request, data, on_free);
60 }
61 
63 {
64  if (!request) LOG_RETURN_E_NULL();
66  return request_request(request);
67 }
68 
70 {
71  if (!req || !id) LOG_RETURN_E_NULL();
72  return request_get_request_service(req, id);
73 }
74 
76 {
77  if (!req || !method) LOG_RETURN_E_NULL();
78  return request_get_request_method(req, method);
79 }
80 
82 {
83  if (!req || !value) LOG_RETURN_E_NULL();
84  return request_get_request_value(req, value);
85 }
86 
88 {
89  if (!response || !request) LOG_RETURN_E_NULL();
90  switch (status) {
91  case HPD_S_100:break;
92  case HPD_S_101:break;
93  case HPD_S_200:break;
94  case HPD_S_201:break;
95  case HPD_S_202:break;
96  case HPD_S_203:break;
97  case HPD_S_204:break;
98  case HPD_S_205:break;
99  case HPD_S_206:break;
100  case HPD_S_300:break;
101  case HPD_S_301:break;
102  case HPD_S_302:break;
103  case HPD_S_303:break;
104  case HPD_S_304:break;
105  case HPD_S_305:break;
106  case HPD_S_306:break;
107  case HPD_S_307:break;
108  case HPD_S_400:break;
109  case HPD_S_401:break;
110  case HPD_S_402:break;
111  case HPD_S_403:break;
112  case HPD_S_404:break;
113  case HPD_S_405:break;
114  case HPD_S_406:break;
115  case HPD_S_407:break;
116  case HPD_S_408:break;
117  case HPD_S_409:break;
118  case HPD_S_410:break;
119  case HPD_S_411:break;
120  case HPD_S_412:break;
121  case HPD_S_413:break;
122  case HPD_S_414:break;
123  case HPD_S_415:break;
124  case HPD_S_416:break;
125  case HPD_S_417:break;
126  case HPD_S_500:break;
127  case HPD_S_501:break;
128  case HPD_S_502:break;
129  case HPD_S_503:break;
130  case HPD_S_504:break;
131  case HPD_S_505:break;
132  default:
133  LOG_RETURN(HPD_E_ARGUMENT, "Unknown status code given to %s().", __func__);
134  }
135  return request_alloc_response(response, request, status);
136 }
137 
139 {
140  if (!response) LOG_RETURN_E_NULL();
141  return request_free_response(response);
142 }
143 
145 {
146  if (!response) LOG_RETURN_E_NULL();
147  return request_set_response_value(response, value);
148 }
149 
151 {
152  if (!response) LOG_RETURN_E_NULL();
154  return request_respond(response);
155 }
156 
158 {
159  if (!response || !status) LOG_RETURN_E_NULL();
160  return request_get_response_status(response, status);
161 }
162 
164 {
165  if (!response || !value) LOG_RETURN_E_NULL();
166  return request_get_response_value(response, value);
167 }
168 
170 {
171  if (!response || !data) LOG_RETURN_E_NULL();
172  return request_get_response_request_data(response, data);
173 }
174 
176 {
177  if (!response || !service) LOG_RETURN_E_NULL();
178  return request_get_response_request_service(response, service);
179 }
180 
182 {
183  if (!response || !method) LOG_RETURN_E_NULL();
184  return request_get_response_request_method(response, method);
185 }
186 
188 {
189  if (!response || !value) LOG_RETURN_E_NULL();
190  return request_get_response_request_value(response, value);
191 }
192 
hpd_error_t request_get_response_request_method(const hpd_response_t *response, hpd_method_t *method)
Definition: request.c:171
enum hpd_status hpd_status_t
Definition: hpd_types.h:168
hpd_device_id_t device
Definition: discovery.h:49
void(* hpd_free_f)(void *data)
[hpd_action_f]
Definition: hpd_types.h:187
#define LOG_RETURN_E_NULL()
Definition: log.h:50
hpd_error_t hpd_response_get_request_method(const hpd_response_t *response, hpd_method_t *method)
Definition: request_api.c:181
hpd_ev_loop_t * loop
Definition: daemon.h:51
hpd_error_t request_get_response_status(const hpd_response_t *response, hpd_status_t *status)
Definition: request.c:147
hpd_error_t request_set_response_value(hpd_response_t *response, hpd_value_t *value)
Definition: request.c:132
hpd_error_t hpd_respond(hpd_response_t *response)
Definition: request_api.c:150
hpd_error_t hpd_request_get_value(const hpd_request_t *req, const hpd_value_t **value)
Definition: request_api.c:81
data value
#define LOG_RETURN_HPD_STOPPED()
Definition: log.h:53
hpd_error_t request_respond(hpd_response_t *response)
Definition: request.c:274
hpd_error_t request_request(hpd_request_t *request)
Definition: request.c:255
hpd_error_t hpd_response_set_value(hpd_response_t *response, hpd_value_t *value)
Definition: request_api.c:144
hpd_error_t request_get_response_request_value(const hpd_response_t *response, const hpd_value_t **value)
Definition: request.c:177
hpd_t * hpd
Definition: discovery.h:39
hpd_error_t hpd_request(hpd_request_t *request)
Definition: request_api.c:62
hpd_error_t hpd_response_free(hpd_response_t *response)
Definition: request_api.c:138
hpd_request_t * request
Definition: comm.h:65
void(* hpd_response_f)(void *data, const hpd_response_t *res)
[hpd_free_f]
Definition: hpd_types.h:192
hpd_error_t hpd_request_free(hpd_request_t *request)
Definition: request_api.c:44
hpd_error_t hpd_response_get_value(const hpd_response_t *response, const hpd_value_t **value)
Definition: request_api.c:163
hpd_error_t request_get_request_service(const hpd_request_t *req, const hpd_service_id_t **id)
Definition: request.c:91
hpd_error_t hpd_response_get_request_data(const hpd_response_t *response, void **data)
Definition: request_api.c:169
hpd_error_t hpd_request_alloc(hpd_request_t **request, const hpd_service_id_t *id, hpd_method_t method, hpd_response_f on_response)
[hpd_request_t functions]
Definition: request_api.c:35
hpd_error_t request_get_response_request_service(const hpd_response_t *response, const hpd_service_id_t **service)
Definition: request.c:165
Definition: comm.h:70
enum hpd_error hpd_error_t
Definition: hpd_types.h:167
hpd_error_t request_free_response(hpd_response_t *response)
Definition: request.c:122
hpd_error_t request_alloc_request(hpd_request_t **request, const hpd_service_id_t *id, hpd_method_t method, hpd_response_f on_response)
Definition: request.c:38
hpd_error_t hpd_response_get_status(const hpd_response_t *response, hpd_status_t *status)
[hpd_request_t functions]
Definition: request_api.c:157
hpd_error_t hpd_response_alloc(hpd_response_t **response, hpd_request_t *request, hpd_status_t status)
[hpd_request_t functions]
Definition: request_api.c:87
hpd_error_t request_get_response_value(const hpd_response_t *response, const hpd_value_t **value)
Definition: request.c:153
#define LOG_RETURN(E, FMT,...)
Definition: log.h:48
hpd_error_t hpd_response_get_request_service(const hpd_response_t *response, const hpd_service_id_t **service)
Definition: request_api.c:175
hpd_service_id_t * service
Definition: comm.h:55
hpd_error_t hpd_response_get_request_value(const hpd_response_t *response, const hpd_value_t **value)
Definition: request_api.c:187
hpd_error_t request_alloc_response(hpd_response_t **response, hpd_request_t *request, hpd_status_t status)
Definition: request.c:109
hpd_error_t request_get_response_request_data(const hpd_response_t *response, void **data)
Definition: request.c:159
hpd_error_t request_set_request_value(hpd_request_t *request, hpd_value_t *value)
Definition: request.c:69
hpd_error_t request_get_request_method(const hpd_request_t *req, hpd_method_t *method)
Definition: request.c:97
hpd_error_t request_free_request(hpd_request_t *request)
Definition: request.c:58
hpd_error_t hpd_request_set_data(hpd_request_t *request, void *data, hpd_free_f on_free)
Definition: request_api.c:56
hpd_error_t request_get_request_value(const hpd_request_t *req, const hpd_value_t **value)
Definition: request.c:103
hpd_adapter_id_t adapter
Definition: discovery.h:44
enum hpd_method hpd_method_t
[hpd_log_level_t]
Definition: hpd_types.h:166
hpd_error_t hpd_request_get_method(const hpd_request_t *req, hpd_method_t *method)
Definition: request_api.c:75
hpd_error_t request_set_request_data(hpd_request_t *request, void *data, hpd_free_f on_free)
Definition: request.c:84
hpd_error_t hpd_request_get_service(const hpd_request_t *req, const hpd_service_id_t **id)
[hpd_parameter_t functions]
Definition: request_api.c:69
hpd_error_t hpd_request_set_value(hpd_request_t *request, hpd_value_t *value)
Definition: request_api.c:50