From e53472f0a5f15d2459bf9a9ef40d2b302bb80f8b Mon Sep 17 00:00:00 2001 From: Ludwig Knüpfer Date: Tue, 15 Jul 2014 16:57:07 +0200 Subject: [PATCH 3/9] Remove two example programs in root --- coap-observer.c | 185 ----------------------------------------------- coap-server.c | 220 -------------------------------------------------------- 2 files changed, 405 deletions(-) delete mode 100644 coap-observer.c delete mode 100644 coap-server.c diff --git a/coap-observer.c b/coap-observer.c deleted file mode 100644 index e4b2fe5..0000000 --- a/coap-observer.c +++ /dev/null @@ -1,185 +0,0 @@ -/* coap-server.c -- Example CoAP server using Contiki and libcoap - * - * Copyright (C) 2011 Olaf Bergmann - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the Contiki operating system. - * - */ - -#include "config.h" -#include "net/uip-debug.h" - -#include - -#include "debug.h" -#include "coap.h" - -static coap_context_t *coap_context; - -/* Where the resource to subscribe is hosted */ -static coap_address_t dst; - -/* The resource to observe */ -static char resource[] = "/s/light"; - -/* when did the last notify arrive? (0 == never) */ -static coap_tick_t last_seen = 0; - -PROCESS(coap_server_process, "CoAP server process"); -AUTOSTART_PROCESSES(&coap_server_process); -/*---------------------------------------------------------------------------*/ -void -init_coap() { - coap_address_t listen_addr; - - coap_address_init(&listen_addr); - listen_addr.port = UIP_HTONS(COAP_DEFAULT_PORT); - -#ifdef WITH_CONTIKI - /* initialize uIP address for SLAAC */ - uip_ip6addr(&listen_addr.addr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); - uip_ds6_set_addr_iid(&listen_addr.addr, &uip_lladdr); - uip_ds6_addr_add(&listen_addr.addr, 0, ADDR_AUTOCONF); - - uip_debug_lladdr_print(&uip_lladdr); - printf("\r\n"); - uip_debug_ipaddr_print(&listen_addr.addr); - printf("\r\n"); -#endif /* WITH_CONTIKI */ - -#ifdef WITH_CONTIKI - printf("tentative address: [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n", - listen_addr.addr.u8[0], listen_addr.addr.u8[1], - listen_addr.addr.u8[2], listen_addr.addr.u8[3], - listen_addr.addr.u8[4], listen_addr.addr.u8[5], - listen_addr.addr.u8[6], listen_addr.addr.u8[7], - listen_addr.addr.u8[8], listen_addr.addr.u8[9], - listen_addr.addr.u8[10], listen_addr.addr.u8[11], - listen_addr.addr.u8[12], listen_addr.addr.u8[13], - listen_addr.addr.u8[14], listen_addr.addr.u8[15] , - uip_ntohs(listen_addr.port)); -#endif - - coap_context = coap_new_context(&listen_addr); - - coap_set_log_level(LOG_DEBUG); - - if (!coap_context) - coap_log(LOG_CRIT, "cannot create CoAP context\r\n"); -} - -void -message_handler(struct coap_context_t *ctx, - const coap_address_t *remote, - coap_pdu_t *sent, - coap_pdu_t *received, - const coap_tid_t id) { - /* send ACK if received message is confirmable (i.e. a separate response) */ - coap_send_ack(ctx, remote, received); - - debug("** process incoming %d.%02d response:\n", - (received->hdr->code >> 5), received->hdr->code & 0x1F); - coap_show_pdu(received); - - coap_ticks(&last_seen); -} - -/*---------------------------------------------------------------------------*/ -PROCESS_THREAD(coap_server_process, ev, data) -{ - coap_pdu_t *request; - coap_uri_t uri; - PROCESS_BEGIN(); - - init_coap(); - - if (!coap_context) { - coap_log(LOG_EMERG, "cannot create context\n"); - PROCESS_EXIT(); - } - - coap_register_response_handler(coap_context, message_handler); - - /* setup subscription request */ - - coap_address_init(&dst); - dst.port = uip_htons(COAP_DEFAULT_PORT); - uip_ip6addr(&dst.addr, 0xaaaa, 0, 0, 0, 0x206, 0x98ff, 0xfe00, 0x232); - /* uip_ip6addr(&dst.addr, 0xfe80, 0, 0, 0, 0x206, 0x98ff, 0xfe00, 0x232); */ - - request = coap_pdu_init(COAP_MESSAGE_CON, COAP_REQUEST_GET, - coap_new_message_id(coap_context), - COAP_MAX_PDU_SIZE); - - coap_split_uri((unsigned char *)resource, strlen(resource), &uri); - - if (uri.port != COAP_DEFAULT_PORT) { - unsigned char portbuf[2]; - coap_add_option(request, COAP_OPTION_URI_PORT, - coap_encode_var_bytes(portbuf, uri.port), portbuf); - } - - if (uri.path.length) { -#define BUFSIZE 20 - unsigned char _buf[BUFSIZE]; - unsigned char *buf = _buf; - size_t buflen; - int res; - - buflen = BUFSIZE; -#undef BUFSIZE - res = coap_split_path(uri.path.s, uri.path.length, buf, &buflen); - - while (res--) { - coap_add_option(request, COAP_OPTION_URI_PATH, - COAP_OPT_LENGTH(buf), COAP_OPT_VALUE(buf)); - - buf += COAP_OPT_SIZE(buf); - } - } - - coap_add_option(request, COAP_OPTION_SUBSCRIPTION, 0, NULL); - { - unsigned char buf[2]; - prng(buf, 2); - coap_add_option(request, COAP_OPTION_TOKEN, 2, buf); - } - - if (COAP_INVALID_TID == coap_send_confirmed(coap_context, &dst, request)) - coap_delete_pdu(request); - - while(1) { - PROCESS_YIELD(); - if(ev == tcpip_event) { - coap_read(coap_context); /* read received data */ - coap_dispatch(coap_context); /* and dispatch PDUs from receivequeue */ - } - } - - PROCESS_END(); -} -/*---------------------------------------------------------------------------*/ diff --git a/coap-server.c b/coap-server.c deleted file mode 100644 index 5dcdfcd..0000000 --- a/coap-server.c +++ /dev/null @@ -1,220 +0,0 @@ -/* coap-server.c -- Example CoAP server using Contiki and libcoap - * - * Copyright (C) 2011 Olaf Bergmann - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the Contiki operating system. - * - */ - -#include "config.h" -#include "net/uip-debug.h" - -#include - -#include "debug.h" -#include "coap.h" - -static coap_context_t *coap_context; - -/* changeable clock base (see handle_put_time()) */ -static clock_time_t my_clock_base = 0; -static coap_resource_t *time_resource = NULL; /* just for testing */ - -PROCESS(coap_server_process, "CoAP server process"); -AUTOSTART_PROCESSES(&coap_server_process); -/*---------------------------------------------------------------------------*/ -void -init_coap() { - coap_address_t listen_addr; - - coap_address_init(&listen_addr); - listen_addr.port = UIP_HTONS(COAP_DEFAULT_PORT); - -#ifdef WITH_CONTIKI - /* initialize uIP address for SLAAC */ - uip_ip6addr(&listen_addr.addr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); - uip_ds6_set_addr_iid(&listen_addr.addr, &uip_lladdr); - uip_ds6_addr_add(&listen_addr.addr, 0, ADDR_AUTOCONF); - - uip_debug_lladdr_print(&uip_lladdr); - printf("\r\n"); - uip_debug_ipaddr_print(&listen_addr.addr); - printf("\r\n"); -#endif /* WITH_CONTIKI */ - -#ifdef WITH_CONTIKI - printf("tentative address: [%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%d\r\n", - listen_addr.addr.u8[0], listen_addr.addr.u8[1], - listen_addr.addr.u8[2], listen_addr.addr.u8[3], - listen_addr.addr.u8[4], listen_addr.addr.u8[5], - listen_addr.addr.u8[6], listen_addr.addr.u8[7], - listen_addr.addr.u8[8], listen_addr.addr.u8[9], - listen_addr.addr.u8[10], listen_addr.addr.u8[11], - listen_addr.addr.u8[12], listen_addr.addr.u8[13], - listen_addr.addr.u8[14], listen_addr.addr.u8[15] , - uip_ntohs(listen_addr.port)); -#endif - - coap_context = coap_new_context(&listen_addr); - - coap_set_log_level(LOG_DEBUG); - - if (!coap_context) - coap_log(LOG_CRIT, "cannot create CoAP context\r\n"); -} - -/*---------------------------------------------------------------------------*/ -#ifndef min -# define min(a,b) ((a) < (b) ? (a) : (b)) -#endif - -void -hnd_get_time(coap_context_t *ctx, struct coap_resource_t *resource, - coap_address_t *peer, coap_pdu_t *request, str *token, - coap_pdu_t *response) { - coap_opt_iterator_t opt_iter; - unsigned char buf[2]; - coap_tick_t now; - coap_tick_t t; - - /* if my_clock_base was deleted, we pretend to have no such resource */ - response->hdr->code = COAP_RESPONSE_CODE(205), - - coap_add_option(response, COAP_OPTION_CONTENT_TYPE, - coap_encode_var_bytes(buf, COAP_MEDIATYPE_TEXT_PLAIN), buf); - - coap_add_option(response, COAP_OPTION_MAXAGE, - coap_encode_var_bytes(buf, 0x01), buf); - - /* Check if subscription was requested. */ - if (request && - coap_check_option(request, COAP_OPTION_SUBSCRIPTION, &opt_iter) && - coap_add_observer(resource, peer, token)) { - - /* add a new observe value */ - coap_add_option(response, COAP_OPTION_SUBSCRIPTION, - coap_encode_var_bytes(buf, ctx->observe), buf); - - if (token->length) - coap_add_option(response, COAP_OPTION_TOKEN, token->length, token->s); - } else { - coap_add_option(response, COAP_OPTION_SUBSCRIPTION, - coap_encode_var_bytes(buf, ctx->observe), buf); - - if (token->length) - coap_add_option(response, COAP_OPTION_TOKEN, token->length, token->s); - } - - /* calculate current time */ - coap_ticks(&t); - now = my_clock_base + (t / COAP_TICKS_PER_SECOND); - - /* output ticks */ - response->length += snprintf((char *)response->data, - response->max_size - response->length, - "%u", (unsigned int)now); -} - -void -init_resources(coap_context_t *ctx) { - coap_resource_t *r; -#if 0 - r = coap_resource_init(NULL, 0, 0); - coap_register_handler(r, COAP_REQUEST_GET, hnd_get_index); - - coap_add_attr(r, (unsigned char *)"ct", 2, (unsigned char *)"0", 1, 0); - coap_add_attr(r, (unsigned char *)"title", 5, (unsigned char *)"\"General Info\"", 14, 0); - coap_add_resource(ctx, r); -#endif - /* store clock base to use in /time */ - my_clock_base = clock_offset; - - r = coap_resource_init((unsigned char *)"time", 4, 0); - if (!r) - goto error; - - r->observable = 1; - time_resource = r; - coap_register_handler(r, COAP_REQUEST_GET, hnd_get_time); -#if 0 - coap_register_handler(r, COAP_REQUEST_PUT, hnd_put_time); - coap_register_handler(r, COAP_REQUEST_DELETE, hnd_delete_time); -#endif - coap_add_attr(r, (unsigned char *)"ct", 2, (unsigned char *)"0", 1, 0); - /* coap_add_attr(r, (unsigned char *)"title", 5, (unsigned char *)"\"Internal Clock\"", 16, 0); */ - coap_add_attr(r, (unsigned char *)"rt", 2, (unsigned char *)"\"Ticks\"", 7, 0); - coap_add_attr(r, (unsigned char *)"if", 2, (unsigned char *)"\"clock\"", 7, 0); - - coap_add_resource(ctx, r); -#if 0 -#ifndef WITHOUT_ASYNC - r = coap_resource_init((unsigned char *)"async", 5, 0); - coap_register_handler(r, COAP_REQUEST_GET, hnd_get_async); - - coap_add_attr(r, (unsigned char *)"ct", 2, (unsigned char *)"0", 1, 0); - coap_add_resource(ctx, r); -#endif /* WITHOUT_ASYNC */ -#endif - - return; - error: - coap_log(LOG_CRIT, "cannot create resource\n"); -} - -/* struct etimer notify_timer; */ -struct etimer dirty_timer; - -/*---------------------------------------------------------------------------*/ -PROCESS_THREAD(coap_server_process, ev, data) -{ - PROCESS_BEGIN(); - - init_coap(); - init_resources(coap_context); - - if (!coap_context) { - coap_log(LOG_EMERG, "cannot create context\n"); - PROCESS_EXIT(); - } - - /* etimer_set(¬ify_timer, 5 * CLOCK_SECOND); */ - etimer_set(&dirty_timer, 30 * CLOCK_SECOND); - - while(1) { - PROCESS_YIELD(); - if(ev == tcpip_event) { - coap_read(coap_context); /* read received data */ - coap_dispatch(coap_context); /* and dispatch PDUs from receivequeue */ - } else if (ev == PROCESS_EVENT_TIMER && etimer_expired(&dirty_timer)) { - time_resource->dirty = 1; - etimer_reset(&dirty_timer); - } - } - - PROCESS_END(); -} -/*---------------------------------------------------------------------------*/ -- 2.0.1