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.

769 lines
18KB

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