2
Copyright (C) 2004-2008 Grame
4
This program is free software; you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; either version 2 of the License, or
7
(at your option) any later version.
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
#include "JackServer.h"
21
#include "JackNotification.h"
22
#include "JackLockedEngine.h"
23
#include "JackRPCEngine.h"
24
#include "JackMachServerChannel.h"
25
#include "JackException.h"
34
#define rpc_type kern_return_t // for astyle
36
rpc_type server_rpc_jack_client_check(mach_port_t private_port, client_name_t name, client_name_t name_res, int protocol, int options, int* status, int* result)
38
jack_log("rpc_jack_client_check");
39
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
41
channel->ClientCheck((char*)name, (char*)name_res, protocol, options, status, result);
45
rpc_type server_rpc_jack_client_open(mach_port_t server_port, client_name_t name, int pid, mach_port_t* private_port, int* shared_engine, int* shared_client, int* shared_graph, int* result)
47
jack_log("rpc_jack_client_open name = %s", name);
48
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[server_port];
50
channel->ClientOpen((char*)name, pid, private_port, shared_engine, shared_client, shared_graph, result);
54
rpc_type server_rpc_jack_client_close(mach_port_t private_port, int refnum, int* result)
56
jack_log("rpc_jack_client_close");
57
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
59
channel->ClientClose(private_port, refnum);
64
rpc_type server_rpc_jack_client_activate(mach_port_t private_port, int refnum, int is_real_time, int* result)
66
jack_log("rpc_jack_client_activate");
67
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
69
*result = channel->GetEngine()->ClientActivate(refnum, is_real_time);
73
rpc_type server_rpc_jack_client_deactivate(mach_port_t private_port, int refnum, int* result)
75
jack_log("rpc_jack_client_deactivate");
76
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
78
*result = channel->GetEngine()->ClientDeactivate(refnum);
86
rpc_type server_rpc_jack_port_register(mach_port_t private_port, int refnum, client_port_name_t name, client_port_type_t type, unsigned int flags, unsigned int buffer_size, unsigned int* port_index, int* result)
88
jack_log("rpc_jack_port_register ref = %d name = %s", refnum, name);
89
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
91
*result = channel->GetEngine()->PortRegister(refnum, name, type, flags, buffer_size, port_index);
95
rpc_type server_rpc_jack_port_unregister(mach_port_t private_port, int refnum, int port, int* result)
97
jack_log("rpc_jack_port_unregister ref = %d port = %d ", refnum, port);
98
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
100
*result = channel->GetEngine()->PortUnRegister(refnum, port);
104
rpc_type server_rpc_jack_port_connect_name(mach_port_t private_port, int refnum, client_port_name_t src, client_port_name_t dst, int* result)
106
jack_log("rpc_jack_port_connect_name");
107
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
109
*result = channel->GetEngine()->PortConnect(refnum, src, dst);
113
rpc_type server_rpc_jack_port_disconnect_name(mach_port_t private_port, int refnum, client_port_name_t src, client_port_name_t dst, int* result)
115
jack_log("rpc_jack_port_disconnect_name");
116
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
118
*result = channel->GetEngine()->PortDisconnect(refnum, src, dst);
122
rpc_type server_rpc_jack_port_connect(mach_port_t private_port, int refnum, int src, int dst, int* result)
124
jack_log("rpc_jack_port_connect");
125
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
127
*result = channel->GetEngine()->PortConnect(refnum, src, dst);
131
rpc_type server_rpc_jack_port_disconnect(mach_port_t private_port, int refnum, int src, int dst, int* result)
133
jack_log("rpc_jack_port_disconnect");
134
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
136
*result = channel->GetEngine()->PortDisconnect(refnum, src, dst);
140
rpc_type server_rpc_jack_port_rename(mach_port_t private_port, int refnum, int port, client_port_name_t name, int* result)
142
jack_log("server_rpc_jack_port_rename");
143
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
145
*result = channel->GetEngine()->PortRename(refnum, port, name);
149
//------------------------
150
// Buffer size, freewheel
151
//------------------------
153
rpc_type server_rpc_jack_set_buffer_size(mach_port_t private_port, int buffer_size, int* result)
155
jack_log("server_rpc_jack_set_buffer_size");
156
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
158
*result = channel->GetServer()->SetBufferSize(buffer_size);
162
rpc_type server_rpc_jack_set_freewheel(mach_port_t private_port, int onoff, int* result)
164
jack_log("server_rpc_jack_set_freewheel");
165
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
167
*result = channel->GetServer()->SetFreewheel(onoff);
171
//----------------------
172
// Transport management
173
//----------------------
175
rpc_type server_rpc_jack_release_timebase(mach_port_t private_port, int refnum, int* result)
177
jack_log("server_rpc_jack_release_timebase");
178
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
180
*result = channel->GetServer()->ReleaseTimebase(refnum);
184
rpc_type server_rpc_jack_set_timebase_callback(mach_port_t private_port, int refnum, int conditional, int* result)
186
jack_log("server_rpc_jack_set_timebase_callback");
187
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
189
*result = channel->GetServer()->SetTimebaseCallback(refnum, conditional);
197
rpc_type server_rpc_jack_get_internal_clientname(mach_port_t private_port, int refnum, int int_ref, client_name_t name_res, int* result)
199
jack_log("server_rpc_jack_get_internal_clientname");
200
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
202
*result = channel->GetServer()->GetEngine()->GetInternalClientName(int_ref, (char*)name_res);
206
rpc_type server_rpc_jack_internal_clienthandle(mach_port_t private_port, int refnum, client_name_t client_name, int* status, int* int_ref, int* result)
208
jack_log("server_rpc_jack_internal_clienthandle");
209
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
211
*result = channel->GetServer()->GetEngine()->InternalClientHandle(client_name, status, int_ref);
215
rpc_type server_rpc_jack_internal_clientload(mach_port_t private_port, int refnum, client_name_t client_name, so_name_t so_name, objet_data_t objet_data, int options, int* status, int* int_ref, int* result)
217
jack_log("server_rpc_jack_internal_clientload");
218
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
220
*result = channel->GetServer()->InternalClientLoad(client_name, so_name, objet_data, options, int_ref, status);
224
rpc_type server_rpc_jack_internal_clientunload(mach_port_t private_port, int refnum, int int_ref, int* status, int* result)
226
jack_log("server_rpc_jack_internal_clientunload");
227
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
229
*result = channel->GetServer()->GetEngine()->InternalClientUnload(int_ref, status);
237
rpc_type server_rpc_jack_client_rt_notify(mach_port_t server_port, int refnum, int notify, int value)
239
jack_log("rpc_jack_client_rt_notify ref = %d notify = %d value = %d", refnum, notify, value);
240
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[server_port];
242
assert(channel->GetServer());
244
if (notify == kQUIT) {
245
throw JackQuitException();
247
channel->GetServer()->Notify(refnum, notify, value);