mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-30 10:33:13 +00:00
Return ast_event_get_ie_raw to using an iterator and fix logic in ast_event_iterator_next.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@81348 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
16
main/event.c
16
main/event.c
@@ -372,7 +372,7 @@ void ast_event_iterator_init(struct ast_event_iterator *iterator, const struct a
|
|||||||
int ast_event_iterator_next(struct ast_event_iterator *iterator)
|
int ast_event_iterator_next(struct ast_event_iterator *iterator)
|
||||||
{
|
{
|
||||||
iterator->ie = ((void *) iterator->ie) + sizeof(*iterator->ie) + ntohs(iterator->ie->ie_payload_len);
|
iterator->ie = ((void *) iterator->ie) + sizeof(*iterator->ie) + ntohs(iterator->ie->ie_payload_len);
|
||||||
return ((iterator->event_len > (((void *) iterator->ie) - ((void *) iterator->event))) ? -1 : 0);
|
return ((iterator->event_len < (((void *) iterator->ie) - ((void *) iterator->event))) ? -1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ast_event_ie_type ast_event_iterator_get_ie_type(struct ast_event_iterator *iterator)
|
enum ast_event_ie_type ast_event_iterator_get_ie_type(struct ast_event_iterator *iterator)
|
||||||
@@ -416,18 +416,14 @@ const char *ast_event_get_ie_str(const struct ast_event *event, enum ast_event_i
|
|||||||
|
|
||||||
const void *ast_event_get_ie_raw(const struct ast_event *event, enum ast_event_ie_type ie_type)
|
const void *ast_event_get_ie_raw(const struct ast_event *event, enum ast_event_ie_type ie_type)
|
||||||
{
|
{
|
||||||
struct ast_event_ie *ie;
|
struct ast_event_iterator iterator;
|
||||||
uint16_t event_len;
|
int res = 0;
|
||||||
|
|
||||||
ie_type = ntohs(ie_type);
|
ie_type = ntohs(ie_type);
|
||||||
event_len = ntohs(event->event_len);
|
|
||||||
|
|
||||||
ie = ((void *) event) + sizeof(*event);
|
for (ast_event_iterator_init(&iterator, event); !res; res = ast_event_iterator_next(&iterator)) {
|
||||||
|
if (ast_event_iterator_get_ie_type(&iterator) == ie_type)
|
||||||
while ((((void *) ie) - ((void *) event)) < event_len) {
|
return ast_event_iterator_get_ie_raw(&iterator);
|
||||||
if (ie->ie_type == ie_type)
|
|
||||||
return ie->ie_payload;
|
|
||||||
ie = ((void *) ie) + sizeof(*ie) + ntohs(ie->ie_payload_len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Reference in New Issue
Block a user