summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYouness Alaoui <youness.alaoui@collabora.co.uk>2009-03-31 15:17:43 -0400
committerYouness Alaoui <youness.alaoui@collabora.co.uk>2009-03-31 15:17:43 -0400
commit44bc11b124cfab8a829876cb0d3ba141a023ecb3 (patch)
treef95eae903c10a106f1826446fc64677acdd638c4
parented7e0e6d7387c294ca53fea5b6c80f465c495060 (diff)
downloadlibnice-44bc11b124cfab8a829876cb0d3ba141a023ecb3.tar.gz
Return 0 in stun_agent_finish_message if there is no more slots for saved ids
-rw-r--r--stun/stunagent.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/stun/stunagent.c b/stun/stunagent.c
index 3634422..fb8121c 100644
--- a/stun/stunagent.c
+++ b/stun/stunagent.c
@@ -500,10 +500,21 @@ size_t stun_agent_finish_message (StunAgent *agent, StunMessage *msg,
{
uint8_t *ptr;
uint32_t fpr;
- int i;
- StunTransactionId id;
+ int saved_id_idx = 0;
uint8_t md5[16];
+ if (stun_message_get_class (msg) == STUN_REQUEST) {
+ for (saved_id_idx = 0; saved_id_idx < STUN_AGENT_MAX_SAVED_IDS; saved_id_idx++) {
+ if (agent->sent_ids[saved_id_idx].valid == FALSE) {
+ break;
+ }
+ }
+ }
+ if (saved_id_idx == STUN_AGENT_MAX_SAVED_IDS) {
+ stun_debug ("Saved ids full");
+ return 0;
+ }
+
if (msg->key != NULL) {
key = msg->key;
key_len = msg->key_len;
@@ -602,20 +613,14 @@ size_t stun_agent_finish_message (StunAgent *agent, StunMessage *msg,
if (stun_message_get_class (msg) == STUN_REQUEST) {
- for (i = 0; i < STUN_AGENT_MAX_SAVED_IDS; i++) {
- if (agent->sent_ids[i].valid == FALSE) {
- stun_message_id (msg, id);
- memcpy (agent->sent_ids[i].id, id, sizeof(StunTransactionId));
- agent->sent_ids[i].method = stun_message_get_method (msg);
- agent->sent_ids[i].key = (uint8_t *) key;
- agent->sent_ids[i].key_len = key_len;
- memcpy (agent->sent_ids[i].long_term_key, msg->long_term_key,
- sizeof(msg->long_term_key));
- agent->sent_ids[i].long_term_valid = msg->long_term_valid;
- agent->sent_ids[i].valid = TRUE;
- break;
- }
- }
+ stun_message_id (msg, agent->sent_ids[saved_id_idx].id);
+ agent->sent_ids[saved_id_idx].method = stun_message_get_method (msg);
+ agent->sent_ids[saved_id_idx].key = (uint8_t *) key;
+ agent->sent_ids[saved_id_idx].key_len = key_len;
+ memcpy (agent->sent_ids[saved_id_idx].long_term_key, msg->long_term_key,
+ sizeof(msg->long_term_key));
+ agent->sent_ids[saved_id_idx].long_term_valid = msg->long_term_valid;
+ agent->sent_ids[saved_id_idx].valid = TRUE;
}
msg->key = (uint8_t *) key;