jack2 codebase
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

235 lines
9.0KB

  1. /*
  2. Copyright (C) 2004-2006 Grame
  3. This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program; if not, write to the Free Software
  13. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  14. */
  15. #include "JackServer.h"
  16. #include "JackEngine.h"
  17. #include "JackRPCEngine.h"
  18. #include "JackMachServerChannel.h"
  19. #include <assert.h>
  20. using namespace Jack;
  21. //-------------------
  22. // Client management
  23. //-------------------
  24. #define rpc_type kern_return_t // for astyle
  25. 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)
  26. {
  27. JackLog("rpc_jack_client_check\n");
  28. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  29. assert(channel);
  30. channel->ClientCheck((char*)name, (char*)name_res, protocol, options, status, result);
  31. return KERN_SUCCESS;
  32. }
  33. rpc_type server_rpc_jack_client_open(mach_port_t server_port, client_name_t name, mach_port_t* private_port, int* shared_engine, int* shared_client, int* shared_graph, int* result)
  34. {
  35. JackLog("rpc_jack_client_new %s\n", name);
  36. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[server_port];
  37. assert(channel);
  38. channel->ClientOpen((char*)name, private_port, shared_engine, shared_client, shared_graph, result);
  39. return KERN_SUCCESS;
  40. }
  41. rpc_type server_rpc_jack_client_close(mach_port_t private_port, int refnum, int* result)
  42. {
  43. JackLog("rpc_jack_client_close\n");
  44. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  45. assert(channel);
  46. channel->ClientClose(private_port, refnum);
  47. *result = 0;
  48. return KERN_SUCCESS;
  49. }
  50. rpc_type server_rpc_jack_client_activate(mach_port_t private_port, int refnum, int* result)
  51. {
  52. JackLog("rpc_jack_client_activate\n");
  53. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  54. assert(channel);
  55. *result = channel->GetEngine()->ClientActivate(refnum);
  56. return KERN_SUCCESS;
  57. }
  58. rpc_type server_rpc_jack_client_deactivate(mach_port_t private_port, int refnum, int* result)
  59. {
  60. JackLog("rpc_jack_client_deactivate\n");
  61. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  62. assert(channel);
  63. *result = channel->GetEngine()->ClientDeactivate(refnum);
  64. return KERN_SUCCESS;
  65. }
  66. //-----------------
  67. // Port management
  68. //-----------------
  69. rpc_type server_rpc_jack_port_register(mach_port_t private_port, int refnum, client_port_name_t name, unsigned int flags, unsigned int buffer_size, jack_port_id_t* port_index, int* result)
  70. {
  71. JackLog("rpc_jack_port_register %ld %s\n", refnum, name);
  72. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  73. assert(channel);
  74. *result = channel->GetEngine()->PortRegister(refnum, name, flags, buffer_size, port_index);
  75. return KERN_SUCCESS;
  76. }
  77. rpc_type server_rpc_jack_port_unregister(mach_port_t private_port, int refnum, int port, int* result)
  78. {
  79. JackLog("rpc_jack_port_unregister %ld %ld \n", refnum, port);
  80. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  81. assert(channel);
  82. *result = channel->GetEngine()->PortUnRegister(refnum, port);
  83. return KERN_SUCCESS;
  84. }
  85. 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)
  86. {
  87. JackLog("rpc_jack_port_connect_name\n");
  88. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  89. assert(channel);
  90. *result = channel->GetEngine()->PortConnect(refnum, src, dst);
  91. return KERN_SUCCESS;
  92. }
  93. 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)
  94. {
  95. JackLog("rpc_jack_port_disconnect_name\n");
  96. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  97. assert(channel);
  98. *result = channel->GetEngine()->PortDisconnect(refnum, src, dst);
  99. return KERN_SUCCESS;
  100. }
  101. rpc_type server_rpc_jack_port_connect(mach_port_t private_port, int refnum, int src, int dst, int* result)
  102. {
  103. JackLog("rpc_jack_port_connect\n");
  104. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  105. assert(channel);
  106. *result = channel->GetEngine()->PortConnect(refnum, src, dst);
  107. return KERN_SUCCESS;
  108. }
  109. rpc_type server_rpc_jack_port_disconnect(mach_port_t private_port, int refnum, int src, int dst, int* result)
  110. {
  111. JackLog("rpc_jack_port_disconnect\n");
  112. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  113. assert(channel);
  114. *result = channel->GetEngine()->PortDisconnect(refnum, src, dst);
  115. return KERN_SUCCESS;
  116. }
  117. //------------------------
  118. // Buffer size, freewheel
  119. //------------------------
  120. rpc_type server_rpc_jack_set_buffer_size(mach_port_t private_port, int buffer_size, int* result)
  121. {
  122. JackLog("server_rpc_jack_set_buffer_size\n");
  123. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  124. assert(channel);
  125. *result = channel->GetServer()->SetBufferSize(buffer_size);
  126. return KERN_SUCCESS;
  127. }
  128. rpc_type server_rpc_jack_set_freewheel(mach_port_t private_port, int onoff, int* result)
  129. {
  130. JackLog("server_rpc_jack_set_freewheel\n");
  131. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  132. assert(channel);
  133. *result = channel->GetServer()->SetFreewheel(onoff);
  134. return KERN_SUCCESS;
  135. }
  136. //----------------------
  137. // Transport management
  138. //----------------------
  139. rpc_type server_rpc_jack_release_timebase(mach_port_t private_port, int refnum, int* result)
  140. {
  141. JackLog("server_rpc_jack_release_timebase\n");
  142. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  143. assert(channel);
  144. *result = channel->GetServer()->GetEngine()->ReleaseTimebase(refnum);
  145. return KERN_SUCCESS;
  146. }
  147. rpc_type server_rpc_jack_set_timebase_callback(mach_port_t private_port, int refnum, int conditional, int* result)
  148. {
  149. JackLog("server_rpc_jack_set_timebase_callback\n");
  150. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  151. assert(channel);
  152. *result = channel->GetServer()->GetEngine()->SetTimebaseCallback(refnum, conditional);
  153. return KERN_SUCCESS;
  154. }
  155. //------------------
  156. // Internal clients
  157. //------------------
  158. 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)
  159. {
  160. JackLog("server_rpc_jack_get_internal_clientname\n");
  161. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  162. assert(channel);
  163. //*result = channel->GetServer()->GetEngine()->GetInternalClientName(int_ref, (char*)name_res);
  164. return KERN_SUCCESS;
  165. }
  166. 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)
  167. {
  168. JackLog("server_rpc_jack_internal_clienthandle\n");
  169. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  170. assert(channel);
  171. *result = channel->GetServer()->GetEngine()->InternalClientHandle(client_name, status, int_ref);
  172. return KERN_SUCCESS;
  173. }
  174. 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)
  175. {
  176. JackLog("server_rpc_jack_internal_clientload\n");
  177. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  178. assert(channel);
  179. *result = channel->GetServer()->InternalClientLoad(client_name, so_name, objet_data, options, int_ref, status);
  180. return KERN_SUCCESS;
  181. }
  182. rpc_type server_rpc_jack_internal_clientunload(mach_port_t private_port, int refnum, int int_ref, int* status, int* result)
  183. {
  184. JackLog("server_rpc_jack_internal_clientunload\n");
  185. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port];
  186. assert(channel);
  187. *result = channel->GetServer()->GetEngine()->InternalClientUnload(int_ref, status);
  188. return KERN_SUCCESS;
  189. }
  190. //-----------------
  191. // RT notification
  192. //-----------------
  193. rpc_type server_rpc_jack_client_rt_notify(mach_port_t server_port, int refnum, int notify, int value)
  194. {
  195. JackLog("rpc_jack_client_rt_notify ref = %ld notify = %ld value = %ld\n", refnum, notify, value);
  196. JackMachServerChannel* channel = JackMachServerChannel::fPortTable[server_port];
  197. assert(channel);
  198. assert(channel->GetServer());
  199. channel->GetServer()->Notify(refnum, notify, value);
  200. return KERN_SUCCESS;
  201. }