/* * coap.h * * Created on: Aug 25, 2010 * Author: dogan */ #ifndef COAP_COMMON_H_ #define COAP_COMMON_H_ #include "contiki-net.h" /*COAP method types*/ typedef enum { COAP_GET = 1, COAP_POST, COAP_PUT, COAP_DELETE } coap_method_t; typedef enum { MESSAGE_TYPE_CON, MESSAGE_TYPE_NON, MESSAGE_TYPE_ACK, MESSAGE_TYPE_RST } message_type; typedef enum { OK_200 = 80, CREATED_201 = 81, NOT_MODIFIED_304 = 124, BAD_REQUEST_400 = 160, NOT_FOUND_404 = 164, METHOD_NOT_ALLOWED_405 = 165, UNSUPPORTED_MADIA_TYPE_415 = 175, INTERNAL_SERVER_ERROR_500 = 200, BAD_GATEWAY_502 = 202, GATEWAY_TIMEOUT_504 = 204 } status_code_t; typedef enum { Option_Type_Content_Type = 1, Option_Type_Max_Age = 2, Option_Type_Etag = 4, Option_Type_Uri_Authority = 5, Option_Type_Location = 6, Option_Type_Uri_Path = 9, Option_Type_Subscription_Lifetime = 10, Option_Type_Token = 11, Option_Type_Block = 13, Option_Type_Uri_Query = 15 } option_type; typedef enum { TEXT_PLAIN = 0, TEXT_XML = 1, TEXT_CSV = 2, TEXT_HTML = 3, IMAGE_GIF = 21, IMAGE_JPEG = 22, IMAGE_PNG = 23, IMAGE_TIFF = 24, AUDIO_RAW = 25, VIDEO_RAW = 26, APPLICATION_LINK_FORMAT = 40, APPLICATION_XML = 41, APPLICATION_OCTET_STREAM = 42, APPLICATION_RDF_XML = 43, APPLICATION_SOAP_XML = 44, APPLICATION_ATOM_XML = 45, APPLICATION_XMPP_XML = 46, APPLICATION_EXI = 47, APPLICATION_X_BXML = 48, APPLICATION_FASTINFOSET = 49, APPLICATION_SOAP_FASTINFOSET = 50, APPLICATION_JSON = 51 } content_type_t; #define COAP_HEADER_VERSION_MASK 0xC0 #define COAP_HEADER_TYPE_MASK 0x30 #define COAP_HEADER_OPTION_COUNT_MASK 0x0F #define COAP_HEADER_OPTION_DELTA_MASK 0xF0 #define COAP_HEADER_OPTION_SHORT_LENGTH_MASK 0x0F #define COAP_HEADER_VERSION_POSITION 6 #define COAP_HEADER_TYPE_POSITION 4 #define COAP_HEADER_OPTION_DELTA_POSITION 4 #define REQUEST_BUFFER_SIZE 200 #define DEFAULT_CONTENT_TYPE 0 #define DEFAULT_MAX_AGE 60 #define DEFAULT_URI_AUTHORITY "" #define DEFAULT_URI_PATH "" //keep open requests and their xactid struct header_option_t { struct header_option_t* next; uint16_t option; uint16_t len; uint8_t* value; }; typedef struct header_option_t header_option_t; struct block_option_t { uint32_t number; uint8_t more; uint8_t size; }; typedef struct block_option_t block_option_t; typedef struct { uint8_t ver; //2-bits currently set to 1. uint8_t type; //2-bits Confirmable (0), Non-Confirmable (1), Acknowledgment (2) or Reset (3) uint8_t option_count; //4-bits uint8_t code; //8-bits Method or response code uint16_t tid; //16-bit unsigned integer header_option_t* options; char* url; //put it just as a shortcut or else need to parse options everytime to access it. uint16_t url_len; char* query; uint16_t query_len; uint16_t payload_len; uint8_t* payload; uip_ipaddr_t addr; } coap_packet_t; /*error definitions*/ typedef enum { NO_ERROR, /*Memory errors*/ MEMORY_ALLOC_ERR, MEMORY_BOUNDARY_EXCEEDED } error_t; int serialize_packet(coap_packet_t* request, uint8_t* buffer); void init_packet(coap_packet_t* packet); #endif /* COAP_COMMON_H_ */