X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fstack%2Finclude%2Foctypes.h;h=cd4c13b5f13f117abdd7c2a2d4f68ddcfb0f22d3;hb=bfa83c91bc35dec5ead161bebce4bd92ed8d25ed;hp=5210210df9bfaa67db0e569727db5c6e4568780b;hpb=d147b9150542047ee42d7f622524ec0bf3b34128;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/stack/include/octypes.h b/resource/csdk/stack/include/octypes.h index 5210210..cd4c13b 100644 --- a/resource/csdk/stack/include/octypes.h +++ b/resource/csdk/stack/include/octypes.h @@ -22,41 +22,43 @@ #define OCTYPES_H_ #include "ocstackconfig.h" - +#include +#include +#include #ifdef __cplusplus +#include + extern "C" { #endif // __cplusplus #define WITH_PRESENCE +#include "ocpresence.h" //----------------------------------------------------------------------------- // Defines //----------------------------------------------------------------------------- -//TODO: May want to refactor this in upcoming sprints. -//Don't want to expose to application layer that lower level stack is using CoAP. - -/// Authority + URI string to prefix well known queries -#define OC_WELL_KNOWN_QUERY "224.0.1.187:5683/oc/core" -#define OC_MULTICAST_DISCOVERY_URI "/oc/core" -#define OC_EXPLICIT_DEVICE_DISCOVERY_URI "224.0.1.187:5683/oc/core/d?rt=core.led" -/// Multicast address and port string to prefix multicast queries -#define OC_MULTICAST_PREFIX "224.0.1.187:5683" -/// IP Multicast address to use for multicast requests -#define OC_MULTICAST_IP "224.0.1.187" -/// IP Multicast port to use for multicast requests -#define OC_MULTICAST_PORT 5683 - +/** + * OIC Virtual resources supported by every OIC device. + */ +#define OC_RSRVD_WELL_KNOWN_URI "/oic/res" +#define OC_RSRVD_DEVICE_URI "/oic/d" +#define OC_RSRVD_PLATFORM_URI "/oic/p" +#define OC_RSRVD_RESOURCE_TYPES_URI "/oic/res/types/d" #ifdef WITH_PRESENCE +#define OC_RSRVD_PRESENCE_URI "/oic/ad" #define OC_DEFAULT_PRESENCE_TTL_SECONDS (60) /// OC_MAX_PRESENCE_TTL_SECONDS sets the maximum time to live (TTL) for presence. /// NOTE: Changing the setting to a longer duration may lead to unsupported and untested /// operation. #define OC_MAX_PRESENCE_TTL_SECONDS (60 * 60 * 24) // 60 sec/min * 60 min/hr * 24 hr/day -#define OC_PRESENCE_URI "/oic/ad" +#endif + +///Separtor for multiple query string +#define OC_QUERY_SEPARATOR "&;" /** * Attributes used to form a proper OIC conforming JSON message. */ -#define OC_RSRVD_OC "oic" +//#define OC_RSRVD_OC "oic" #define OC_RSRVD_PAYLOAD "payload" #define OC_RSRVD_HREF "href" #define OC_RSRVD_PROPERTY "prop" @@ -65,74 +67,205 @@ extern "C" { #define OC_RSRVD_RESOURCE_TYPE "rt" #define OC_RSRVD_RESOURCE_TYPE_PRESENCE "oic.wk.ad" #define OC_RSRVD_INTERFACE "if" -#define OC_RSRVD_DEVICE_ID "di" -#define OC_RSRVD_DEVICE_NAME "dn" +#define OC_RSRVD_TTL "ttl" +#define OC_RSRVD_NONCE "non" +#define OC_RSRVD_TRIGGER "trg" +#define OC_RSRVD_LINKS "links" + #define OC_RSRVD_INTERFACE_DEFAULT "oic.if.baseline" #define OC_RSRVD_INTERFACE_LL "oic.if.ll" #define OC_RSRVD_INTERFACE_BATCH "oic.if.b" -#define OC_RSRVD_INTERFACE_GROUP "oc.mi.grp" +#define OC_RSRVD_INTERFACE_GROUP "oic.mi.grp" #define OC_RSRVD_MFG_DATE "mndt" #define OC_RSRVD_FW_VERSION "mnfv" #define OC_RSRVD_HOST_NAME "hn" +#define OC_RSRVD_VERSION "icv" +#define OC_RSRVD_POLICY "p" +#define OC_RSRVD_BITMAP "bm" +#define OC_RSRVD_SECURE "sec" +#define OC_RSRVD_HOSTING_PORT "port" +#define OC_RSRVD_SERVER_INSTANCE_ID "sid" + +//**** Presence "Announcement Triggers" **** +#define OC_RSRVD_TRIGGER_CREATE "create" +#define OC_RSRVD_TRIGGER_CHANGE "change" +#define OC_RSRVD_TRIGGER_DELETE "delete" +//******************* + +//**** Platform **** +#define OC_RSRVD_PLATFORM_ID "pi" #define OC_RSRVD_MFG_NAME "mnmn" #define OC_RSRVD_MFG_URL "mnml" #define OC_RSRVD_MODEL_NUM "mnmo" +#define OC_RSRVD_MFG_DATE "mndt" #define OC_RSRVD_PLATFORM_VERSION "mnpv" +#define OC_RSRVD_OS_VERSION "mnos" +#define OC_RSRVD_HARDWARE_VERSION "mnhw" +#define OC_RSRVD_FIRMWARE_VERSION "mnfv" #define OC_RSRVD_SUPPORT_URL "mnsl" -#define OC_RSRVD_VERSION "icv" -#define OC_RSRVD_OBSERVABLE "obs" -#define OC_RSRVD_SECURE "sec" -#define OC_RSRVD_HOSTING_PORT "port" -#define OC_RSRVD_SERVER_INSTANCE_ID "sid" -#endif +#define OC_RSRVD_SYSTEM_TIME "st" +//******************* + +//**** Device **** +#define OC_RSRVD_DEVICE_ID "di" +#define OC_RSRVD_DEVICE_NAME "n" +#define OC_RSRVD_SPEC_VERSION "lcv" +#define OC_RSRVD_DATA_MODEL_VERSION "dmv" + +#define OC_SPEC_VERSION "0.9.0" +#define OC_DATA_MODEL_VERSION "sec.0.95" +//******************* + +// These provide backward compatibility - their use is deprecated +#ifndef GOING_AWAY +#define OC_MULTICAST_PREFIX "224.0.1.187:5683" +#define OC_MULTICAST_IP "224.0.1.187" +#define OC_MULTICAST_PORT 5683 +#endif // GOING_AWAY //----------------------------------------------------------------------------- // Typedefs //----------------------------------------------------------------------------- +#define MAX_ADDR_STR_SIZE (40) +#define MAX_IDENTITY_SIZE (32) + +/* + * These enums (OCTransportAdapter and OCTransportFlags) must + * be kept synchronized with OCConnectivityType (below) as well as + * CATransportAdapter and CATransportFlags (in CACommon.h). + */ + +typedef enum +{ + OC_DEFAULT_ADAPTER = 0, + + // value zero indicates discovery + OC_ADAPTER_IP = (1 << 0), // IPv4 and IPv6, including 6LoWPAN + OC_ADAPTER_GATT_BTLE = (1 << 1), // GATT over Bluetooth LE + OC_ADAPTER_RFCOMM_BTEDR = (1 << 2), // RFCOMM over Bluetooth EDR +} OCTransportAdapter; + +// enum layout assumes some targets have 16-bit integer (e.g., Arduino) +typedef enum +{ + OC_DEFAULT_FLAGS = 0, + + // Insecure transport is the default (subject to change) + OC_FLAG_SECURE = (1 << 4), // secure the transport path + + // IPv4 & IPv6 autoselection is the default + OC_IP_USE_V6 = (1 << 5), // IP adapter only + OC_IP_USE_V4 = (1 << 6), // IP adapter only + + // Link-Local multicast is the default multicast scope for IPv6. + // These are placed here to correspond to the IPv6 multicast address bits. + OC_SCOPE_INTERFACE = 0x1, // IPv6 Interface-Local scope (loopback) + OC_SCOPE_LINK = 0x2, // IPv6 Link-Local scope (default) + OC_SCOPE_REALM = 0x3, // IPv6 Realm-Local scope + OC_SCOPE_ADMIN = 0x4, // IPv6 Admin-Local scope + OC_SCOPE_SITE = 0x5, // IPv6 Site-Local scope + OC_SCOPE_ORG = 0x8, // IPv6 Organization-Local scope + OC_SCOPE_GLOBAL = 0xE, // IPv6 Global scope +} OCTransportFlags; + +#define OC_MASK_SCOPE (0x000F) +#define OC_MASK_MODS (0x0FF0) + +/* + * endpoint identity + */ +typedef struct +{ + uint16_t id_length; + unsigned char id[MAX_IDENTITY_SIZE]; +} OCIdentity; + /** * Data structure to encapsulate IPv4/IPv6/Contiki/lwIP device addresses. + * + * OCDevAddr must be the same as CAEndpoint (in CACommon.h). */ -typedef struct OCDevAddr +typedef struct { - uint32_t size; ///< length of the address stored in addr field. - uint8_t addr[DEV_ADDR_SIZE_MAX]; ///< device address. + OCTransportAdapter adapter; // adapter type + OCTransportFlags flags; // transport modifiers + char addr[MAX_ADDR_STR_SIZE]; // address for all adapters + uint32_t interface; // usually zero for default interface + uint16_t port; // for IP + OCIdentity identity; // secure node identity } OCDevAddr; -/** - * OC Virtual resources supported by every OC device. +/* + * OCConnectivityType includes elements of both OCTransportAdapter + * and OCTransportFlags. It is defined conditionally because the + * smaller definition limits expandability on 32/64 bit integer machines, + * and the larger definition won't fit into an enum on 16-bit integer + * machines like Arduino. + * + * This structure must directly correspond to OCTransportAdapter + * and OCTransportFlags. */ typedef enum { - OC_WELL_KNOWN_URI= 0, ///< "/oc/core" - OC_DEVICE_URI, ///< "/oc/core/d" - OC_RESOURCE_TYPES_URI, ///< "/oc/core/d/type" - #ifdef WITH_PRESENCE - OC_PRESENCE, ///< "/oic/ad" + CT_DEFAULT = 0, // use when defaults are ok + + #if defined (__UINT32_MAX__) && (__UINT32_MAX__ == 65535) // 16-bit int + CT_ADAPTER_IP = (1 << 10), // IPv4 and IPv6, including 6LoWPAN + CT_ADAPTER_GATT_BTLE = (1 << 11), // GATT over Bluetooth LE + CT_ADAPTER_RFCOMM_BTEDR = (1 << 12), // RFCOMM over Bluetooth EDR + #define CT_ADAPTER_SHIFT 10 + #define CT_MASK_FLAGS 0x03FF + #define CT_MASK_ADAPTER 0xFC00 + #else // assume 32-bit int + CT_ADAPTER_IP = (1 << 16), // IPv4 and IPv6, including 6LoWPAN + CT_ADAPTER_GATT_BTLE = (1 << 17), // GATT over Bluetooth LE + CT_ADAPTER_RFCOMM_BTEDR = (1 << 18), // RFCOMM over Bluetooth EDR + #define CT_ADAPTER_SHIFT 16 + #define CT_MASK_FLAGS 0xFFFF + #define CT_MASK_ADAPTER 0xFFFF0000 #endif - OC_MAX_VIRTUAL_RESOURCES ///