Ejemplo n.º 1
0
PROCESS_THREAD(rplstats, ev, data)
{
  uip_ipaddr_t *addr;
  PROCESS_BEGIN();

  etimer_set(&et_ping, 5 * CLOCK_SECOND);

  while(1) {
	  uint16_t content_len;
	  PROCESS_WAIT_EVENT();

	  if(etimer_expired(&et_ping)) 
	  {
		  dag = rpl_get_any_dag();
		  if(dag != NULL) {		  
			  PRINTF("post!\n\r");
			  PRINTF("prefix info, len %d\n\r", dag->prefix_info.length);
			  PRINT6ADDR(&(dag->prefix_info.prefix));
			  PRINTF("\n\r");
			  addr = &(dag->prefix_info.prefix);
			  /* assume 64 bit prefix for now */
			  sprintf(host, "[%02x%02x:%02x%02x:%02x%02x:%02x%02x::1]", 
				  ((u8_t *)addr)[0], ((u8_t *)addr)[1], 
				  ((u8_t *)addr)[2], ((u8_t *)addr)[3], 
				  ((u8_t *)addr)[4], ((u8_t *)addr)[5], 
				  ((u8_t *)addr)[6], ((u8_t *)addr)[7]);
			  PRINTF("host: %s\n\r", host);

			  content_len = create_rank_msg(buf);
			  s = httpd_ws_request(HTTPD_WS_POST, host, NULL, port,
					       path, ct_json,
					       content_len, send_buf);
			  while (s->state != 0) { PROCESS_PAUSE(); }
			  
			  first = 1;
		  	  for (parent = dag->preferred_parent; parent != NULL; parent = parent->next) {
		  	  	  content_len = create_parent_msg(buf, parent, first);
		  	  	  s = httpd_ws_request(HTTPD_WS_POST, host, NULL, port,
		  	  			   path, ct_json,
		  	  			   content_len, send_buf);
				  while (s->state != 0) { PROCESS_PAUSE(); }
		  	  	  first = 0;
		  	  }

		  }
		  
		  etimer_set(&et_ping, 5 * CLOCK_SECOND);

	  }
  }
  
  PROCESS_END();
}
Ejemplo n.º 2
0
void
parents_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset)
{
  int32_t strpos = 0;
  volatile uint8_t i;
  rpl_dag_t *dag;
  rpl_parent_t *parent;

  size_t len = 0;
  uint8_t index;
  const char *pstr;
  uint8_t count;

  dag = rpl_get_any_dag();

  if(dag != NULL) {

		/* count the number of routes and return the total */
		count = 0;
		parent = nbr_table_head(rpl_parents);
		while(parent != NULL) {
			parent = nbr_table_next(rpl_parents, parent);
			count++;
		}

		if ((len = REST.get_query_variable(request, "index", &pstr))) {

			index = (uint8_t)atoi(pstr);

			if (index >= count) {
				strpos = snprintf((char *)buffer, preferred_size, "{}");
			} else {
				/* seek to the route entry and return it */
				i = 0;
				parent = nbr_table_head(rpl_parents);
				while(parent != NULL) {
					if (i == index) {
						break;
					}
					parent = nbr_table_next(rpl_parents, parent);
					i++;
				}

				if (parent == dag->preferred_parent) {
					strpos = create_parent_msg((char *)buffer, parent, 1);
				} else {
					strpos = create_parent_msg((char *)buffer, parent, 0);
				}
			}

			REST.set_header_content_type(response, APPLICATION_JSON);

		} else { /* index not provided */
			strpos += snprintf((char *)buffer, preferred_size, "%d", count);
		}

	} else { /* no DAG */
		strpos += snprintf((char *)buffer, preferred_size, "{\"err\": \"no DAG\"}");
		REST.set_header_content_type(response, APPLICATION_JSON);
	}

	*offset = -1;
	REST.set_response_payload(response, buffer, strpos);

}