Lines Matching refs:resource
1 /* coap_resource.c -- generic resource handling
13 * @brief Server resource handling functions
113 * @param context The context with the resource map.
208 if (flags & MATCH_URI) { /* match resource URI */
231 if (!subsequent_resource) { /* this is the first resource */
386 coap_add_attr(coap_resource_t *resource,
392 if (!resource || !name)
412 /* add attribute to resource list */
413 LL_PREPEND(resource->link_attr, attr);
422 coap_find_attr(coap_resource_t *resource,
426 if (!resource || !name)
429 LL_FOREACH(resource->link_attr, attr) {
466 coap_free_resource(coap_resource_t *resource) {
470 assert(resource);
472 if (!resource->context->observe_no_clear) {
473 coap_resource_notify_observers(resource, NULL);
474 coap_notify_observers(resource->context, resource, COAP_DELETING_RESOURCE);
477 if (resource->context->resource_deleted)
478 resource->context->resource_deleted(resource->context, resource->uri_path,
479 resource->context->observe_user_data);
481 if (resource->context->release_userdata && resource->user_data)
482 resource->context->release_userdata(resource->user_data);
485 LL_FOREACH_SAFE(resource->link_attr, attr, tmp) coap_delete_attr(attr);
488 coap_delete_str_const(resource->uri_path);
490 /* free all elements from resource->subscribers */
491 LL_FOREACH_SAFE(resource->subscribers, obs, otmp) {
492 if (resource->context->observe_deleted)
493 resource->context->observe_deleted(obs->session, obs,
494 resource->context->observe_user_data);
500 if (resource->proxy_name_count && resource->proxy_name_list) {
503 for (i = 0; i < resource->proxy_name_count; i++) {
504 coap_delete_str_const(resource->proxy_name_list[i]);
506 coap_free_type(COAP_STRING, resource->proxy_name_list);
509 coap_free_type(COAP_RESOURCE, resource);
513 coap_add_resource(coap_context_t *context, coap_resource_t *resource) {
514 if (resource->is_unknown) {
517 context->unknown_resource = resource;
518 } else if (resource->is_proxy_uri) {
521 context->proxy_uri_resource = resource;
524 resource->uri_path);
527 coap_log_warn("coap_add_resource: Duplicate uri_path '%*.*s', old resource deleted\n",
528 (int)resource->uri_path->length, (int)resource->uri_path->length,
529 resource->uri_path->s);
532 RESOURCES_ADD(context->resources, resource);
535 context->dyn_resource_added && resource->observable) {
542 context->dyn_resource_added(context->unknown_session, resource->uri_path,
547 assert(resource->context == NULL);
548 resource->context = context;
555 coap_delete_resource(coap_context_t *context, coap_resource_t *resource) {
556 if (!resource)
559 context = resource->context;
561 if (resource->is_unknown) {
562 if (context && context->unknown_resource == resource) {
565 } else if (resource->is_proxy_uri) {
566 if (context && context->proxy_uri_resource == resource) {
570 /* remove resource from list */
571 RESOURCES_DELETE(context->resources, resource);
575 coap_free_resource(resource);
615 coap_print_link(const coap_resource_t *resource,
629 resource->uri_path->s, resource->uri_path->length, *len);
633 LL_FOREACH(resource->link_attr, attr) {
648 if (resource->observable) {
654 if (resource->flags & COAP_RESOURCE_FLAGS_OSCORE_ONLY)
674 coap_register_handler(coap_resource_t *resource,
677 coap_register_request_handler(resource, method, handler);
681 coap_register_request_handler(coap_resource_t *resource,
684 assert(resource);
686 sizeof(resource->handler)/sizeof(coap_method_handler_t));
687 resource->handler[method-1] = handler;
691 coap_find_observer(coap_resource_t *resource, coap_session_t *session,
695 assert(resource);
698 LL_FOREACH(resource->subscribers, s) {
708 coap_find_observer_cache_key(coap_resource_t *resource, coap_session_t *session,
712 assert(resource);
715 LL_FOREACH(resource->subscribers, s) {
725 coap_add_observer(coap_resource_t *resource,
741 s = coap_find_observer(resource, session, token);
753 s = coap_find_observer_cache_key(resource, session, cache_key);
756 coap_delete_observer(resource, session, &s->pdu->actual_token);
770 LL_COUNT(resource->subscribers, s, subscriber_count);
812 /* add subscriber to resource */
813 LL_PREPEND(resource->subscribers, s);
908 if (resource->context->track_observe_value) {
910 resource->context->track_observe_value(resource->context,resource->uri_path,
911 resource->observe,
912 resource->context->observe_user_data);
932 coap_delete_observer(coap_resource_t *resource, coap_session_t *session,
936 s = coap_find_observer(resource, session, token);
956 if (resource->subscribers && s) {
957 LL_DELETE(resource->subscribers, s);
969 RESOURCES_ITER(context->resources, resource) {
971 LL_FOREACH_SAFE(resource->subscribers, s, tmp) {
975 LL_DELETE(resource->subscribers, s);
1004 * running this resource due to partiallydirty, but this observation's
1038 coap_log_debug("coap_check_notify: pdu init failed, resource stays "
1048 coap_log_debug("coap_check_notify: cannot add token, resource stays "
1100 coap_log_debug("call custom handler for resource '%*.*s' (4)\n",
1151 coap_log_debug("coap_check_notify: sending failed, resource stays "
1203 coap_resource_set_mode(coap_resource_t *resource, int mode) {
1204 resource->flags = (resource->flags &
1210 coap_resource_set_userdata(coap_resource_t *resource, void *data) {
1211 resource->user_data = data;
1215 coap_resource_get_userdata(coap_resource_t *resource) {
1216 return resource->user_data;
1226 coap_resource_set_get_observable(coap_resource_t *resource, int mode) {
1227 resource->observable = mode ? 1 : 0;
1231 coap_resource_get_uri_path(coap_resource_t *resource) {
1232 if (resource)
1233 return resource->uri_path;
1249 coap_persist_set_observe_num(coap_resource_t *resource,
1251 if (!resource)
1254 resource->observe = start_observe_no & 0xffffff;
1259 * the list of observers for the given resource when COAP_OBS_MAX_FAIL
1263 * @param resource The resource to check for (peer, token)
1269 coap_resource_t *resource,
1274 LL_FOREACH_SAFE(resource->subscribers, obs, otmp) {
1283 coap_delete_observer(resource, session, token);