1 //******************************************************************
3 // Copyright 2014 Intel Corporation All Rights Reserved.
4 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
14 static const char * LEVEL[] __attribute__ ((unused)) = {"DEBUG", "INFO", "WARNING", "ERROR", "FATAL"};
15 char *getResult(OCStackResult result);
16 void printToScreen(LogLevel level, const char * tag, const char * logStr);
17 void printToScreenV(LogLevel level, const char * tag, const char * format, ...);
19 #define TAG PCF("ocserver")
22 void createLEDResource();
23 typedef struct LEDRESOURCE{
24 OCResourceHandle handle;
28 static LEDResource LED;
30 void MyOCEntityHandler (OCEntityHandlerFlag flag, const char *request, char *response, uint16_t maxResponseSize, OCResourceHandle resource) {
34 typeOfMessage = "OC_INIT_FLAG";
37 typeOfMessage = "OC_REQUEST_FLAG";
40 typeOfMessage = "OC_OBSERVE_FLAG";
43 typeOfMessage = "UNKNOWN";
45 printToScreenV(INFO, TAG, "/nReceiving message type:/n/t %s. /n/nWith request:/n/t %s", typeOfMessage, request);
48 /* SIGINT handler: set gQuitFlag to 1 for graceful termination */
49 void handleSigInt(int signum) {
50 if (signum == SIGINT) {
56 printToScreen(DEBUG, TAG, "OCServer is starting...");
58 uint8_t addr[20] = {0};
59 uint16_t port = USE_RANDOM_PORT;
60 uint8_t ifname[] = "eth0";
62 /*Get Ip address on defined interface and initialize coap on it with random port number
63 * this port number will be used as a source port in all coap communications*/
64 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
66 printToScreenV(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
67 if (OCInit((char *) addr, port, OC_SERVER) != OC_STACK_OK) {
68 printToScreen(ERROR, TAG, "OCStack init error");
73 * Declare and create the example resource: LED
77 // Break from loop with Ctrl-C
78 printToScreen(INFO, TAG, "Entering ocserver main loop...");
79 signal(SIGINT, handleSigInt);
81 if (OCProcess() != OC_STACK_OK) {
82 printToScreen(ERROR, TAG, "OCStack process error");
88 printToScreen(INFO, TAG, "Exiting ocserver main loop...");
90 if (OCStop() != OC_STACK_OK) {
91 printToScreen(ERROR, TAG, "OCStack process error");
96 void createLEDResource() {
98 OCStackResult res = OCCreateResource(&LED.handle,
100 "state:oc.bt.b;power:oc.bt.i",
102 OC_REST_GET|OC_REST_PUT,
105 OC_DISCOVERABLE|OC_OBSERVABLE);
106 printToScreenV(INFO, TAG, "Created LED resource with result: %s", getResult(res));
108 char *getResult(OCStackResult result) {
109 char resString[40] = {0};
110 strcpy(resString, "Result: ");
113 strcat(resString, "OC_STACK_OK");
115 case OC_STACK_INVALID_URI:
116 strcat(resString, "OC_STACK_INVALID_URI");
118 case OC_STACK_INVALID_IP:
119 strcat(resString, "OC_STACK_INVALID_IP");
121 case OC_STACK_INVALID_PORT:
122 strcat(resString, "OC_STACK_INVALID_PORT");
124 case OC_STACK_INVALID_CALLBACK:
125 strcat(resString, "OC_STACK_INVALID_CALLBACK");
127 case OC_STACK_INVALID_METHOD:
128 strcat(resString, "OC_STACK_INVALID_METHOD");
131 strcat(resString, "OC_STACK_ERROR");
134 strcat(resString, "UNKNOWN");
138 void printToScreen(LogLevel level, const char * tag, const char * logStr) {
139 printf("%s: %s: %s\n", LEVEL[level], tag, logStr);
141 void printToScreenV(LogLevel level, const char * tag, const char * format, ...) {
142 if (!format || !tag) {
145 char buffer[MAX_LOG_V_BUFFER_SIZE];
146 memset(buffer, 0, sizeof buffer);
148 va_start(args, format);
149 vsnprintf(buffer, sizeof buffer - 1, format, args);
151 printToScreen(level, tag, buffer);