xpc: send a "connecting" event when establishing a connection starts
authorMartin Willi <martin@revosec.ch>
Wed, 22 May 2013 15:22:47 +0000 (17:22 +0200)
committerMartin Willi <martin@revosec.ch>
Thu, 18 Jul 2013 10:17:56 +0000 (12:17 +0200)
src/frontends/osx/charon-xpc/xpc_channels.c

index 1310b37..92a1049 100644 (file)
@@ -254,6 +254,32 @@ METHOD(listener_t, ike_rekey, bool,
        return TRUE;
 }
 
+METHOD(listener_t, ike_state_change, bool,
+       private_xpc_channels_t *this, ike_sa_t *ike_sa, ike_sa_state_t state)
+{
+       if (state == IKE_CONNECTING)
+       {
+               entry_t *entry;
+               uintptr_t sa;
+
+               sa = ike_sa->get_unique_id(ike_sa);
+               this->lock->read_lock(this->lock);
+               entry = this->channels->get(this->channels, (void*)sa);
+               if (entry)
+               {
+                       xpc_object_t msg;
+
+                       msg = xpc_dictionary_create(NULL, NULL, 0);
+                       xpc_dictionary_set_string(msg, "type", "event");
+                       xpc_dictionary_set_string(msg, "event", "connecting");
+                       xpc_connection_send_message(entry->conn, msg);
+                       xpc_release(msg);
+               }
+               this->lock->unlock(this->lock);
+       }
+       return TRUE;
+}
+
 METHOD(listener_t, child_updown, bool,
        private_xpc_channels_t *this, ike_sa_t *ike_sa,
        child_sa_t *child_sa, bool up)
@@ -438,6 +464,7 @@ xpc_channels_t *xpc_channels_create()
                        .listener = {
                                .ike_updown = _ike_updown,
                                .ike_rekey = _ike_rekey,
+                               .ike_state_change = _ike_state_change,
                                .child_updown = _child_updown,
                        },
                        .add = _add,