6 #include "contiki-lib.h"
9 #include "coap-common.h"
10 #include "coap-server.h"
11 #define REQUEST coap_packet_t
12 #define RESPONSE coap_packet_t
13 #define SERVER_PROCESS (&coap_server)
16 #include "http-common.h"
17 #include "http-server.h"
18 #define REQUEST http_request_t
19 #define RESPONSE http_response_t
20 #define SERVER_PROCESS (&http_server)
27 METHOD_GET = (1 << 0),
28 METHOD_POST = (1 << 1),
29 METHOD_PUT = (1 << 2),
30 METHOD_DELETE = (1 << 3)
34 typedef void (*restful_handler) (REQUEST* request, RESPONSE* response);
35 typedef int (*restful_pre_handler) (REQUEST* request, RESPONSE* response);
36 typedef void (*restful_post_handler) (REQUEST* request, RESPONSE* response);
38 typedef int (*restful_periodic_handler) (
struct resource_t* resource);
39 typedef void (*restful_periodic_request_generator) (REQUEST* request);
45 struct resource_t *next;
46 method_t methods_to_handle;
48 restful_handler handler;
49 restful_pre_handler pre_handler;
50 restful_post_handler post_handler;
53 typedef struct resource_t resource_t;
55 struct periodic_resource_t {
56 struct periodic_resource_t *next;
59 struct etimer* handler_cb_timer;
60 struct stimer* lifetime_timer;
61 restful_periodic_handler periodic_handler;
62 restful_periodic_request_generator periodic_request_generator;
67 typedef struct periodic_resource_t periodic_resource_t;
73 #define RESOURCE(name, methods_to_handle, url) \
74 void name##_handler(REQUEST*, RESPONSE*); \
75 resource_t resource_##name = {NULL, methods_to_handle, url, name##_handler, NULL, NULL, NULL}
80 #define PERIODIC_RESOURCE(name, methods_to_handle, url, period) \
81 RESOURCE(name, methods_to_handle, url); \
82 int name##_periodic_handler(resource_t*); \
83 void name##_periodic_request_generator(REQUEST*); \
84 struct etimer handler_cb_timer_##name; \
85 struct stimer lifetime_timer_##name; \
86 periodic_resource_t periodic_resource_##name = {NULL, &resource_##name, period, &handler_cb_timer_##name, &lifetime_timer_##name, name##_periodic_handler, name##_periodic_request_generator, 0}
99 void rest_activate_periodic_resource(periodic_resource_t* periodic_resource);
105 int rest_invoke_restful_service(REQUEST* request, RESPONSE* response);
117 int rest_get_query_variable(REQUEST* request,
const char *name,
char* output, uint16_t output_size);
124 int rest_get_post_variable(REQUEST* request,
const char *name,
char* output, uint16_t output_size);
126 method_t rest_get_method_type(REQUEST* request);
127 void rest_set_method_type(REQUEST* request, method_t method);
132 content_type_t rest_get_header_content_type(REQUEST* request);
137 int rest_set_header_content_type(RESPONSE* response, content_type_t content_type);
142 int rest_set_header_etag(RESPONSE* response, uint8_t* etag, uint8_t size);
147 void rest_set_response_status(RESPONSE* response, status_code_t status);
152 void rest_set_request_payload(RESPONSE* response, uint8_t* payload, uint16_t size);
153 void rest_set_response_payload(RESPONSE* response, uint8_t* payload, uint16_t size);
158 void* rest_get_user_data(resource_t* resource);
163 void rest_set_user_data(resource_t* resource,
void* user_data);
170 void rest_set_pre_handler(resource_t* resource, restful_pre_handler pre_handler);
177 void rest_set_post_handler(resource_t* resource, restful_post_handler post_handler);
list_t rest_get_resources(void)
Returns the list of registered RESTful resources.
void ** list_t
The linked list type.
void rest_activate_resource(resource_t *resource, char *path)
Makes a resource available under the given URI path.
Representation of a uIP UDP connection.