if (NULL == queue)
{
- OIC_LOG(DEBUG, TAG, "QueueAddElement FAIL, Invalid Queue");
+ OIC_LOG(DEBUG, TAG, "QueueGetElement FAIL, Invalid Queue");
return NULL;
}
return NULL;
}
- queue->element = element->next;;
+ queue->element = element->next;
queue->count--;
message = element->message;
return queue->element->message;
}
+CAResult_t u_queue_remove_req_elements(u_queue_t *queue,
+ QueueContextDataDestroy callback, void *ctx,
+ QueueDataDestroyFunction destroy)
+{
+ if (NULL == queue)
+ {
+ OIC_LOG(DEBUG, TAG, "QueueRemoveReqElement FAIL, Invalid Queue");
+ return CA_STATUS_FAILED;
+ }
+
+ if (NULL == callback)
+ {
+ OIC_LOG(DEBUG, TAG, "QueueRemoveReqElement FAIL, NULL callback");
+ return CA_STATUS_FAILED;
+ }
+
+ u_queue_element *cur = queue->element;
+ u_queue_element *prev = NULL;
+ u_queue_element *remove = NULL;
+
+ while (NULL != cur)
+ {
+ if (cur->message && callback(cur->message->msg, cur->message->size, ctx))
+ {
+ remove = cur;
+ if (NULL != prev)
+ {
+ prev->next = cur->next;
+ }
+ else
+ {
+ queue->element = cur->next;
+ }
+ cur = cur->next;
+ if (NULL != destroy)
+ {
+ destroy(remove->message->msg, remove->message->size);
+ }
+ else
+ {
+ OICFree(remove->message->msg);
+ }
+ OICFree(remove->message);
+ OICFree(remove);
+ queue->count--;
+ }
+ else
+ {
+ prev = cur;
+ cur = cur->next;
+ }
+ }
+ return CA_STATUS_OK;
+}
+