xpc: forward some risen alerts over XPC to App
This commit is contained in:
@@ -234,6 +234,62 @@ METHOD(xpc_channels_t, add, void,
|
|||||||
xpc_connection_resume(conn);
|
xpc_connection_resume(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
METHOD(listener_t, alert, bool,
|
||||||
|
private_xpc_channels_t *this, ike_sa_t *ike_sa, alert_t alert, va_list args)
|
||||||
|
{
|
||||||
|
const char *desc;
|
||||||
|
|
||||||
|
switch (alert)
|
||||||
|
{
|
||||||
|
case ALERT_LOCAL_AUTH_FAILED:
|
||||||
|
desc = "local-auth";
|
||||||
|
break;
|
||||||
|
case ALERT_PEER_AUTH_FAILED:
|
||||||
|
desc = "remote-auth";
|
||||||
|
break;
|
||||||
|
case ALERT_PEER_ADDR_FAILED:
|
||||||
|
desc = "dns";
|
||||||
|
break;
|
||||||
|
case ALERT_PEER_INIT_UNREACHABLE:
|
||||||
|
desc = "unreachable";
|
||||||
|
break;
|
||||||
|
case ALERT_RETRANSMIT_SEND_TIMEOUT:
|
||||||
|
desc = "timeout";
|
||||||
|
break;
|
||||||
|
case ALERT_PROPOSAL_MISMATCH_IKE:
|
||||||
|
case ALERT_PROPOSAL_MISMATCH_CHILD:
|
||||||
|
desc = "proposal-mismatch";
|
||||||
|
break;
|
||||||
|
case ALERT_TS_MISMATCH:
|
||||||
|
desc = "ts-mismatch";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (ike_sa)
|
||||||
|
{
|
||||||
|
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", "alert");
|
||||||
|
xpc_dictionary_set_string(msg, "alert", desc);
|
||||||
|
xpc_connection_send_message(entry->conn, msg);
|
||||||
|
xpc_release(msg);
|
||||||
|
}
|
||||||
|
this->lock->unlock(this->lock);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
METHOD(listener_t, ike_rekey, bool,
|
METHOD(listener_t, ike_rekey, bool,
|
||||||
private_xpc_channels_t *this, ike_sa_t *old, ike_sa_t *new)
|
private_xpc_channels_t *this, ike_sa_t *old, ike_sa_t *new)
|
||||||
{
|
{
|
||||||
@@ -462,6 +518,7 @@ xpc_channels_t *xpc_channels_create()
|
|||||||
INIT(this,
|
INIT(this,
|
||||||
.public = {
|
.public = {
|
||||||
.listener = {
|
.listener = {
|
||||||
|
.alert = _alert,
|
||||||
.ike_updown = _ike_updown,
|
.ike_updown = _ike_updown,
|
||||||
.ike_rekey = _ike_rekey,
|
.ike_rekey = _ike_rekey,
|
||||||
.ike_state_change = _ike_state_change,
|
.ike_state_change = _ike_state_change,
|
||||||
|
|||||||
Reference in New Issue
Block a user