summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--radsecproxy.c19
-rw-r--r--radsecproxy.h1
2 files changed, 14 insertions, 6 deletions
diff --git a/radsecproxy.c b/radsecproxy.c
index 5abdd16..4f16987 100644
--- a/radsecproxy.c
+++ b/radsecproxy.c
@@ -494,17 +494,24 @@ void sendrq(struct server *to, struct client *from, struct request *rq) {
int i;
pthread_mutex_lock(&to->newrq_mutex);
-
- /* should search from where inserted last */
- for (i = 0; i < MAX_REQUESTS; i++)
+ /* might simplify if only try nextid, might be ok */
+ for (i = to->nextid; i < MAX_REQUESTS; i++)
if (!to->requests[i].buf)
break;
if (i == MAX_REQUESTS) {
- printf("No room in queue, dropping request\n");
- pthread_mutex_unlock(&to->newrq_mutex);
- return;
+ for (i = 0; i < to->nextid; i++)
+ if (!to->requests[i].buf)
+ break;
+ if (i == to->nextid) {
+ printf("No room in queue, dropping request\n");
+ pthread_mutex_unlock(&to->newrq_mutex);
+ return;
+ }
}
+
+ to->nextid = i + 1;
rq->buf[1] = (char)i;
+ printf("sendrq: inserting packet with id %d in queue for %s\n", i, to->peer.host);
if (!createmessageauth(rq->buf, rq->messageauthattrval, to->peer.secret))
return;
diff --git a/radsecproxy.h b/radsecproxy.h
index e3fc1cd..7ad2002 100644
--- a/radsecproxy.h
+++ b/radsecproxy.h
@@ -95,6 +95,7 @@ struct server {
pthread_t clientth;
struct timeval lastconnecttry;
uint8_t connectionok;
+ int nextid;
struct request *requests;
uint8_t newrq;
pthread_mutex_t newrq_mutex;