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.

754 lines
19KB

  1. /*
  2. Copyright (C) 2001 Paul Davis
  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. #ifndef __JackRequest__
  16. #define __JackRequest__
  17. #include "JackPort.h"
  18. #include "JackChannelTransaction.h"
  19. #include "JackError.h"
  20. #include <stdio.h>
  21. namespace Jack
  22. {
  23. /*!
  24. \brief Request from client to server.
  25. */
  26. struct JackRequest
  27. {
  28. public:
  29. typedef enum {
  30. kRegisterPort = 1,
  31. kUnRegisterPort = 2,
  32. kConnectPorts = 3,
  33. kDisconnectPorts = 4,
  34. kSetTimeBaseClient = 5,
  35. kActivateClient = 6,
  36. kDeactivateClient = 7,
  37. kDisconnectPort = 8,
  38. kSetClientCapabilities = 9,
  39. kGetPortConnections = 10,
  40. kGetPortNConnections = 11,
  41. kReleaseTimebase = 12,
  42. kSetTimebaseCallback = 13,
  43. kSetBufferSize = 20,
  44. kSetFreeWheel = 21,
  45. kClientNew = 22,
  46. kClientClose = 23,
  47. kConnectNamePorts = 24,
  48. kDisconnectNamePorts = 25,
  49. kNotification = 26
  50. } RequestType;
  51. RequestType fType;
  52. JackRequest()
  53. {}
  54. JackRequest(RequestType type): fType(type)
  55. {}
  56. virtual ~JackRequest()
  57. {}
  58. virtual int Read(JackChannelTransaction* trans)
  59. {
  60. //return trans->Read(this, sizeof(JackRequest));
  61. return trans->Read(&fType, sizeof(RequestType));
  62. }
  63. virtual int Write(JackChannelTransaction* trans)
  64. {
  65. //return -1;
  66. return trans->Write(&fType, sizeof(RequestType));
  67. }
  68. };
  69. #define CheckRes(res) {if (res < 0) return res;}
  70. /*!
  71. \brief Result from the server.
  72. */
  73. struct JackResult
  74. {
  75. int fResult;
  76. JackResult(): fResult( -1)
  77. {}
  78. JackResult(int status): fResult(status)
  79. {}
  80. virtual ~JackResult()
  81. {}
  82. virtual int Read(JackChannelTransaction* trans)
  83. {
  84. //return trans->Read(this, sizeof(JackResult));
  85. return trans->Read(&fResult, sizeof(int));
  86. }
  87. virtual int Write(JackChannelTransaction* trans)
  88. {
  89. //return trans->Write(this, sizeof(JackResult));
  90. return trans->Write(&fResult, sizeof(int));
  91. }
  92. };
  93. /*!
  94. \brief NewClient request.
  95. */
  96. struct JackClientNewRequest : public JackRequest
  97. {
  98. char fName[JACK_CLIENT_NAME_SIZE + 1];
  99. JackClientNewRequest()
  100. {}
  101. JackClientNewRequest(const char* name): JackRequest(JackRequest::kClientNew)
  102. {
  103. snprintf(fName, sizeof(fName), "%s", name);
  104. }
  105. int Read(JackChannelTransaction* trans)
  106. {
  107. //return trans->Read(&fName, sizeof(JackClientNewRequest) - sizeof(JackRequest));
  108. return trans->Read(&fName, JACK_CLIENT_NAME_SIZE + 1);
  109. }
  110. int Write(JackChannelTransaction* trans)
  111. {
  112. //return trans->Write(this, sizeof(JackClientNewRequest));
  113. CheckRes(JackRequest::Write(trans));
  114. return trans->Write(&fName, JACK_CLIENT_NAME_SIZE + 1);
  115. }
  116. };
  117. /*!
  118. \brief NewClient result.
  119. */
  120. struct JackClientNewResult : public JackResult
  121. {
  122. //JackResult fHeader;
  123. int fSharedEngine;
  124. int fSharedClient;
  125. int fSharedGraph;
  126. uint32_t fProtocolVersion;
  127. JackClientNewResult()
  128. :fSharedEngine(-1), fSharedClient(-1), fSharedGraph(-1), fProtocolVersion(0)
  129. {}
  130. JackClientNewResult(int32_t status, int index1, int index2, int index3)
  131. : JackResult(status), fSharedEngine(index1), fSharedClient(index2), fSharedGraph(index3), fProtocolVersion(0)
  132. {}
  133. int Read(JackChannelTransaction* trans)
  134. {
  135. //return trans->Read(this, sizeof(JackClientNewResult));
  136. CheckRes(trans->Read(&fSharedEngine, sizeof(int)));
  137. CheckRes(trans->Read(&fSharedClient, sizeof(int)));
  138. CheckRes(trans->Read(&fSharedGraph, sizeof(int)));
  139. CheckRes(trans->Read(&fProtocolVersion, sizeof(uint32_t)));
  140. return 0;
  141. }
  142. int Write(JackChannelTransaction* trans)
  143. {
  144. //return trans->Write(this, sizeof(JackClientNewResult));
  145. CheckRes(JackResult::Write(trans));
  146. CheckRes(trans->Write(&fSharedEngine, sizeof(int)));
  147. CheckRes(trans->Write(&fSharedClient, sizeof(int)));
  148. CheckRes(trans->Write(&fSharedGraph, sizeof(int)));
  149. CheckRes(trans->Write(&fProtocolVersion, sizeof(uint32_t)));
  150. return 0;
  151. }
  152. };
  153. /*!
  154. \brief CloseClient request.
  155. */
  156. struct JackClientCloseRequest : public JackRequest
  157. {
  158. //JackRequest fHeader;
  159. int fRefNum;
  160. JackClientCloseRequest()
  161. {}
  162. JackClientCloseRequest(int refnum): JackRequest(JackRequest::kClientClose), fRefNum(refnum)
  163. {}
  164. int Read(JackChannelTransaction* trans)
  165. {
  166. //return trans->Read(&fRefNum, sizeof(JackClientCloseRequest) - sizeof(JackRequest));
  167. return trans->Read(&fRefNum, sizeof(int));
  168. }
  169. int Write(JackChannelTransaction* trans)
  170. {
  171. //return trans->Write(this, sizeof(JackClientCloseRequest));
  172. CheckRes(JackRequest::Write(trans));
  173. return trans->Write(&fRefNum, sizeof(int));
  174. }
  175. };
  176. /*!
  177. \brief Activate request.
  178. */
  179. struct JackActivateRequest : public JackRequest
  180. {
  181. //JackRequest fHeader;
  182. int fRefNum;
  183. JackActivateRequest()
  184. {}
  185. JackActivateRequest(int refnum): JackRequest(JackRequest::kActivateClient), fRefNum(refnum)
  186. {}
  187. int Read(JackChannelTransaction* trans)
  188. {
  189. // return trans->Read(&fRefNum, sizeof(JackActivateRequest) - sizeof(JackRequest));
  190. return trans->Read(&fRefNum, sizeof(int));
  191. }
  192. int Write(JackChannelTransaction* trans)
  193. {
  194. //return trans->Write(this, sizeof(JackActivateRequest));
  195. CheckRes(JackRequest::Write(trans));
  196. return trans->Write(&fRefNum, sizeof(int));
  197. }
  198. };
  199. /*!
  200. \brief Deactivate request.
  201. */
  202. struct JackDeactivateRequest : public JackRequest
  203. {
  204. //JackRequest fHeader;
  205. int fRefNum;
  206. JackDeactivateRequest()
  207. {}
  208. JackDeactivateRequest(int refnum): JackRequest(JackRequest::kDeactivateClient), fRefNum(refnum)
  209. {}
  210. int Read(JackChannelTransaction* trans)
  211. {
  212. //return trans->Read(&fRefNum, sizeof(JackDeactivateRequest) - sizeof(JackRequest));
  213. return trans->Read(&fRefNum, sizeof(int));
  214. }
  215. int Write(JackChannelTransaction* trans)
  216. {
  217. //return trans->Write(this, sizeof(JackDeactivateRequest));
  218. CheckRes(JackRequest::Write(trans));
  219. return trans->Write(&fRefNum, sizeof(int));
  220. }
  221. };
  222. /*!
  223. \brief PortRegister request.
  224. */
  225. struct JackPortRegisterRequest : public JackRequest
  226. {
  227. //JackRequest fHeader;
  228. int fRefNum;
  229. char fName[JACK_PORT_NAME_SIZE + 1];
  230. char fPortType[JACK_PORT_TYPE_SIZE + 1];
  231. unsigned int fFlags;
  232. unsigned int fBufferSize;
  233. JackPortRegisterRequest()
  234. {}
  235. JackPortRegisterRequest(int refnum, const char* name, const char* port_type, unsigned int flags, unsigned int buffer_size)
  236. : JackRequest(JackRequest::kRegisterPort), fRefNum(refnum), fFlags(flags), fBufferSize(buffer_size)
  237. {
  238. strcpy(fName, name);
  239. strcpy(fPortType, port_type);
  240. }
  241. int Read(JackChannelTransaction* trans)
  242. {
  243. //return trans->Read(&fRefNum, sizeof(JackPortRegisterRequest) - sizeof(JackRequest));
  244. CheckRes(trans->Read(&fRefNum, sizeof(int)));
  245. CheckRes(trans->Read(&fName, sizeof(JACK_PORT_NAME_SIZE + 1)));
  246. CheckRes(trans->Read(&fPortType, sizeof(JACK_PORT_TYPE_SIZE + 1)));
  247. CheckRes(trans->Read(&fFlags, sizeof(unsigned int)));
  248. CheckRes(trans->Read(&fBufferSize, sizeof(unsigned int)));
  249. return 0;
  250. }
  251. int Write(JackChannelTransaction* trans)
  252. {
  253. //return trans->Write(this, sizeof(JackPortRegisterRequest));
  254. CheckRes(JackRequest::Write(trans));
  255. CheckRes(trans->Write(&fRefNum, sizeof(int)));
  256. CheckRes(trans->Write(&fName, sizeof(JACK_PORT_NAME_SIZE + 1)));
  257. CheckRes(trans->Write(&fPortType, sizeof(JACK_PORT_TYPE_SIZE + 1)));
  258. CheckRes(trans->Write(&fFlags, sizeof(unsigned int)));
  259. CheckRes(trans->Write(&fBufferSize, sizeof(unsigned int)));
  260. return 0;
  261. }
  262. };
  263. /*!
  264. \brief PortRegister result.
  265. */
  266. struct JackPortRegisterResult : public JackResult
  267. {
  268. //JackResult fHeader;
  269. jack_port_id_t fPortIndex;
  270. JackPortRegisterResult(): fPortIndex(NO_PORT)
  271. {}
  272. int Read(JackChannelTransaction* trans)
  273. {
  274. //return trans->Read(this, sizeof(JackPortRegisterResult));
  275. return trans->Read(&fPortIndex, sizeof(jack_port_id_t));
  276. }
  277. int Write(JackChannelTransaction* trans)
  278. {
  279. //return trans->Write(this, sizeof(JackPortRegisterResult));
  280. CheckRes(JackResult::Write(trans));
  281. return trans->Read(&fPortIndex, sizeof(jack_port_id_t));
  282. }
  283. };
  284. /*!
  285. \brief PortUnregister request.
  286. */
  287. struct JackPortUnRegisterRequest : public JackRequest
  288. {
  289. //JackRequest fHeader;
  290. int fRefNum;
  291. int fPortIndex;
  292. JackPortUnRegisterRequest()
  293. {}
  294. JackPortUnRegisterRequest(int refnum, int index): JackRequest(JackRequest::kUnRegisterPort), fRefNum(refnum), fPortIndex(index)
  295. {}
  296. int Read(JackChannelTransaction* trans)
  297. {
  298. //return trans->Read(&fRefNum, sizeof(JackPortUnRegisterRequest) - sizeof(JackRequest));
  299. CheckRes(trans->Read(&fRefNum, sizeof(int)));
  300. CheckRes(trans->Read(&fPortIndex, sizeof(int)));
  301. return 0;
  302. }
  303. int Write(JackChannelTransaction* trans)
  304. {
  305. //return trans->Write(this, sizeof(JackPortUnRegisterRequest));
  306. CheckRes(JackRequest::Write(trans));
  307. CheckRes(trans->Write(&fRefNum, sizeof(int)));
  308. CheckRes(trans->Write(&fPortIndex, sizeof(int)));
  309. return 0;
  310. }
  311. };
  312. /*!
  313. \brief PortConnectName request.
  314. */
  315. struct JackPortConnectNameRequest : public JackRequest
  316. {
  317. //JackRequest fHeader;
  318. int fRefNum;
  319. char fSrc[JACK_PORT_NAME_SIZE + 1];
  320. char fDst[JACK_PORT_NAME_SIZE + 1];
  321. JackPortConnectNameRequest()
  322. {}
  323. JackPortConnectNameRequest(int refnum, const char* src_name, const char* dst_name): JackRequest(JackRequest::kConnectNamePorts), fRefNum(refnum)
  324. {
  325. strcpy(fSrc, src_name);
  326. strcpy(fDst, dst_name);
  327. }
  328. int Read(JackChannelTransaction* trans)
  329. {
  330. //return trans->Read(&fRefNum, sizeof(JackPortConnectNameRequest) - sizeof(JackRequest));
  331. CheckRes(trans->Read(&fRefNum, sizeof(int)));
  332. CheckRes(trans->Read(&fSrc, sizeof(JACK_PORT_NAME_SIZE + 1)));
  333. CheckRes(trans->Read(&fDst, sizeof(JACK_PORT_NAME_SIZE + 1)));
  334. return 0;
  335. }
  336. int Write(JackChannelTransaction* trans)
  337. {
  338. //return trans->Write(this, sizeof(JackPortConnectNameRequest));
  339. CheckRes(JackRequest::Write(trans));
  340. CheckRes(trans->Write(&fRefNum, sizeof(int)));
  341. CheckRes(trans->Write(&fSrc, sizeof(JACK_PORT_NAME_SIZE + 1)));
  342. CheckRes(trans->Write(&fDst, sizeof(JACK_PORT_NAME_SIZE + 1)));
  343. return 0;
  344. }
  345. };
  346. /*!
  347. \brief PortDisconnectName request.
  348. */
  349. struct JackPortDisconnectNameRequest : public JackRequest
  350. {
  351. //JackRequest fHeader;
  352. int fRefNum;
  353. char fSrc[JACK_PORT_NAME_SIZE + 1];
  354. char fDst[JACK_PORT_NAME_SIZE + 1];
  355. JackPortDisconnectNameRequest()
  356. {}
  357. JackPortDisconnectNameRequest(int refnum, const char* src_name, const char* dst_name): JackRequest(JackRequest::kDisconnectNamePorts), fRefNum(refnum)
  358. {
  359. strcpy(fSrc, src_name);
  360. strcpy(fDst, dst_name);
  361. }
  362. int Read(JackChannelTransaction* trans)
  363. {
  364. //return trans->Read(&fRefNum, sizeof(JackPortDisconnectNameRequest) - sizeof(JackRequest));
  365. CheckRes(trans->Read(&fRefNum, sizeof(int)));
  366. CheckRes(trans->Read(&fSrc, sizeof(JACK_PORT_NAME_SIZE + 1)));
  367. CheckRes(trans->Read(&fDst, sizeof(JACK_PORT_NAME_SIZE + 1)));
  368. return 0;
  369. }
  370. int Write(JackChannelTransaction* trans)
  371. {
  372. //return trans->Write(this, sizeof(JackPortDisconnectNameRequest));
  373. CheckRes(JackRequest::Write(trans));
  374. CheckRes(trans->Write(&fRefNum, sizeof(int)));
  375. CheckRes(trans->Write(&fSrc, sizeof(JACK_PORT_NAME_SIZE + 1)));
  376. CheckRes(trans->Write(&fDst, sizeof(JACK_PORT_NAME_SIZE + 1)));
  377. return 0;
  378. }
  379. };
  380. /*!
  381. \brief PortConnect request.
  382. */
  383. struct JackPortConnectRequest : public JackRequest
  384. {
  385. //JackRequest fHeader;
  386. int fRefNum;
  387. jack_port_id_t fSrc;
  388. jack_port_id_t fDst;
  389. JackPortConnectRequest()
  390. {}
  391. JackPortConnectRequest(int refnum, jack_port_id_t src, jack_port_id_t dst): JackRequest(JackRequest::kConnectPorts), fRefNum(refnum), fSrc(src), fDst(dst)
  392. {}
  393. int Read(JackChannelTransaction* trans)
  394. {
  395. //return trans->Read(&fRefNum, sizeof(JackPortConnectRequest) - sizeof(JackRequest));
  396. CheckRes(trans->Read(&fRefNum, sizeof(int)));
  397. CheckRes(trans->Read(&fSrc, sizeof(jack_port_id_t)));
  398. CheckRes(trans->Read(&fDst, sizeof(jack_port_id_t)));
  399. return 0;
  400. }
  401. int Write(JackChannelTransaction* trans)
  402. {
  403. //return trans->Write(this, sizeof(JackPortConnectRequest));
  404. CheckRes(JackRequest::Write(trans));
  405. CheckRes(trans->Write(&fRefNum, sizeof(int)));
  406. CheckRes(trans->Write(&fSrc, sizeof(jack_port_id_t)));
  407. CheckRes(trans->Write(&fDst, sizeof(jack_port_id_t)));
  408. return 0;
  409. }
  410. };
  411. /*!
  412. \brief PortDisconnect request.
  413. */
  414. struct JackPortDisconnectRequest : public JackRequest
  415. {
  416. //JackRequest fHeader;
  417. int fRefNum;
  418. jack_port_id_t fSrc;
  419. jack_port_id_t fDst;
  420. JackPortDisconnectRequest()
  421. {}
  422. JackPortDisconnectRequest(int refnum, jack_port_id_t src, jack_port_id_t dst): JackRequest(JackRequest::kDisconnectPorts), fRefNum(refnum), fSrc(src), fDst(dst)
  423. {}
  424. int Read(JackChannelTransaction* trans)
  425. {
  426. //return trans->Read(&fRefNum, sizeof(JackPortConnectRequest) - sizeof(JackRequest));
  427. CheckRes(trans->Read(&fRefNum, sizeof(int)));
  428. CheckRes(trans->Read(&fSrc, sizeof(jack_port_id_t)));
  429. CheckRes(trans->Read(&fDst, sizeof(jack_port_id_t)));
  430. return 0;
  431. }
  432. int Write(JackChannelTransaction* trans)
  433. {
  434. //return trans->Write(this, sizeof(JackPortConnectRequest));
  435. CheckRes(JackRequest::Write(trans));
  436. CheckRes(trans->Write(&fRefNum, sizeof(int)));
  437. CheckRes(trans->Write(&fSrc, sizeof(jack_port_id_t)));
  438. CheckRes(trans->Write(&fDst, sizeof(jack_port_id_t)));
  439. return 0;
  440. }
  441. };
  442. /*!
  443. \brief SetBufferSize request.
  444. */
  445. struct JackSetBufferSizeRequest : public JackRequest
  446. {
  447. //JackRequest fHeader;
  448. jack_nframes_t fBufferSize;
  449. JackSetBufferSizeRequest()
  450. {}
  451. JackSetBufferSizeRequest(jack_nframes_t buffer_size): JackRequest(JackRequest::kSetBufferSize), fBufferSize(buffer_size)
  452. {}
  453. int Read(JackChannelTransaction* trans)
  454. {
  455. //return trans->Read(&fBufferSize, sizeof(JackSetBufferSizeRequest) - sizeof(JackRequest));
  456. return trans->Read(&fBufferSize, sizeof(jack_nframes_t));
  457. }
  458. int Write(JackChannelTransaction* trans)
  459. {
  460. //return trans->Write(this, sizeof(JackSetBufferSizeRequest));
  461. CheckRes(JackRequest::Write(trans));
  462. return trans->Write(&fBufferSize, sizeof(jack_nframes_t));
  463. }
  464. };
  465. /*!
  466. \brief SetFreeWheel request.
  467. */
  468. struct JackSetFreeWheelRequest : public JackRequest
  469. {
  470. //JackRequest fHeader;
  471. int fOnOff;
  472. JackSetFreeWheelRequest()
  473. {}
  474. JackSetFreeWheelRequest(int onoff): JackRequest(JackRequest::kSetFreeWheel), fOnOff(onoff)
  475. {}
  476. int Read(JackChannelTransaction* trans)
  477. {
  478. //return trans->Read(&fOnOff, sizeof(JackSetFreeWheelRequest) - sizeof(JackRequest));
  479. return trans->Read(&fOnOff, sizeof(int));
  480. }
  481. int Write(JackChannelTransaction* trans)
  482. {
  483. //return trans->Write(this, sizeof(JackSetFreeWheelRequest));
  484. CheckRes(JackRequest::Write(trans));
  485. return trans->Write(&fOnOff, sizeof(int));
  486. }
  487. };
  488. /*!
  489. \brief ReleaseTimebase request.
  490. */
  491. struct JackReleaseTimebaseRequest : public JackRequest
  492. {
  493. //JackRequest fHeader;
  494. int fRefNum;
  495. JackReleaseTimebaseRequest()
  496. {}
  497. JackReleaseTimebaseRequest(int refnum): JackRequest(JackRequest::kReleaseTimebase), fRefNum(refnum)
  498. {}
  499. int Read(JackChannelTransaction* trans)
  500. {
  501. //return trans->Read(&fRefNum, sizeof(JackReleaseTimebaseRequest) - sizeof(JackRequest));
  502. return trans->Read(&fRefNum, sizeof(int));
  503. }
  504. int Write(JackChannelTransaction* trans)
  505. {
  506. //return trans->Write(this, sizeof(JackReleaseTimebaseRequest));
  507. CheckRes(JackRequest::Write(trans));
  508. return trans->Write(&fRefNum, sizeof(int));
  509. }
  510. };
  511. /*!
  512. \brief SetTimebaseCallback request.
  513. */
  514. struct JackSetTimebaseCallbackRequest : public JackRequest
  515. {
  516. //JackRequest fHeader;
  517. int fRefNum;
  518. int fConditionnal;
  519. JackSetTimebaseCallbackRequest()
  520. {}
  521. JackSetTimebaseCallbackRequest(int refnum, int conditional): JackRequest(JackRequest::kSetTimebaseCallback), fRefNum(refnum), fConditionnal(conditional)
  522. {}
  523. int Read(JackChannelTransaction* trans)
  524. {
  525. //return trans->Read(&fRefNum, sizeof(JackSetTimebaseCallbackRequest) - sizeof(JackRequest));
  526. CheckRes(trans->Read(&fRefNum, sizeof(int)));
  527. return trans->Read(&fConditionnal, sizeof(int));
  528. }
  529. int Write(JackChannelTransaction* trans)
  530. {
  531. //return trans->Write(this, sizeof(JackSetTimebaseCallbackRequest));
  532. CheckRes(JackRequest::Write(trans));
  533. CheckRes(trans->Write(&fRefNum, sizeof(int)));
  534. return trans->Write(&fConditionnal, sizeof(int));
  535. }
  536. };
  537. /*!
  538. \brief ClientNotification request.
  539. */
  540. struct JackClientNotificationRequest : public JackRequest
  541. {
  542. //JackRequest fHeader;
  543. int fRefNum;
  544. int fNotify;
  545. int fValue;
  546. JackClientNotificationRequest()
  547. {}
  548. JackClientNotificationRequest(int refnum, int notify, int value)
  549. : JackRequest(JackRequest::kNotification), fRefNum(refnum), fNotify(notify), fValue(value)
  550. {}
  551. int Read(JackChannelTransaction* trans)
  552. {
  553. //return trans->Read(&fRefNum, sizeof(JackClientNotificationRequest) - sizeof(JackRequest));
  554. CheckRes(trans->Read(&fRefNum, sizeof(int)));
  555. CheckRes(trans->Read(&fNotify, sizeof(int)));
  556. CheckRes(trans->Read(&fValue, sizeof(int)));
  557. return 0;
  558. }
  559. int Write(JackChannelTransaction* trans)
  560. {
  561. //return trans->Write(this, sizeof(JackClientNotificationRequest));
  562. CheckRes(JackRequest::Write(trans));
  563. CheckRes(trans->Write(&fRefNum, sizeof(int)));
  564. CheckRes(trans->Write(&fNotify, sizeof(int)));
  565. CheckRes(trans->Write(&fValue, sizeof(int)));
  566. return 0;
  567. }
  568. };
  569. /*!
  570. \brief ClientNotification.
  571. */
  572. struct JackClientNotification
  573. {
  574. char fName[JACK_CLIENT_NAME_SIZE + 1];
  575. int fRefNum;
  576. int fNotify;
  577. int fValue;
  578. int fSync;
  579. JackClientNotification(): fNotify( -1), fValue( -1)
  580. {}
  581. JackClientNotification(const char* name, int refnum, int notify, int sync, int value)
  582. : fRefNum(refnum), fNotify(notify), fValue(value), fSync(sync)
  583. {
  584. snprintf(fName, sizeof(fName), "%s", name);
  585. }
  586. int Read(JackChannelTransaction* trans)
  587. {
  588. //return trans->Read(this, sizeof(JackClientNotification));
  589. CheckRes(trans->Read(&fName, sizeof(JACK_CLIENT_NAME_SIZE + 1)));
  590. CheckRes(trans->Read(&fRefNum, sizeof(int)));
  591. CheckRes(trans->Read(&fNotify, sizeof(int)));
  592. CheckRes(trans->Read(&fValue, sizeof(int)));
  593. CheckRes(trans->Read(&fValue, sizeof(fSync)));
  594. return 0;
  595. }
  596. int Write(JackChannelTransaction* trans)
  597. {
  598. //return trans->Write(this, sizeof(JackClientNotification));
  599. CheckRes(trans->Write(&fName, sizeof(JACK_CLIENT_NAME_SIZE + 1)));
  600. CheckRes(trans->Write(&fRefNum, sizeof(int)));
  601. CheckRes(trans->Write(&fNotify, sizeof(int)));
  602. CheckRes(trans->Write(&fValue, sizeof(int)));
  603. CheckRes(trans->Write(&fValue, sizeof(fSync)));
  604. return 0;
  605. }
  606. };
  607. } // end of namespace
  608. #endif