/*----------------------------------------------------------------------------*/
void
tres_del_task(tres_res_t *task)
{
  list_t obs_list;
  coap_observer_t *obs, *cur;

  tres_stop_monitoring(task);
  task->name[0] = '\0';         // a null name marks a deleted task
  // remove subscribers if any
  // TODO: can we notify the subscriber in some way?
  obs_list = coap_get_observers();
  obs = (coap_observer_t *)list_head(obs_list);
  while(obs) {
    cur = obs;
    // next is set to NULL if the observer is removed, so we must save it here
    obs = obs->next;
    if(cur->url == task->lo_url
       || memcmp(cur->url, task->lo_url, strlen(cur->url)) == 0) {
      coap_remove_observer(cur);
    }
  }
  task_is_delete_all(task);
  if(task->pf_img) {
    tres_mem_pf_clear(task->pf_img);
  }
  task_reset_state(task);
  memb_free(&tasks_mem, task);
}
Example #2
0
int
coap_remove_observer_by_client(uip_ipaddr_t *addr, uint16_t port)
{
  int removed = 0;
  coap_observer_t* obs = NULL;
  for (obs = (coap_observer_t*)list_head(observers_list); obs; obs = obs->next)
  {
      PRINTF("Remove check Port %u\n", port);
    if (uip_ipaddr_cmp(&obs->addr, addr) && obs->port==port)
    {
      coap_remove_observer(obs);
      removed++;
    }
  }
  return removed;
}
Example #3
0
int
coap_remove_observer_by_token(uip_ipaddr_t *addr, uint16_t port, uint8_t *token, size_t token_len)
{
  int removed = 0;
  coap_observer_t* obs = NULL;
  for (obs = (coap_observer_t*)list_head(observers_list); obs; obs = obs->next)
  {
    PRINTF("Remove check Token 0x%02X%02X\n", token[0], token[1]);
    if (uip_ipaddr_cmp(&obs->addr, addr) && obs->port==port && memcmp(obs->token, token, token_len)==0)
    {
      coap_remove_observer(obs);
      removed++;
    }
  }
  return removed;
}
Example #4
0
int
coap_remove_observer_by_mid(uip_ipaddr_t *addr, uint16_t port, uint16_t mid)
{
  int removed = 0;
  coap_observer_t* obs = NULL;

  for (obs = (coap_observer_t*)list_head(observers_list); obs; obs = obs->next)
  {
    PRINTF("Remove check MID %u\n", mid);
    if (uip_ipaddr_cmp(&obs->addr, addr) && obs->port==port && obs->last_mid==mid)
    {
      coap_remove_observer(obs);
      removed++;
    }
  }
  return removed;
}
Example #5
0
int
coap_remove_observer_by_url(uip_ipaddr_t *addr, uint16_t port, const char *url)
{
  int removed = 0;
  coap_observer_t* obs = NULL;

  for (obs = (coap_observer_t*)list_head(observers_list); obs; obs = obs->next)
  {
    PRINTF("Remove check URL %p\n", url);
    if (uip_ipaddr_cmp(&obs->addr, addr) && obs->port==port && (obs->url==url || memcmp(obs->url, url, strlen(obs->url))==0))
    {
      coap_remove_observer(obs);
      removed++;
    }
  }
  return removed;
}