Exemple #1
0
void
led_handler(REQUEST* request, RESPONSE* response)
{
  char color[10];
  char mode[10];
  uint8_t led = 0;
  int success = 1;
  int ret;

  ret = rest_get_query_variable(request, "color", color, 10);
  if (ret) {
    PRINTF("color %s\n", color);

    if (!strcmp(color,"red")) {
      led = LEDS_RED;
    } else if(!strcmp(color,"green")) {
      led = LEDS_GREEN;
    } else {
      success = 0;
    }
  } else {
    success = 0;
  }

  ret = rest_get_query_variable(request, "mode", mode, 10);
  if (success && ret) {
    PRINTF("mode %s\n", mode);

    if (!strcmp(mode, "on")) {
      leds_on(led);
    } else if (!strcmp(mode, "off")) {
      leds_off(led);
    } else {
      success = 0;
    }
  } else {
    success = 0;
  }

  if (!success) {
    rest_set_response_status(response, BAD_REQUEST_400);
  }
}
Exemple #2
0
int
rest_invoke_restful_service(REQUEST* request, RESPONSE* response)
{
  int found = 0;
  const char* url = request->url;
  uint16_t url_len = request->url_len;

  PRINTF("rest_invoke_restful_service url %s url_len %d -->\n", url, url_len);

  resource_t* resource = NULL;

  for (resource = (resource_t*)list_head(restful_services); resource; resource = resource->next) {
    /*if the web service handles that kind of requests and urls matches*/
    if (url && strlen(resource->url) == url_len && strncmp(resource->url, url, url_len) == 0){
      found = 1;
      method_t method = rest_get_method_type(request);

      PRINTF("method %u, resource->methods_to_handle %u\n", (uint16_t)method, resource->methods_to_handle);

      if (resource->methods_to_handle & method) {

        /*FIXME Need to move somewhere else*/
        #ifdef WITH_COAP
        uint32_t lifetime = 0;
        if (coap_get_header_subscription_lifetime(request, &lifetime)) {
          PRINTF("Lifetime %lu\n", lifetime);

          periodic_resource_t* periodic_resource = NULL;
          for (periodic_resource = (periodic_resource_t*)list_head(restful_periodic_services);
               periodic_resource;
               periodic_resource = periodic_resource->next) {
            if (periodic_resource->resource == resource) {
              PRINTF("Periodic Resource Found\n");
              PRINT6ADDR(&request->addr);
              periodic_resource->lifetime = lifetime;
              stimer_set(periodic_resource->lifetime_timer, lifetime);
              uip_ipaddr_copy(&periodic_resource->addr, &request->addr);
            }
          }
        }
        #endif /*WITH_COAP*/

        /*call pre handler if it exists*/
        if (!resource->pre_handler || resource->pre_handler(request, response)) {
          /* call handler function*/
          resource->handler(request, response);

          /*call post handler if it exists*/
          if (resource->post_handler) {
            resource->post_handler(request, response);
          }
        }
      } else {
        rest_set_response_status(response, METHOD_NOT_ALLOWED_405);
      }
      break;
    }
  }

  if (!found) {
    rest_set_response_status(response, NOT_FOUND_404);
  }

  return found;
}
Exemple #3
0
void
mem_handler(REQUEST* request, RESPONSE* response)
{
  char arg[16];
  uint32_t addr, val;
  int success = 1;
  int ret;

  ret = rest_get_query_variable(request, "addr", arg, 16);
  if (ret) {
    addr = readhex(arg);
    ret = rest_get_query_variable(request, "sz", arg, 16);
    if (ret) {
      if (arg[0] == '1') {
        ret = rest_get_query_variable(request, "val", arg, 16);
        if (ret) {
          val = readhex(arg);
          *(uint8_t*)addr = (uint8_t)val;
          sprintf(temp, "OK\n");
        } else {
          sprintf(temp, "0x%02x\n", *(uint8_t*)addr);
        }
      } else if (arg[0] == '2') {
        ret = rest_get_query_variable(request, "val", arg, 16);
        if (ret) {
          val = readhex(arg);
          *(uint16_t*)addr = (uint16_t)val;
          sprintf(temp, "OK\n");
        } else {
          sprintf(temp, "0x%0hx\n", *(uint16_t*)addr);
        }
      } else {
        ret = rest_get_query_variable(request, "val", arg, 16);
        if (ret) {
          val = readhex(arg);
          *(uint32_t*)addr = (uint32_t)val;
          sprintf(temp, "OK\n");
        } else {
          sprintf(temp, "0x%0x\n", *(uint32_t*)addr);
        }
      }
    } else {
      ret = rest_get_query_variable(request, "val", arg, 16);
      if (ret) {
        val = readhex(arg);
        *(uint32_t*)addr = (uint32_t)val;
        sprintf(temp, "OK\n");
      } else {
        sprintf(temp, "0x%0x\n", *(uint32_t*)addr);
      }
    }
  } else {
    success = 0;
  }

  if (success) {
    rest_set_header_content_type(response, TEXT_PLAIN);
    rest_set_response_payload(response, (uint8_t*)temp, strlen(temp));
  } else {
    rest_set_response_status(response, BAD_REQUEST_400);
  }
}