lib: xpc: add support for event messages
This commit is contained in:
@@ -17,10 +17,21 @@ typedef struct xpc_msg_header {
|
|||||||
|
|
||||||
typedef struct xpc_msg {
|
typedef struct xpc_msg {
|
||||||
xpc_endpoint_t msg_sender;
|
xpc_endpoint_t msg_sender;
|
||||||
xpc_msg_header_t msg_header;
|
kern_msg_type_t msg_type;
|
||||||
size_t msg_handles_count;
|
|
||||||
|
|
||||||
kern_msg_handle_t msg_handles[KERN_MSG_MAX_HANDLES];
|
union {
|
||||||
|
/* msg_type = KERN_MSG_TYPE_DATA */
|
||||||
|
struct {
|
||||||
|
xpc_msg_header_t msg_header;
|
||||||
|
size_t msg_handles_count;
|
||||||
|
kern_msg_handle_t msg_handles[KERN_MSG_MAX_HANDLES];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* msg_type = KERN_MSG_TYPE_EVENT */
|
||||||
|
struct {
|
||||||
|
kern_msg_event_type_t msg_event;
|
||||||
|
};
|
||||||
|
};
|
||||||
} xpc_msg_t;
|
} xpc_msg_t;
|
||||||
|
|
||||||
extern void xpc_msg_header_init(
|
extern void xpc_msg_header_init(
|
||||||
|
|||||||
@@ -54,14 +54,24 @@ static kern_status_t __msg_recv(
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!xpc_msg_header_validate(&out->msg_header)) {
|
switch (msg.msg_type) {
|
||||||
return KERN_INVALID_ARGUMENT;
|
case KERN_MSG_TYPE_DATA:
|
||||||
|
if (!xpc_msg_header_validate(&out->msg_header)) {
|
||||||
|
return KERN_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case KERN_MSG_TYPE_EVENT:
|
||||||
|
out->msg_event = msg.msg_event;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
out->msg_sender.e_channel = channel;
|
out->msg_sender.e_channel = channel;
|
||||||
out->msg_sender.e_task = msg.msg_sender;
|
out->msg_sender.e_task = msg.msg_sender;
|
||||||
out->msg_sender.e_port = msg.msg_endpoint;
|
out->msg_sender.e_port = msg.msg_endpoint;
|
||||||
out->msg_sender.e_msg = msg.msg_id;
|
out->msg_sender.e_msg = msg.msg_id;
|
||||||
|
out->msg_type = msg.msg_type;
|
||||||
|
|
||||||
return KERN_OK;
|
return KERN_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user