void cancel_observe(lwm2m_context_t * contextP, uint16_t mid, uint8_t * fromAddr, size_t fromAddrLen) { lwm2m_observed_t * observedP; LOG("cancel_observe()\r\n"); for (observedP = contextP->observedList; observedP != NULL; observedP = observedP->next) { lwm2m_watcher_t * targetP = NULL; if (observedP->watcherList->lastMid == mid && observedP->watcherList->server->addrLen == fromAddrLen && memcmp(observedP->watcherList->server->addr, fromAddr, fromAddrLen) == 0) { targetP = observedP->watcherList; observedP->watcherList = observedP->watcherList->next; } else { lwm2m_watcher_t * parentP; parentP = observedP->watcherList; while (parentP->next != NULL && (parentP->next->lastMid != mid || parentP->next->server->addrLen != fromAddrLen || memcmp(parentP->next->server->addr, fromAddr, fromAddrLen) != 0)) { parentP = parentP->next; } if (parentP->next != NULL) { targetP = parentP->next; parentP->next = parentP->next->next; } } if (targetP != NULL) { lwm2m_free(targetP); if (observedP->watcherList == NULL) { prv_unlinkObserved(contextP, observedP); lwm2m_free(observedP); } return; } } }
void ICACHE_FLASH_ATTR cancel_observe(lwm2m_context_t * contextP, uint16_t mid, void * fromSessionH) { lwm2m_observed_t * observedP; LOG("cancel_observe()\r\n"); for (observedP = contextP->observedList; observedP != NULL; observedP = observedP->next) { lwm2m_watcher_t * targetP = NULL; if (observedP->watcherList->lastMid == mid && observedP->watcherList->server->sessionH == fromSessionH) { targetP = observedP->watcherList; observedP->watcherList = observedP->watcherList->next; } else { lwm2m_watcher_t * parentP; parentP = observedP->watcherList; while (parentP->next != NULL && (parentP->next->lastMid != mid || parentP->next->server->sessionH != fromSessionH)) { parentP = parentP->next; } if (parentP->next != NULL) { targetP = parentP->next; parentP->next = parentP->next->next; } } if (targetP != NULL) { lwm2m_free(targetP); if (observedP->watcherList == NULL) { prv_unlinkObserved(contextP, observedP); lwm2m_free(observedP); } return; } } }
void observe_cancel(lwm2m_context_t * contextP, uint16_t mid, void * fromSessionH) { lwm2m_observed_t * observedP; LOG_ARG("mid: %d", mid); for (observedP = contextP->observedList; observedP != NULL; observedP = observedP->next) { lwm2m_watcher_t * targetP = NULL; if ((LWM2M_MAX_ID == mid || observedP->watcherList->lastMid == mid) && lwm2m_session_is_equal(observedP->watcherList->server->sessionH, fromSessionH, contextP->userData)) { targetP = observedP->watcherList; observedP->watcherList = observedP->watcherList->next; } else { lwm2m_watcher_t * parentP; parentP = observedP->watcherList; while (parentP->next != NULL && (parentP->next->lastMid != mid || lwm2m_session_is_equal(parentP->next->server->sessionH, fromSessionH, contextP->userData))) { parentP = parentP->next; } if (parentP->next != NULL) { targetP = parentP->next; parentP->next = parentP->next->next; } } if (targetP != NULL) { if (targetP->parameters != NULL) lwm2m_free(targetP->parameters); lwm2m_free(targetP); if (observedP->watcherList == NULL) { prv_unlinkObserved(contextP, observedP); lwm2m_free(observedP); } return; } } }
void observe_clear(lwm2m_context_t * contextP, lwm2m_uri_t * uriP) { lwm2m_observed_t * observedP; LOG_URI(uriP); observedP = contextP->observedList; while(observedP != NULL) { if (observedP->uri.objectId == uriP->objectId && (LWM2M_URI_IS_SET_INSTANCE(uriP) == false || observedP->uri.instanceId == uriP->instanceId)) { lwm2m_observed_t * nextP; lwm2m_watcher_t * watcherP; nextP = observedP->next; for (watcherP = observedP->watcherList; watcherP != NULL; watcherP = watcherP->next) { if (watcherP->parameters != NULL) lwm2m_free(watcherP->parameters); } LWM2M_LIST_FREE(observedP->watcherList); prv_unlinkObserved(contextP, observedP); lwm2m_free(observedP); observedP = nextP; } else { observedP = observedP->next; } } }