Merge pull request #9209 from kb2ma/gcoap/observe_change_token

net/gcoap: Observer re-register with new token
This commit is contained in:
Ken Bannister 2018-05-29 18:06:07 +00:00 committed by GitHub
commit 341debd5e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -279,7 +279,6 @@ static size_t _handle_req(coap_pkt_t *pdu, uint8_t *buf, size_t len,
case GCOAP_RESOURCE_NO_PATH: case GCOAP_RESOURCE_NO_PATH:
return gcoap_response(pdu, buf, len, COAP_CODE_PATH_NOT_FOUND); return gcoap_response(pdu, buf, len, COAP_CODE_PATH_NOT_FOUND);
case GCOAP_RESOURCE_FOUND: case GCOAP_RESOURCE_FOUND:
/* used below to ensure a memo not already recorded for the resource */
_find_obs_memo_resource(&resource_memo, resource); _find_obs_memo_resource(&resource_memo, resource);
break; break;
} }
@ -288,8 +287,12 @@ static size_t _handle_req(coap_pkt_t *pdu, uint8_t *buf, size_t len,
int empty_slot = _find_obs_memo(&memo, remote, pdu); int empty_slot = _find_obs_memo(&memo, remote, pdu);
/* record observe memo */ /* record observe memo */
if (memo == NULL) { if (memo == NULL) {
if (empty_slot >= 0 && resource_memo == NULL) { if ((resource_memo != NULL)
&& _endpoints_equal(remote, resource_memo->observer)) {
/* observer re-registering with new token */
memo = resource_memo;
}
else if ((empty_slot >= 0) && (resource_memo == NULL)) {
int obs_slot = _find_observer(&observer, remote); int obs_slot = _find_observer(&observer, remote);
/* cache new observer */ /* cache new observer */
if (observer == NULL) { if (observer == NULL) {