"Liberate" dtls from BN dependency. Fix bug in replay/update.
This commit is contained in:
@@ -68,13 +68,12 @@ typedef struct _pqueue
|
||||
} pqueue_s;
|
||||
|
||||
pitem *
|
||||
pitem_new(PQ_64BIT priority, void *data)
|
||||
pitem_new(unsigned char *prio64be, void *data)
|
||||
{
|
||||
pitem *item = (pitem *) OPENSSL_malloc(sizeof(pitem));
|
||||
if (item == NULL) return NULL;
|
||||
|
||||
pq_64bit_init(&(item->priority));
|
||||
pq_64bit_assign(&item->priority, &priority);
|
||||
memcpy(item->priority,prio64be,sizeof(item->priority));
|
||||
|
||||
item->data = data;
|
||||
item->next = NULL;
|
||||
@@ -87,7 +86,6 @@ pitem_free(pitem *item)
|
||||
{
|
||||
if (item == NULL) return;
|
||||
|
||||
pq_64bit_free(&(item->priority));
|
||||
OPENSSL_free(item);
|
||||
}
|
||||
|
||||
@@ -124,7 +122,10 @@ pqueue_insert(pqueue_s *pq, pitem *item)
|
||||
next != NULL;
|
||||
curr = next, next = next->next)
|
||||
{
|
||||
if (pq_64bit_gt(&(next->priority), &(item->priority)))
|
||||
/* we can compare 64-bit value in big-endian encoding
|
||||
* with memcmp:-) */
|
||||
int cmp = memcmp(next->priority, item->priority,8);
|
||||
if (cmp > 0) /* next > item */
|
||||
{
|
||||
item->next = next;
|
||||
|
||||
@@ -135,8 +136,8 @@ pqueue_insert(pqueue_s *pq, pitem *item)
|
||||
|
||||
return item;
|
||||
}
|
||||
/* duplicates not allowed */
|
||||
if (pq_64bit_eq(&(item->priority), &(next->priority)))
|
||||
|
||||
else if (cmp == 0) /* duplicates not allowed */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -164,7 +165,7 @@ pqueue_pop(pqueue_s *pq)
|
||||
}
|
||||
|
||||
pitem *
|
||||
pqueue_find(pqueue_s *pq, PQ_64BIT priority)
|
||||
pqueue_find(pqueue_s *pq, unsigned char *prio64be)
|
||||
{
|
||||
pitem *next, *prev = NULL;
|
||||
pitem *found = NULL;
|
||||
@@ -175,7 +176,7 @@ pqueue_find(pqueue_s *pq, PQ_64BIT priority)
|
||||
for ( next = pq->items; next->next != NULL;
|
||||
prev = next, next = next->next)
|
||||
{
|
||||
if ( pq_64bit_eq(&(next->priority), &priority))
|
||||
if ( memcmp(next->priority, prio64be,8) == 0)
|
||||
{
|
||||
found = next;
|
||||
break;
|
||||
@@ -183,7 +184,7 @@ pqueue_find(pqueue_s *pq, PQ_64BIT priority)
|
||||
}
|
||||
|
||||
/* check the one last node */
|
||||
if ( pq_64bit_eq(&(next->priority), &priority))
|
||||
if ( memcpy(next->priority, prio64be,8) ==0)
|
||||
found = next;
|
||||
|
||||
if ( ! found)
|
||||
@@ -199,7 +200,6 @@ pqueue_find(pqueue_s *pq, PQ_64BIT priority)
|
||||
return found;
|
||||
}
|
||||
|
||||
#if PQ_64BIT_IS_INTEGER
|
||||
void
|
||||
pqueue_print(pqueue_s *pq)
|
||||
{
|
||||
@@ -207,11 +207,14 @@ pqueue_print(pqueue_s *pq)
|
||||
|
||||
while(item != NULL)
|
||||
{
|
||||
printf("item\t%lld\n", item->priority);
|
||||
printf("item\t%02x%02x%02x%02x%02x%02x%02x%02x\n",
|
||||
item->priority[0],item->priority[1],
|
||||
item->priority[2],item->priority[3],
|
||||
item->priority[4],item->priority[5],
|
||||
item->priority[6],item->priority[7]);
|
||||
item = item->next;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
pitem *
|
||||
pqueue_iterator(pqueue_s *pq)
|
||||
|
Reference in New Issue
Block a user