aboutsummaryrefslogtreecommitdiffstats
path: root/src/frontends/android/jni/libandroidbridge/backend/android_service.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-08-08 14:49:52 +0200
committerTobias Brunner <tobias@strongswan.org>2012-08-13 11:09:34 +0200
commit3b3cf0c87ae5a73fad48933ff070f4b8ec919d98 (patch)
treefecc5df35c7005772ea031e9a87b42eaa6e50df8 /src/frontends/android/jni/libandroidbridge/backend/android_service.c
parent30ba2ff7771e84a8ac7d08089945b1e6fa5cca38 (diff)
downloadstrongswan-3b3cf0c87ae5a73fad48933ff070f4b8ec919d98.tar.bz2
strongswan-3b3cf0c87ae5a73fad48933ff070f4b8ec919d98.tar.xz
Add simple callbacks to receive/send ESP packets via libipsec/receiver.
Diffstat (limited to 'src/frontends/android/jni/libandroidbridge/backend/android_service.c')
-rw-r--r--src/frontends/android/jni/libandroidbridge/backend/android_service.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/frontends/android/jni/libandroidbridge/backend/android_service.c b/src/frontends/android/jni/libandroidbridge/backend/android_service.c
index 40ca86ac5..bd28e7de9 100644
--- a/src/frontends/android/jni/libandroidbridge/backend/android_service.c
+++ b/src/frontends/android/jni/libandroidbridge/backend/android_service.c
@@ -21,6 +21,7 @@
#include <daemon.h>
#include <library.h>
+#include <ipsec.h>
#include <processing/jobs/callback_job.h>
#include <threading/rwlock.h>
@@ -71,6 +72,25 @@ struct private_android_service_t {
};
/**
+ * Outbound callback
+ */
+static void send_esp(void *data, esp_packet_t *packet)
+{
+ charon->sender->send_no_marker(charon->sender, (packet_t*)packet);
+}
+
+/**
+ * Receiver callback
+ */
+static void receiver_esp_cb(void *data, packet_t *packet)
+{
+ esp_packet_t *esp_packet;
+
+ esp_packet = esp_packet_create_from_packet(packet);
+ ipsec->processor->queue_inbound(ipsec->processor, esp_packet);
+}
+
+/**
* Add a route to the TUN device builder
*/
static bool add_route(vpnservice_builder_t *builder, host_t *net,
@@ -156,6 +176,12 @@ static bool setup_tun_device(private_android_service_t *this,
this->lock->unlock(this->lock);
DBG1(DBG_DMN, "successfully created TUN device");
+
+ charon->receiver->add_esp_cb(charon->receiver,
+ (receiver_esp_cb_t)receiver_esp_cb, NULL);
+ ipsec->processor->register_outbound(ipsec->processor,
+ (ipsec_outbound_cb_t)send_esp, NULL);
+
return TRUE;
}
@@ -175,6 +201,11 @@ static void close_tun_device(private_android_service_t *this)
tunfd = this->tunfd;
this->tunfd = -1;
this->lock->unlock(this->lock);
+
+ ipsec->processor->unregister_outbound(ipsec->processor,
+ (ipsec_outbound_cb_t)send_esp);
+ charon->receiver->del_esp_cb(charon->receiver,
+ (receiver_esp_cb_t)receiver_esp_cb);
close(tunfd);
}