Added a get_sa() method to the bus, allowing a thread to lookup its IKE_SA
authorMartin Willi <martin@strongswan.org>
Fri, 27 Nov 2009 08:34:38 +0000 (09:34 +0100)
committerMartin Willi <martin@strongswan.org>
Mon, 30 Nov 2009 08:27:14 +0000 (09:27 +0100)
src/charon/bus/bus.c
src/charon/bus/bus.h

index 7075586..6a72f4a 100644 (file)
@@ -244,6 +244,14 @@ static void set_sa(private_bus_t *this, ike_sa_t *ike_sa)
 }
 
 /**
+ * Implementation of bus_t.get_sa
+ */
+static ike_sa_t* get_sa(private_bus_t *this)
+{
+       return pthread_getspecific(this->thread_sa);
+}
+
+/**
  * data associated to a signal, passed to callback
  */
 typedef struct {
@@ -744,6 +752,7 @@ bus_t *bus_create()
        this->public.remove_listener = (void(*)(bus_t*,listener_t*))remove_listener;
        this->public.listen = (void(*)(bus_t*, listener_t *listener, job_t *job))listen_;
        this->public.set_sa = (void(*)(bus_t*,ike_sa_t*))set_sa;
+       this->public.get_sa = (ike_sa_t*(*)(bus_t*))get_sa;
        this->public.log = (void(*)(bus_t*,debug_t,level_t,char*,...))log_;
        this->public.vlog = (void(*)(bus_t*,debug_t,level_t,char*,va_list))vlog;
        this->public.alert = (void(*)(bus_t*, alert_t alert, ...))alert;
index 7270c5c..86d1e27 100644 (file)
@@ -191,6 +191,16 @@ struct bus_t {
        void (*set_sa) (bus_t *this, ike_sa_t *ike_sa);
 
        /**
+        * Get the IKE_SA the calling thread is currently using.
+        *
+        * If a thread currently does not know what IKE_SA it is processing,
+        * it can call get_sa() to look up the SA set during checkout via set_sa().
+        *
+        * @return                      registered ike_sa, NULL if none registered
+        */
+       ike_sa_t* (*get_sa)(bus_t *this);
+
+       /**
         * Send a log message to the bus.
         *
         * The signal specifies the type of the event occured. The format string