133 lines
2.8 KiB
C
133 lines
2.8 KiB
C
|
/*
|
||
|
* coap.h
|
||
|
*
|
||
|
* Created on: Aug 25, 2010
|
||
|
* Author: dogan
|
||
|
*/
|
||
|
|
||
|
#ifndef COAP_COMMON_H_
|
||
|
#define COAP_COMMON_H_
|
||
|
|
||
|
#define PORT 61616
|
||
|
|
||
|
/*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;
|
||
|
|
||
|
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;
|
||
|
|
||
|
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;
|
||
|
} 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 initialize_packet(coap_packet_t* packet);
|
||
|
|
||
|
#endif /* COAP_COMMON_H_ */
|