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 {
|
||||
xpc_endpoint_t msg_sender;
|
||||
xpc_msg_header_t msg_header;
|
||||
size_t msg_handles_count;
|
||||
kern_msg_type_t msg_type;
|
||||
|
||||
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;
|
||||
|
||||
extern void xpc_msg_header_init(
|
||||
|
||||
@@ -54,14 +54,24 @@ static kern_status_t __msg_recv(
|
||||
return status;
|
||||
}
|
||||
|
||||
if (!xpc_msg_header_validate(&out->msg_header)) {
|
||||
return KERN_INVALID_ARGUMENT;
|
||||
switch (msg.msg_type) {
|
||||
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_task = msg.msg_sender;
|
||||
out->msg_sender.e_port = msg.msg_endpoint;
|
||||
out->msg_sender.e_msg = msg.msg_id;
|
||||
out->msg_type = msg.msg_type;
|
||||
|
||||
return KERN_OK;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user