From: Martin Willi Date: Fri, 27 Nov 2009 08:34:38 +0000 (+0100) Subject: Added a get_sa() method to the bus, allowing a thread to lookup its IKE_SA X-Git-Tag: 4.3.6~163 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fb1ae8da5211e758299f028c3fcd06dbb60670b7;p=thirdparty%2Fstrongswan.git Added a get_sa() method to the bus, allowing a thread to lookup its IKE_SA --- diff --git a/src/charon/bus/bus.c b/src/charon/bus/bus.c index 7075586e16..6a72f4a9ae 100644 --- a/src/charon/bus/bus.c +++ b/src/charon/bus/bus.c @@ -243,6 +243,14 @@ static void set_sa(private_bus_t *this, ike_sa_t *ike_sa) pthread_setspecific(this->thread_sa, 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 */ @@ -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; diff --git a/src/charon/bus/bus.h b/src/charon/bus/bus.h index 7270c5c670..86d1e270ab 100644 --- a/src/charon/bus/bus.h +++ b/src/charon/bus/bus.h @@ -190,6 +190,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. *