From f87be530d67823a5d82367468e33d58b201ebee1 Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@nordu.net>
Date: Sun, 6 Mar 2011 14:30:14 +0100
Subject: Don't free config object until we destroy the context.

---
 lib/include/radsec/radsec-impl.h | 2 ++
 1 file changed, 2 insertions(+)

(limited to 'lib/include/radsec')

diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h
index 932e5d2..963c821 100644
--- a/lib/include/radsec/radsec-impl.h
+++ b/lib/include/radsec/radsec-impl.h
@@ -5,6 +5,7 @@
 
 #include <freeradius/libradius.h>
 #include <event2/util.h>
+#include <confuse.h>
 #if defined(RS_ENABLE_TLS)
 #include <openssl/ssl.h>
 #endif
@@ -61,6 +62,7 @@ struct rs_context {
     struct rs_alloc_scheme alloc_scheme;
     struct rs_error *err;
     fr_randctx fr_randctx;
+    cfg_t *cfg;
 };
 
 struct rs_connection {
-- 
cgit v1.1


From 7636505962a348d9564e53922834dc6df1274653 Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@nordu.net>
Date: Sun, 6 Mar 2011 14:46:57 +0100
Subject: UDP w/o bufferevents, part 1.

Sending, no retransmitting and no receiving.
---
 lib/include/radsec/radsec-impl.h | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

(limited to 'lib/include/radsec')

diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h
index 963c821..f8904ac 100644
--- a/lib/include/radsec/radsec-impl.h
+++ b/lib/include/radsec/radsec-impl.h
@@ -69,7 +69,6 @@ struct rs_connection {
     struct rs_context *ctx;
     struct rs_realm *realm;	/* Owned by ctx.  */
     struct event_base *evb;	/* Event base.  */
-    struct bufferevent *bev;	/* Buffer event.  */
     struct event *tev;		/* Timeout event.  */
     struct rs_credentials transport_credentials;
     struct rs_conn_callbacks callbacks;
@@ -80,10 +79,17 @@ struct rs_connection {
     char is_connecting;		/* FIXME: replace with a single state member */
     char is_connected;		/* FIXME: replace with a single state member */
     int fd;			/* Socket.  */
-    int tryagain;
-    int nextid;
+    int tryagain;		/* For server failover.  */
+    int nextid;			/* Next RADIUS packet identifier.  */
     int user_dispatch_flag : 1;	/* User does the dispatching.  */
+    /* TCP transport specifics.  */
+    struct bufferevent *bev;	/* Buffer event.  */
+    /* UDP transport specifics.  */
+    struct event *wev;		/* Write event (for UDP).  */
+    struct event *rev;		/* Read event (for UDP).  */
+    struct rs_packet *out_queue; /* Queue for outgoing UDP packets.  */
 #if defined(RS_ENABLE_TLS)
+    /* TLS specifics.  */
     SSL_CTX *tls_ctx;
     SSL *tls_ssl;
 #endif
@@ -97,6 +103,7 @@ struct rs_packet {
     struct rs_packet *original;
     char valid_flag;
     char written_flag;
+    struct rs_packet *next;	/* Used for UDP output queue.  */
 };
 
 struct rs_attr {
-- 
cgit v1.1


From 43d0740f143ba737a1fc5ace3a323ffa8b09e7ae Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@nordu.net>
Date: Sun, 6 Mar 2011 17:04:54 +0100
Subject: request: Save callers user_data and do invoke callers callbacks.

---
 lib/include/radsec/request-impl.h | 1 +
 1 file changed, 1 insertion(+)

(limited to 'lib/include/radsec')

diff --git a/lib/include/radsec/request-impl.h b/lib/include/radsec/request-impl.h
index 4f50d44..19aef66 100644
--- a/lib/include/radsec/request-impl.h
+++ b/lib/include/radsec/request-impl.h
@@ -11,6 +11,7 @@ struct rs_request
   struct rs_packet *req_msg;
   struct rs_packet *resp_msg;
   struct rs_conn_callbacks saved_cb;
+  void *saved_user_data;
 };
 
 #if defined (__cplusplus)
-- 
cgit v1.1


From cbcaa6a7c8f8a6704f6b4a68f260020957214a07 Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@nordu.net>
Date: Mon, 7 Mar 2011 15:23:40 +0100
Subject: Move verification of response packets up to a level where it makes
 sense.

Replace the user_dispatch_flag on connections with
conn_user_dispatch_p().

Remove the 'original' member from packet and instead have an upper
layer verify.

Rename packet valid_flag --> received_flag to reflect that we don't
verify.

Move _close_conn() --> conn_close().

Move packet flags into a single unsigned int, for portability.

(_read_packet): Don't verify packet.

(rs_conn_receive_packet): Don't touch PKT_OUT if there isn't a packet.

(rs_conn_receive_packet): Verify packet using packet_verify_response().
---
 lib/include/radsec/radsec-impl.h | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

(limited to 'lib/include/radsec')

diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h
index f8904ac..e790ccf 100644
--- a/lib/include/radsec/radsec-impl.h
+++ b/lib/include/radsec/radsec-impl.h
@@ -81,7 +81,6 @@ struct rs_connection {
     int fd;			/* Socket.  */
     int tryagain;		/* For server failover.  */
     int nextid;			/* Next RADIUS packet identifier.  */
-    int user_dispatch_flag : 1;	/* User does the dispatching.  */
     /* TCP transport specifics.  */
     struct bufferevent *bev;	/* Buffer event.  */
     /* UDP transport specifics.  */
@@ -95,14 +94,17 @@ struct rs_connection {
 #endif
 };
 
+enum rs_packet_flags {
+    rs_packet_hdr_read_flag,
+    rs_packet_received_flag,
+    rs_packet_sent_flag,
+};
+
 struct rs_packet {
     struct rs_connection *conn;
-    char hdr_read_flag;
-    uint8_t hdr[4];
+    unsigned int flags;
+    uint8_t hdr[RS_HEADER_LEN];
     RADIUS_PACKET *rpkt;
-    struct rs_packet *original;
-    char valid_flag;
-    char written_flag;
     struct rs_packet *next;	/* Used for UDP output queue.  */
 };
 
-- 
cgit v1.1


From 657eec7ee5a276521eb456bf648878935e794b6e Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@nordu.net>
Date: Tue, 8 Mar 2011 13:32:10 +0100
Subject: Clean up struct rs_error somewhat.

More to be done here!
---
 lib/include/radsec/radsec-impl.h | 1 -
 1 file changed, 1 deletion(-)

(limited to 'lib/include/radsec')

diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h
index e790ccf..a924fc9 100644
--- a/lib/include/radsec/radsec-impl.h
+++ b/lib/include/radsec/radsec-impl.h
@@ -32,7 +32,6 @@ struct rs_credentials {
 
 struct rs_error {
     int code;
-    char *msg;
     char buf[1024];
 };
 
-- 
cgit v1.1


From d464ebb9235fe78e6588e95d4d3333d5ee95ca48 Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@nordu.net>
Date: Tue, 8 Mar 2011 13:37:46 +0100
Subject: Timeout implemented in request objects, supported by TCP.

TODO: UDP.
---
 lib/include/radsec/radsec-impl.h | 1 +
 lib/include/radsec/radsec.h      | 9 ++++++---
 2 files changed, 7 insertions(+), 3 deletions(-)

(limited to 'lib/include/radsec')

diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h
index a924fc9..49f9a35 100644
--- a/lib/include/radsec/radsec-impl.h
+++ b/lib/include/radsec/radsec-impl.h
@@ -75,6 +75,7 @@ struct rs_connection {
     struct rs_peer *peers;
     struct rs_peer *active_peer;
     struct rs_error *err;
+    struct timeval timeout;
     char is_connecting;		/* FIXME: replace with a single state member */
     char is_connected;		/* FIXME: replace with a single state member */
     int fd;			/* Socket.  */
diff --git a/lib/include/radsec/radsec.h b/lib/include/radsec/radsec.h
index fcd391d..5f8f4db 100644
--- a/lib/include/radsec/radsec.h
+++ b/lib/include/radsec/radsec.h
@@ -3,6 +3,7 @@
 /* See the file COPYING for licensing information.  */
 
 #include <unistd.h>
+#include <sys/time.h>
 
 enum rs_err_code {
     RSE_OK = 0,
@@ -21,9 +22,10 @@ enum rs_err_code {
     RSE_INTERNAL = 13,
     RSE_SSLERR = 14,		/* OpenSSL error.  */
     RSE_INVALID_PKT = 15,
-    RSE_TIMEOUT_CONN = 16,
-    RSE_INVAL = 17,
-    RSE_TIMEOUT_IO = 18,
+    RSE_TIMEOUT_CONN = 16,	/* Connection timeout.  */
+    RSE_INVAL = 17,		/* Invalid argument.  */
+    RSE_TIMEOUT_IO = 18,	/* I/O timeout.  */
+    RSE_TIMEOUT = 19,		/* High level timeout.  */
 };
 
 enum rs_conn_type {
@@ -111,6 +113,7 @@ int rs_conn_receive_packet(struct rs_connection *conn,
 			   struct rs_packet *request,
 			   struct rs_packet **pkt_out);
 int rs_conn_fd(struct rs_connection *conn);
+void rs_conn_set_timeout(struct rs_connection *conn, struct timeval *tv);
 
 /* Peer -- client and server.  */
 int rs_peer_create(struct rs_connection *conn, struct rs_peer **peer_out);
-- 
cgit v1.1


From 6f3ae93eb1a5c4e352b42a9fae9b6f544a2e341a Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@nordu.net>
Date: Tue, 8 Mar 2011 14:27:59 +0100
Subject: Update rs_err_msg() prototype.

Also, rename enum rs_err_code to not collide with the function named
the same.
---
 lib/include/radsec/radsec.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'lib/include/radsec')

diff --git a/lib/include/radsec/radsec.h b/lib/include/radsec/radsec.h
index 5f8f4db..f620fed 100644
--- a/lib/include/radsec/radsec.h
+++ b/lib/include/radsec/radsec.h
@@ -5,7 +5,7 @@
 #include <unistd.h>
 #include <sys/time.h>
 
-enum rs_err_code {
+enum rs_error_code {
     RSE_OK = 0,
     RSE_NOMEM = 1,
     RSE_NOSYS = 2,
@@ -167,7 +167,7 @@ int rs_err_conn_push_fl(struct rs_connection *conn,
 struct rs_error *rs_err_conn_pop(struct rs_connection *conn);
 int rs_err_conn_peek_code (struct rs_connection *conn);
 void rs_err_free(struct rs_error *err);
-char *rs_err_msg(struct rs_error *err, int dofree_flag);
+char *rs_err_msg(struct rs_error *err);
 int rs_err_code(struct rs_error *err, int dofree_flag);
 
 #if defined (__cplusplus)
-- 
cgit v1.1


From fac0219dad91c574417f78ec674aa0dd10949e15 Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@nordu.net>
Date: Wed, 9 Mar 2011 10:14:20 +0100
Subject: Rename and move around a few helper functions.

---
 lib/include/radsec/radsec-impl.h | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

(limited to 'lib/include/radsec')

diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h
index 49f9a35..9bcd208 100644
--- a/lib/include/radsec/radsec-impl.h
+++ b/lib/include/radsec/radsec-impl.h
@@ -113,18 +113,11 @@ struct rs_attr {
     VALUE_PAIR *vp;
 };
 
-/* Nonpublic functions.  */
-struct rs_error *_rs_resolv(struct evutil_addrinfo **addr,
-			    rs_conn_type_t type, const char *hostname,
+/* Nonpublic functions (in radsec.c -- FIXME: move?).  */
+struct rs_error *rs_resolv (struct evutil_addrinfo **addr,
+			    rs_conn_type_t type,
+			    const char *hostname,
 			    const char *service);
-struct rs_peer *_rs_peer_create(struct rs_context *ctx,
-				struct rs_peer **rootp);
-struct rs_error *_rs_err_create(unsigned int code, const char *file,
-				int line, const char *fmt, ...);
-int _rs_err_conn_push_err(struct rs_connection *conn,
-			  struct rs_error *err);
-
-
 #if defined (__cplusplus)
 }
 #endif
-- 
cgit v1.1


From c4e2bd206bb9248843a8a4d9a945c5e49a188474 Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@nordu.net>
Date: Wed, 9 Mar 2011 10:16:27 +0100
Subject: Add RSE_DISCO.

---
 lib/include/radsec/radsec.h | 1 +
 1 file changed, 1 insertion(+)

(limited to 'lib/include/radsec')

diff --git a/lib/include/radsec/radsec.h b/lib/include/radsec/radsec.h
index f620fed..971fc17 100644
--- a/lib/include/radsec/radsec.h
+++ b/lib/include/radsec/radsec.h
@@ -26,6 +26,7 @@ enum rs_error_code {
     RSE_INVAL = 17,		/* Invalid argument.  */
     RSE_TIMEOUT_IO = 18,	/* I/O timeout.  */
     RSE_TIMEOUT = 19,		/* High level timeout.  */
+    RSE_DISCO = 20,
 };
 
 enum rs_conn_type {
-- 
cgit v1.1