fork download
  1. /*===========================================================================*/
  2. /* This supportpac is maintained by Jeff Lowrey */
  3. /* Wayne M. Schutz is maintainer emeritus */
  4. /* */
  5. /* Chris Petty is the original author. */
  6. /* */
  7. /*(C)Copyright IBM Corporation 1995, 1997, 1998, 1999, 2000, */
  8. /*(C)Copyright IBM Corporation 2002, 2003, 2004, 2005, 2006 */
  9. /*(C)Copyright IBM Corporation 2007, 2008, 2009 */
  10. /* */
  11. /*===========================================================================*/
  12. /* */
  13. /* See the read.me file for change history */
  14. /* */
  15. /*===========================================================================*/
  16. /* Module Name: CHANNEL.C */
  17. /* DESCRIPTIVE NAME WebSphere MQ Save Queue Manager Object */
  18. /* Definitions using PCFs (ms03 supportpac) */
  19. /* */
  20. /*===========================================================================*/
  21.  
  22. /* Include standard libraries */
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include <string.h>
  26.  
  27. /* Include MQSeries headers */
  28. #include <cmqc.h>
  29. #include <cmqcfc.h>
  30. #include <cmqxc.h>
  31.  
  32. /* Include Application headers */
  33. #include "saveqmgr.h"
  34. #include "mqutils.h"
  35.  
  36.  
  37. /* ------------------------------------------------------------------------ */
  38. /* ProcessChannelStringParm() */
  39. /* ProcessChannelIntegerParm() */
  40. /* ProcessChannelIntegerListParm() */
  41. /* ProcessChannelStringListParm() */
  42. /* */
  43. /* */
  44. /* The ChlDefn structure contains entries for each of the attributes, */
  45. /* only the attributes relevant for this channel type will be meaningful. */
  46. /* When we later write the file we will ensure that, based on channel type, */
  47. /* only the relevant fields are used. */
  48. /* ------------------------------------------------------------------------ */
  49. extern int noisy;
  50. extern int chlReset;
  51. extern int header;
  52. extern int oneLine; /* v601 -- whether to write the entire DEFINE on oneline */
  53. extern char lineTerm[3]; /* v601 -- line terminator */
  54. extern int platform; /* v602 -- platform to generate MQSC for */
  55.  
  56. void ProcessChannelStringParm(MQCFST *pPCFString, ChlParms *ChlDefn,
  57. MQLONG *iCC) {
  58. /* Initialise return codes */
  59. *iCC = MQCC_OK;
  60.  
  61. switch (pPCFString->Parameter) {
  62. case MQCACH_CHANNEL_NAME:
  63. memset(ChlDefn->ChannelName, ' ', MQ_CHANNEL_NAME_LENGTH);
  64. memcpy(ChlDefn->ChannelName, pPCFString->String,
  65. pPCFString -> StringLength);
  66. break;
  67. case MQCACH_MODE_NAME:
  68. memset(ChlDefn->ModeName, ' ', MQ_MODE_NAME_LENGTH);
  69. memcpy(ChlDefn->ModeName, pPCFString->String, pPCFString -> StringLength);
  70. break;
  71. case MQCACH_TP_NAME:
  72. memset(ChlDefn->TpName, ' ', MQ_TP_NAME_LENGTH);
  73. memcpy(ChlDefn->TpName, pPCFString->String, pPCFString -> StringLength);
  74. break;
  75. case MQCA_Q_MGR_NAME:
  76. memset(ChlDefn->QMgrName, ' ', MQ_Q_MGR_NAME_LENGTH);
  77. memcpy(ChlDefn->QMgrName, pPCFString->String, pPCFString -> StringLength);
  78. break;
  79. case MQCACH_XMIT_Q_NAME:
  80. memset(ChlDefn->XmitQName, ' ', MQ_Q_NAME_LENGTH);
  81. memcpy(ChlDefn->XmitQName, pPCFString->String,
  82. pPCFString -> StringLength);
  83. break;
  84. case MQCACH_CONNECTION_NAME:
  85. memset(ChlDefn->ConnectionName, ' ', MQ_CONN_NAME_LENGTH);
  86. memcpy(ChlDefn->ConnectionName, pPCFString->String,
  87. pPCFString -> StringLength);
  88. break;
  89. /* note that although we capture this attribute, it currently can only */
  90. /* have a value of blanks, so we never bother to generate a keyword */
  91. case MQCACH_MCA_NAME:
  92. memset(ChlDefn->MCAName, ' ', MQ_MCA_NAME_LENGTH);
  93. memcpy(ChlDefn->MCAName, pPCFString->String, pPCFString -> StringLength);
  94. break;
  95. case MQCACH_DESC:
  96. memset(ChlDefn->ChannelDesc, ' ', MQ_CHANNEL_DESC_LENGTH);
  97. memcpy(ChlDefn->ChannelDesc, pPCFString->String,
  98. pPCFString -> StringLength);
  99. break;
  100. case MQCACH_SEC_EXIT_NAME:
  101. memset(ChlDefn->SecurityExit, ' ', MQ_EXIT_NAME_LENGTH);
  102. memcpy(ChlDefn->SecurityExit, pPCFString->String,
  103. pPCFString -> StringLength);
  104. break;
  105. case MQCACH_MSG_EXIT_NAME:
  106. memset(ChlDefn->MsgExit, ' ', MQ_TOTAL_EXIT_NAME_LENGTH);
  107. memcpy(ChlDefn->MsgExit, pPCFString->String, pPCFString -> StringLength);
  108. ChlDefn->MsgExitListFlag = 0;
  109. break;
  110. case MQCACH_SEND_EXIT_NAME:
  111. memset(ChlDefn->SendExit, ' ', MQ_TOTAL_EXIT_NAME_LENGTH);
  112. memcpy(ChlDefn->SendExit, pPCFString->String, pPCFString -> StringLength);
  113. ChlDefn->SendExitListFlag = 0;
  114. break;
  115. case MQCACH_RCV_EXIT_NAME:
  116. memset(ChlDefn->ReceiveExit, ' ', MQ_TOTAL_EXIT_NAME_LENGTH);
  117. memcpy(ChlDefn->ReceiveExit, pPCFString->String,
  118. pPCFString -> StringLength);
  119. ChlDefn->ReceiveExitListFlag = 0;
  120. break;
  121. case MQCACH_SEC_EXIT_USER_DATA:
  122. memset(ChlDefn->SecurityUserData, ' ', MQ_EXIT_DATA_LENGTH);
  123. memcpy(ChlDefn->SecurityUserData, pPCFString->String,
  124. pPCFString -> StringLength);
  125. break;
  126. case MQCACH_MSG_EXIT_USER_DATA:
  127. memset(ChlDefn->MsgUserData, ' ', MQ_TOTAL_EXIT_DATA_LENGTH);
  128. memcpy(ChlDefn->MsgUserData, pPCFString->String,
  129. pPCFString -> StringLength);
  130. ChlDefn->MsgUserDataListFlag = 0;
  131. break;
  132. case MQCACH_SEND_EXIT_USER_DATA:
  133. memset(ChlDefn->SendUserData, ' ', MQ_TOTAL_EXIT_DATA_LENGTH);
  134. memcpy(ChlDefn->SendUserData, pPCFString->String,
  135. pPCFString -> StringLength);
  136. ChlDefn->SendUserDataListFlag = 0;
  137. break;
  138. case MQCACH_RCV_EXIT_USER_DATA:
  139. memset(ChlDefn->ReceiveUserData, ' ', MQ_TOTAL_EXIT_DATA_LENGTH);
  140. memcpy(ChlDefn->ReceiveUserData, pPCFString->String,
  141. pPCFString -> StringLength);
  142. ChlDefn->ReceiveUserDataListFlag = 0;
  143. break;
  144. case MQCACH_MCA_USER_ID:
  145. memset(ChlDefn->MCAUserIdentifier, ' ', XZMCAUSERLEN);
  146. memcpy(ChlDefn->MCAUserIdentifier, pPCFString->String,
  147. pPCFString -> StringLength);
  148. break;
  149. case MQCACH_USER_ID:
  150. memset(ChlDefn->UserIdentifier, ' ', MQ_USER_ID_LENGTH);
  151. memcpy(ChlDefn->UserIdentifier, pPCFString->String,
  152. pPCFString -> StringLength);
  153. break;
  154. case MQCACH_PASSWORD:
  155. memset(ChlDefn->Password, ' ', MQ_PASSWORD_LENGTH);
  156. memcpy(ChlDefn->Password, pPCFString->String, pPCFString -> StringLength);
  157. break;
  158. case MQCACH_MR_EXIT_NAME:
  159.  
  160. memset(ChlDefn->MsgRetryExit, ' ', MQ_EXIT_NAME_LENGTH);
  161. memcpy(ChlDefn->MsgRetryExit, pPCFString->String,
  162. pPCFString -> StringLength);
  163. ChlDefn->MsgRetryExitListFlag = 0;
  164.  
  165. break;
  166. case MQCACH_MR_EXIT_USER_DATA:
  167. memset(ChlDefn->MsgRetryUserData, ' ', MQ_EXIT_DATA_LENGTH);
  168. memcpy(ChlDefn->MsgRetryUserData, pPCFString->String,
  169. pPCFString -> StringLength);
  170. ChlDefn->MsgRetryUserDataListFlag = 0;
  171. break;
  172. #if defined (MQCA_CLUSTER_NAME)
  173. case MQCA_CLUSTER_NAME:
  174. memset(ChlDefn->ClusterName, ' ', MQ_CLUSTER_NAME_LENGTH);
  175. memcpy(ChlDefn->ClusterName, pPCFString->String,
  176. pPCFString->StringLength);
  177. break;
  178. #endif
  179. #if defined (MQCA_CLUSTER_NAMELIST)
  180. case MQCA_CLUSTER_NAMELIST:
  181. memset(ChlDefn->ClusterNameList, ' ', MQ_OBJECT_NAME_LENGTH);
  182. memcpy(ChlDefn->ClusterNameList, pPCFString->String,
  183. pPCFString->StringLength);
  184. break;
  185. #endif
  186. #if defined (MQCA_ALTERATION_DATE)
  187. case MQCA_ALTERATION_DATE:
  188. memset(ChlDefn->AlterationDate, ' ', MQ_CREATION_DATE_LENGTH);
  189. memcpy(ChlDefn->AlterationDate, pPCFString->String,
  190. pPCFString->StringLength);
  191. break;
  192. case MQCA_ALTERATION_TIME:
  193. memset(ChlDefn->AlterationTime, ' ', MQ_CREATION_TIME_LENGTH);
  194. memcpy(ChlDefn->AlterationTime, pPCFString->String,
  195. pPCFString->StringLength);
  196. break;
  197. #endif
  198. #if defined (MQ_LOCAL_ADDRESS_LENGTH)
  199.  
  200. case MQCACH_LOCAL_ADDRESS:
  201. memset(ChlDefn->LocalAddr, ' ', MQ_LOCAL_ADDRESS_LENGTH);
  202. memcpy(ChlDefn->LocalAddr, pPCFString->String, pPCFString->StringLength);
  203. break;
  204.  
  205. case MQCACH_SSL_CIPHER_SPEC:
  206. memset(ChlDefn->SslCipher, ' ', MQ_SSL_CIPHER_SPEC_LENGTH);
  207. memcpy(ChlDefn->SslCipher, pPCFString->String, pPCFString->StringLength);
  208. break;
  209.  
  210. case MQCACH_SSL_PEER_NAME:
  211. memset(ChlDefn->SslPeer, ' ', MQ_SSL_PEER_NAME_LENGTH);
  212. memcpy(ChlDefn->SslPeer, pPCFString->String, pPCFString->StringLength);
  213. break;
  214.  
  215. #endif
  216.  
  217. #if defined(zzzOS)
  218. /* v602 zOS attributes */
  219. case MQBACF_RESPONSE_ID: /* zOS things to ignore */
  220. break;
  221. case MQCACF_RESPONSE_Q_MGR_NAME: /* zOS things to ignore */
  222. break;
  223. #endif
  224.  
  225. default:
  226. if (noisy)
  227. fprintf(stderr, "(channel.c) Unknown PCF String Parameter: %ld\n",
  228. pPCFString->Parameter);
  229. *iCC = WARNING;
  230. break;
  231. } /* endswitch */
  232.  
  233. return;
  234. }
  235.  
  236. /********************* [v512] process lists of exits and exit data ***************/
  237. void ProcessChannelStringListParm(MQCFSL *pPCFString, ChlParms *ChlDefn,
  238. MQLONG *iCC) {
  239. /* Initialise return codes */
  240. *iCC = MQCC_OK;
  241.  
  242. switch (pPCFString->Parameter) {
  243. case MQCACH_MSG_EXIT_NAME:
  244. makeStringFromList(ChlDefn->MsgExit, pPCFString->Strings,
  245. pPCFString->StringLength, pPCFString->Count);
  246. ChlDefn->MsgExitListFlag = 1;
  247. break;
  248. case MQCACH_SEND_EXIT_NAME:
  249. makeStringFromList(ChlDefn->SendExit, pPCFString->Strings,
  250. pPCFString -> StringLength, pPCFString->Count);
  251. ChlDefn->SendExitListFlag = 1;
  252. break;
  253. case MQCACH_RCV_EXIT_NAME:
  254. makeStringFromList(ChlDefn->ReceiveExit, pPCFString->Strings,
  255. pPCFString -> StringLength, pPCFString->Count);
  256. ChlDefn->ReceiveExitListFlag = 1;
  257. break;
  258. case MQCACH_MSG_EXIT_USER_DATA:
  259. makeStringFromList(ChlDefn->MsgUserData, pPCFString->Strings,
  260. pPCFString -> StringLength, pPCFString->Count);
  261. ChlDefn->MsgUserDataListFlag = 1;
  262. break;
  263. case MQCACH_SEND_EXIT_USER_DATA:
  264. makeStringFromList(ChlDefn->SendUserData, pPCFString->Strings,
  265. pPCFString -> StringLength, pPCFString->Count);
  266. ChlDefn->SendUserDataListFlag = 1;
  267. break;
  268. case MQCACH_RCV_EXIT_USER_DATA:
  269. makeStringFromList(ChlDefn->ReceiveUserData, pPCFString->Strings,
  270. pPCFString -> StringLength, pPCFString->Count);
  271. ChlDefn->ReceiveUserDataListFlag = 1;
  272. break;
  273. case MQCACH_MR_EXIT_NAME:
  274. makeStringFromList(ChlDefn->MsgRetryExit, pPCFString->Strings,
  275. pPCFString -> StringLength, pPCFString->Count);
  276. ChlDefn->MsgRetryExitListFlag = 1;
  277. break;
  278. case MQCACH_MR_EXIT_USER_DATA:
  279. makeStringFromList(ChlDefn->MsgRetryUserData, pPCFString->Strings,
  280. pPCFString -> StringLength, pPCFString->Count);
  281. ChlDefn->MsgRetryUserDataListFlag = 1;
  282. break;
  283.  
  284. default:
  285.  
  286. if (noisy)
  287. fprintf(stderr,
  288. "(channel.c) Unknown PCF String List Parameter: %ld\n",
  289. pPCFString->Parameter);
  290. *iCC = WARNING;
  291. break;
  292.  
  293. } /* endswitch */
  294.  
  295. return;
  296. }
  297.  
  298. void ProcessChannelIntegerParm(MQCFIN *pPCFInteger, ChlParms *ChlDefn,
  299. MQLONG *iCC) {
  300. /* Initialise return codes */
  301. *iCC = MQCC_OK;
  302.  
  303. switch (pPCFInteger->Parameter) {
  304. case MQIACH_CHANNEL_TYPE:
  305. ChlDefn->ChannelType = pPCFInteger->Value;
  306. break;
  307. case MQIACH_XMIT_PROTOCOL_TYPE:
  308. ChlDefn->TransportType = pPCFInteger->Value;
  309. break;
  310. case MQIACH_BATCH_SIZE:
  311. ChlDefn->BatchSize = pPCFInteger->Value;
  312. break;
  313. case MQIACH_DISC_INTERVAL:
  314. ChlDefn->DiscInterval = pPCFInteger->Value;
  315. break;
  316. case MQIACH_SHORT_RETRY:
  317. ChlDefn->ShortRetryCount = pPCFInteger->Value;
  318. break;
  319. case MQIACH_SHORT_TIMER:
  320. ChlDefn->ShortRetryInterval = pPCFInteger->Value;
  321. break;
  322. case MQIACH_LONG_RETRY:
  323. ChlDefn->LongRetryCount = pPCFInteger->Value;
  324. break;
  325. case MQIACH_LONG_TIMER:
  326. ChlDefn->LongRetryInterval = pPCFInteger->Value;
  327. break;
  328. case MQIACH_DATA_CONVERSION:
  329. ChlDefn->DataConversion = pPCFInteger->Value;
  330. break;
  331. case MQIACH_PUT_AUTHORITY:
  332. ChlDefn->PutAuthority = pPCFInteger->Value;
  333. break;
  334. case MQIACH_SEQUENCE_NUMBER_WRAP:
  335. ChlDefn->SeqNumberWrap = pPCFInteger->Value;
  336. break;
  337. case MQIACH_MAX_MSG_LENGTH:
  338. ChlDefn->MaxMsgLength = pPCFInteger->Value;
  339. break;
  340. case MQIACH_MCA_TYPE:
  341. ChlDefn->MCAType = pPCFInteger->Value;
  342. break;
  343. case MQIACH_MR_COUNT:
  344. ChlDefn->MsgRetryCount = pPCFInteger->Value;
  345. break;
  346. case MQIACH_MR_INTERVAL:
  347. ChlDefn->MsgRetryInterval = pPCFInteger->Value;
  348. break;
  349. #if defined (MQIACH_BATCH_INTERVAL)
  350. case MQIACH_BATCH_INTERVAL:
  351. ChlDefn->BatchInterval = pPCFInteger->Value;
  352. break;
  353. #endif
  354. #if defined (MQIACH_HB_INTERVAL)
  355. case MQIACH_HB_INTERVAL:
  356. ChlDefn->HeartbeatInterval = pPCFInteger->Value;
  357. break;
  358. #endif
  359. #if defined (MQIACH_NPM_SPEED)
  360. case MQIACH_NPM_SPEED:
  361. ChlDefn->NonPersistentMsgSpeed = pPCFInteger->Value;
  362. break;
  363. #endif
  364. #if defined (MQIACH_NETWORK_PRIORITY)
  365. case MQIACH_NETWORK_PRIORITY:
  366. ChlDefn->NetworkPriority = pPCFInteger->Value;
  367. break;
  368. #endif
  369. #ifdef MQIACH_INHIBIT_AUTOSTART
  370. case MQIACH_INHIBIT_AUTOSTART:
  371. ChlDefn->InhibitAutostart = pPCFInteger->Value;
  372. break;
  373. #endif
  374. #if defined (MQ_LOCAL_ADDRESS_LENGTH)
  375.  
  376. case MQIACH_BATCH_HB:
  377. ChlDefn->BatchHB = pPCFInteger->Value;
  378. break;
  379. case MQIACH_SSL_CLIENT_AUTH:
  380. ChlDefn->SslCAuth = pPCFInteger->Value;
  381.  
  382. break;
  383.  
  384. #if defined (MQIACH_KEEP_ALIVE_INTERVAL)
  385. case MQIACH_KEEP_ALIVE_INTERVAL:
  386. ChlDefn->KAInt = pPCFInteger->Value;
  387. break;
  388. #endif
  389.  
  390. #endif
  391.  
  392. #ifdef zzMQV60
  393. case MQIA_MONITORING_CHANNEL:
  394. ChlDefn->MonChl = pPCFInteger->Value;
  395. break;
  396. case MQIA_STATISTICS_CHANNEL:
  397. ChlDefn->StatsChl = pPCFInteger->Value;
  398. break;
  399. case MQIACH_CLWL_CHANNEL_RANK:
  400. ChlDefn->Rank = pPCFInteger->Value;
  401. break;
  402. case MQIACH_CLWL_CHANNEL_PRIORITY:
  403. ChlDefn->Priority = pPCFInteger->Value;
  404. break;
  405. case MQIACH_CLWL_CHANNEL_WEIGHT:
  406. ChlDefn->Weight = pPCFInteger->Value;
  407. break;
  408.  
  409. #endif
  410.  
  411. #ifdef zzMQV70
  412. case MQIA_PROPERTY_CONTROL:
  413. ChlDefn->PropCntl = pPCFInteger->Value;
  414. break;
  415. case MQIACH_SHARING_CONVERSATIONS:
  416. ChlDefn->ShareCnv = pPCFInteger->Value;
  417. break;
  418. case MQIACH_MAX_INSTANCES:
  419. ChlDefn->MaxInsts = pPCFInteger->Value;
  420. break;
  421. case MQIACH_MAX_INSTS_PER_CLIENT:
  422. ChlDefn->MaxInstsC = pPCFInteger->Value;
  423. break;
  424. case MQIACH_CONNECTION_AFFINITY:
  425. ChlDefn->Affinity = pPCFInteger->Value;
  426. break;
  427. case MQIACH_DEF_CHANNEL_DISP:
  428. ChlDefn->DefCDsp = pPCFInteger->Value;
  429. break;
  430. case MQIACH_CLIENT_CHANNEL_WEIGHT:
  431. ChlDefn->ClntChlWght = pPCFInteger->Value;
  432. break;
  433.  
  434. #endif
  435. #if defined(zzzOS)
  436. /* v602 zOS attributes */
  437. case MQIA_QSG_DISP: /* zOS */
  438. ChlDefn->qsgDisp = pPCFInteger->Value;
  439. break;
  440. #endif
  441.  
  442. default:
  443. if (noisy)
  444. fprintf(stderr, "(channel.c) Unknown PCF Integer Parameter: %ld\n",
  445. pPCFInteger->Parameter);
  446. *iCC = WARNING;
  447. break;
  448. } /* endswitch */
  449.  
  450. return;
  451. }
  452.  
  453. void ProcessChannelIntegerListParm(MQCFIL *pPCFIntegerList, ChlParms *ChlDefn,
  454. MQLONG *iCC) {
  455. int i;
  456. *iCC = MQCC_OK;
  457. i=0;
  458.  
  459. switch (pPCFIntegerList->Parameter) {
  460.  
  461. #if defined (MQIACH_HDR_COMPRESSION)
  462. case MQIACH_HDR_COMPRESSION:
  463. for (i=0; i<COMP_ARRAY_SIZE; i++) {
  464. ChlDefn->HdrComp[i] = MQCOMPRESS_NOT_AVAILABLE;
  465. }
  466.  
  467. for (i=0; i<pPCFIntegerList->Count && i<COMP_ARRAY_SIZE; i++) {
  468. ChlDefn->HdrComp[i] = pPCFIntegerList->Values[i];
  469. }
  470. break;
  471.  
  472. case MQIACH_MSG_COMPRESSION:
  473. for (i=0; i<COMP_ARRAY_SIZE; i++) {
  474. ChlDefn->MsgComp[i] = MQCOMPRESS_NOT_AVAILABLE;
  475. }
  476. for (i=0; i<pPCFIntegerList->Count && i<COMP_ARRAY_SIZE; i++) {
  477. ChlDefn->MsgComp[i] = pPCFIntegerList->Values[i];
  478. }
  479. break;
  480. #endif
  481.  
  482. default:
  483. if (noisy)
  484. fprintf(stderr,
  485. "(channel.c) Unknown PCF Integer List Parameter: %ld\n",
  486. pPCFIntegerList->Parameter);
  487. *iCC = WARNING;
  488. break;
  489. } /* endswitch */
  490.  
  491. return;
  492. }
  493.  
  494. /* ------------------------------------------------------------------------ */
  495. /* */
  496. /* This process takes the attributes of a single channel and adds */
  497. /* them to the end of a file, SAVEQMGR.TST, which can be found in the */
  498. /* current directory. */
  499. /* */
  500. /* The file is of a format suitable for subsequent input to RUNMQSC. */
  501. /* */
  502. /* ------------------------------------------------------------------------ */
  503.  
  504. void AddToFileCHANNEL(ChlParms *pChlDefn, int UserVersion, char * fileName, /* v32 Name of the output file */
  505. FILE *fp, /* v51 file handle */
  506. int twolines, /* v601 */
  507. MQLONG *iCC) {
  508. char * ParmBuffer; /* Temporary buffer to hold for output to file */
  509. int options_exit; /* Option flag for MQsprintf_X (for chained exits) */
  510. int options; /* Option flag for MQsprintf_X */
  511. char work[256];
  512. work[0]='\0';
  513.  
  514. /* Initialise return codes */
  515. *iCC = MQCC_OK;
  516.  
  517. if ( !(ParmBuffer = (char *) malloc(PBSIZE) )) {
  518. fprintf(stderr, "(channel.c) Failed to allocate %d bytes \n", PBSIZE);
  519. exit(2);
  520. }
  521. /* Consul stuff */
  522. char *con_pretext = NULL;//[]="<<consul_kv>>";
  523. int mlen = PBSIZE;
  524. if (!(con_pretext = (char *)malloc(mlen))) {
  525. fprintf(stderr, "(mqutils.c) Error allocating %d bytes in MQsprintf\n",
  526. mlen);
  527. exit(2);
  528. }
  529. memset(con_pretext, '\0', mlen);
  530. strcpy(con_pretext,"<<consul_pretext>>/");
  531. //MQsprintf_X(ParmBuffer, "CHANNEL/%s/", pAuthInfoDefn->AuthInfoName, MQ_AUTH_INFO_NAME_LENGTH, options);
  532. //strcat(con_pretext, ParmBuffer);
  533. //printf("\n##CONSULCHANNEL %sv",con_pretext);
  534.  
  535. /* end consul stuff */
  536. /* v510 removes open from here ... fp = fopen( fileName, OPENMODE ); */
  537.  
  538. /* v601 setup options for oneLine operation */
  539. options = MQSPRINTF_X_DOUBLE_QUOTES + MQSPRINTF_X_NO_TRAILING_BLANKS;
  540. if (!oneLine)
  541. options += MQSPRINTF_X_LINE_BREAKS;
  542.  
  543. /* ----------------------------------------------------------------- */
  544. /* Add ChannelName and Type to file */
  545. /* If unrecognised type then ignore this defintition, return warning */
  546. /* ----------------------------------------------------------------- */
  547.  
  548. if (twolines)
  549. fputs("* ", fp);
  550.  
  551. switch (pChlDefn->ChannelType) {
  552. case MQCHT_SENDER:
  553. MQsprintf_X(ParmBuffer, "CHANNEL/SDR/%s/",
  554. pChlDefn->ChannelName, MQ_CHANNEL_NAME_LENGTH, options);
  555. break;
  556. case MQCHT_SERVER:
  557. MQsprintf_X(ParmBuffer, "DCHANNEL/SVR/%s/",
  558. pChlDefn->ChannelName, MQ_CHANNEL_NAME_LENGTH, options);
  559. break;
  560. case MQCHT_RECEIVER:
  561. MQsprintf_X(ParmBuffer, "CHANNEL/RCVR/%s/",
  562. pChlDefn->ChannelName, MQ_CHANNEL_NAME_LENGTH, options);
  563. break;
  564. case MQCHT_REQUESTER:
  565. MQsprintf_X(ParmBuffer, "CHANNEL/RQSTR/%s/",
  566. pChlDefn->ChannelName, MQ_CHANNEL_NAME_LENGTH, options);
  567. break;
  568. case MQCHT_SVRCONN:
  569. MQsprintf_X(ParmBuffer, "CHANNEL/SVRCONN/%s/",
  570. pChlDefn->ChannelName, MQ_CHANNEL_NAME_LENGTH, options);
  571. break;
  572. case MQCHT_CLNTCONN:
  573. MQsprintf_X(ParmBuffer, "CHANNEL/CLNTCONN/%s/",
  574. pChlDefn->ChannelName, MQ_CHANNEL_NAME_LENGTH, options);
  575. break;
  576. /* [v51] start v51 attributes */
  577. #if defined(MQCHT_CLUSRCVR)
  578. case MQCHT_CLUSRCVR:
  579. if (UserVersion>=MQCMDL_LEVEL_510) {
  580. MQsprintf_X(ParmBuffer, "CHANNEL/CLUSRCVR/%s/",
  581. pChlDefn->ChannelName, MQ_CHANNEL_NAME_LENGTH, options);
  582. } else {
  583. return; /* user doesn't want V51 stuff */
  584. }/* End if*/
  585. break;
  586. #endif
  587.  
  588. #if defined(MQCHT_CLUSSDR)
  589. case MQCHT_CLUSSDR:
  590. if (UserVersion>=MQCMDL_LEVEL_510) {
  591. MQsprintf_X(ParmBuffer, "CHANNEL/CLUSSDR/%s/",
  592. pChlDefn->ChannelName, MQ_CHANNEL_NAME_LENGTH, options);
  593. } else {
  594. return; /* user doesn't want V51 stuff */
  595. }/* End if*/
  596. break;
  597. #endif
  598. /* [v51] end of V51 channel types */
  599.  
  600. default:
  601. *iCC = WARNING;
  602. if (noisy)
  603. fprintf(stderr, "(channel.c) Unknown channel type = %ld \n",
  604. pChlDefn->ChannelType);
  605. } /* endswitch */
  606. strcat(con_pretext, ParmBuffer);
  607. //fputs(ParmBuffer, fp);
  608.  
  609. #if defined (MQCA_ALTERATION_DATE)
  610. if (header && (!oneLine || twolines)) {
  611. MQsprintf_X(ParmBuffer, "* ALTDATE (%s) ", pChlDefn->AlterationDate,
  612. MQ_CREATION_DATE_LENGTH, options);
  613. //fputs(ParmBuffer, fp);
  614. MQsprintf_X(ParmBuffer, "* ALTTIME (%s) ", pChlDefn->AlterationTime,
  615. MQ_CREATION_TIME_LENGTH, options);
  616. //fputs(ParmBuffer, fp);
  617. }
  618. #endif
  619.  
  620. switch (pChlDefn->TransportType) {
  621. case MQXPT_LU62:
  622. sprintf(ParmBuffer, "TRPTYPE LU62");
  623. fputs("\n",fp);
  624. fputs(con_pretext, fp);
  625. fputs(ParmBuffer, fp);
  626. if (pChlDefn->ChannelType != MQCHT_RECEIVER && pChlDefn->ChannelType
  627. != MQCHT_SVRCONN) {
  628. MQsprintf_X(ParmBuffer, "MODENAME '%s'",
  629. pChlDefn->ModeName, MQ_MODE_NAME_LENGTH, options);
  630. fputs("\n",fp);
  631. fputs(con_pretext, fp);
  632. fputs(ParmBuffer, fp);
  633. MQsprintf_X(ParmBuffer, "TPNAME '%s'", pChlDefn->TpName,
  634. MQ_TP_NAME_LENGTH, options);
  635. fputs("\n",fp);
  636. fputs(con_pretext, fp);
  637. fputs(ParmBuffer, fp);
  638. }
  639. break;
  640. case MQXPT_TCP:
  641. sprintf(ParmBuffer, "TRPTYPE TCP");
  642. fputs("\n",fp);
  643. fputs(con_pretext, fp);
  644. fputs(ParmBuffer, fp);
  645. break;
  646. case MQXPT_NETBIOS:
  647. sprintf(ParmBuffer, "TRPTYPE NETBIOS");
  648. fputs("\n",fp);
  649. fputs(con_pretext, fp);
  650. fputs(ParmBuffer, fp);
  651. break;
  652. #if defined (MQXPT_SPX)
  653. case MQXPT_SPX: /* [WMS] added for unix & dec */
  654. sprintf(ParmBuffer, "TRPTYPE SPX");
  655. fputs("\n",fp);
  656. fputs(con_pretext, fp);
  657. fputs(ParmBuffer, fp);
  658. break;
  659. #endif
  660. #if defined (MQXPT_DECNET)
  661. case MQXPT_DECNET:
  662. sprintf(ParmBuffer, "TRPTYPE DECNET");
  663. fputs("\n",fp);
  664. fputs(con_pretext, fp);
  665. fputs(ParmBuffer, fp);
  666. break;
  667. #endif
  668. #if defined (MQXPT_UDP)
  669. case MQXPT_UDP:
  670. sprintf(ParmBuffer, "TRPTYPE UPD");
  671. fputs("\n",fp);
  672. fputs(con_pretext, fp);
  673. fputs(ParmBuffer, fp);
  674. break;
  675. #endif
  676. } /* endswitch */
  677.  
  678. /* ------------------------------------------------------------- */
  679. /* [v51] Write out options in logical groups, based on cmd level */
  680. /* requested by user and channel types. */
  681. /* ------------------------------------------------------------- */
  682.  
  683. if (UserVersion>=MQCMDL_LEVEL_500 && (pChlDefn->ChannelType == MQCHT_SERVER
  684. || pChlDefn->ChannelType == MQCHT_SENDER
  685. #if defined (MQCHT_CLUSSDR)
  686. || pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  687. == MQCHT_CLUSRCVR
  688. #endif
  689. )) {
  690. sprintf(ParmBuffer, "BATCHINT %ld", pChlDefn->BatchInterval);
  691. if ( strcmp(ParmBuffer,"BATCHINT 0") != 0){
  692. fputs("\n",fp);
  693. fputs(con_pretext, fp);
  694. fputs(ParmBuffer, fp);
  695. }
  696.  
  697. /* [v530] Batchb for SDR, SVR, CLUSSDR and CLUSSVR */
  698. #if defined (MQIACH_BATCH_HB)
  699. if (UserVersion>=MQCMDL_LEVEL_530) {
  700. sprintf(ParmBuffer, "BATCHHB %ld", pChlDefn->BatchHB);
  701. if ( strcmp(ParmBuffer,"BATCHHB 0") != 0){
  702. fputs("\n",fp);
  703. fputs(con_pretext, fp);
  704. fputs(ParmBuffer, fp);
  705. }
  706. }
  707. #endif
  708. }
  709.  
  710. if (pChlDefn->ChannelType == MQCHT_SENDER || pChlDefn->ChannelType
  711. == MQCHT_SERVER || pChlDefn->ChannelType == MQCHT_RECEIVER
  712. || pChlDefn->ChannelType == MQCHT_REQUESTER
  713. #if defined (MQCHT_CLUSSDR)
  714. || pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  715. == MQCHT_CLUSRCVR
  716. #endif
  717. ) {
  718.  
  719. sprintf(ParmBuffer, "BATCHSZ %ld", pChlDefn->BatchSize);
  720. if ( strcmp(ParmBuffer,"BATCHSZ 50") != 0){
  721. fputs("\n",fp);
  722. fputs(con_pretext, fp);
  723. fputs(ParmBuffer, fp);
  724. }
  725. }
  726.  
  727. #if defined (MQCHT_CLUSSDR)
  728. if (UserVersion>=MQCMDL_LEVEL_510 && (pChlDefn->ChannelType
  729. == MQCHT_CLUSSDR || pChlDefn->ChannelType == MQCHT_CLUSRCVR
  730.  
  731. )) {
  732.  
  733. MQsprintf_X(ParmBuffer, "CLUSTER('%s')", pChlDefn->ClusterName,
  734. MQ_CLUSTER_NAME_LENGTH, options);
  735. fputs("\n",fp);
  736. fputs(con_pretext, fp);
  737. fputs(ParmBuffer, fp);
  738.  
  739. MQsprintf_X(ParmBuffer, "CLUSNL('%s')",
  740. pChlDefn->ClusterNameList, MQ_CLUSTER_NAME_LENGTH, options);
  741. if ( strcmp(ParmBuffer,"CLUSNL ' '") != 0){
  742. fputs("\n",fp);
  743. fputs(con_pretext, fp);
  744. fputs(ParmBuffer, fp);
  745. }
  746.  
  747. }
  748. #endif
  749.  
  750. if (pChlDefn->ChannelType == MQCHT_SENDER || pChlDefn->ChannelType
  751. == MQCHT_REQUESTER || pChlDefn->ChannelType == MQCHT_CLNTCONN
  752. || pChlDefn->ChannelType == MQCHT_SERVER
  753. #if defined (MQCHT_CLUSSDR)
  754. || pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  755. == MQCHT_CLUSRCVR
  756. #endif
  757. ) {
  758.  
  759. MQsprintf_X(ParmBuffer, "CONNAME '%s'",
  760. pChlDefn->ConnectionName, MQ_CONN_NAME_LENGTH, options);
  761. fputs("\n",fp);
  762. fputs(con_pretext, fp);
  763. fputs(ParmBuffer, fp);
  764.  
  765. /* [v530] Locladdr for SDR, SVR, RQSTR, CLNTCONN, CLUSSDR, CLUSRCVR */
  766. #if defined (MQCACH_LOCAL_ADDRESS)
  767. if (UserVersion>=MQCMDL_LEVEL_530) {
  768. MQsprintf_X(ParmBuffer, "LOCLADDR '%s'",
  769. pChlDefn->LocalAddr, MQ_LOCAL_ADDRESS_LENGTH, options);
  770. if ( strcmp(ParmBuffer,"LOCLADDR ' '") != 0){
  771. fputs("\n",fp);
  772. fputs(con_pretext, fp);
  773. fputs(ParmBuffer, fp);
  774. }
  775. }
  776. #endif
  777.  
  778. }
  779.  
  780. if (pChlDefn->ChannelType == MQCHT_SENDER || pChlDefn->ChannelType
  781. == MQCHT_SERVER
  782. #if defined (MQCHT_CLUSSDR)
  783. || pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  784. == MQCHT_CLUSRCVR
  785. #endif
  786. ) {
  787.  
  788. if (pChlDefn->DataConversion == MQCDC_NO_SENDER_CONVERSION)
  789. sprintf(ParmBuffer, "CONVERT NO");
  790. else
  791. sprintf(ParmBuffer, "CONVERT YES");
  792. fputs("\n",fp);
  793. fputs(con_pretext, fp);
  794. fputs(ParmBuffer, fp);
  795.  
  796. }
  797.  
  798. MQsprintf_X(ParmBuffer, "DESCR '%s'", pChlDefn->ChannelDesc,
  799. MQ_CHANNEL_DESC_LENGTH, options);
  800. if ( strcmp(ParmBuffer,"DESCR ' '") == 0){
  801. fputs("\n",fp);
  802. fputs(con_pretext, fp);
  803. fputs("DESCR 'generated from mq2consul utility'", fp);
  804. }
  805. else {
  806. fputs("\n",fp);
  807. fputs(con_pretext, fp);
  808. fputs(ParmBuffer, fp);
  809. }
  810.  
  811. if (pChlDefn->ChannelType == MQCHT_SENDER || pChlDefn->ChannelType
  812. == MQCHT_SERVER
  813. #if defined (MQCHT_CLUSSDR)
  814. || pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  815. == MQCHT_CLUSRCVR
  816. #endif
  817. || (pChlDefn->ChannelType == MQCHT_SVRCONN && platform == MQPL_MVS )) {
  818.  
  819. sprintf(ParmBuffer, "DISCINT %ld", pChlDefn->DiscInterval);
  820. fputs("\n",fp);
  821. fputs(con_pretext, fp);
  822. fputs(ParmBuffer, fp);
  823. }
  824.  
  825. if (UserVersion>=MQCMDL_LEVEL_500) {
  826. sprintf(ParmBuffer, "HBINT %ld",pChlDefn->HeartbeatInterval);
  827. if ( strcmp(ParmBuffer,"HBINT 300") == 0){
  828. fputs("\n",fp);
  829. fputs(con_pretext, fp);
  830. fputs(ParmBuffer, fp);
  831. }
  832. }
  833.  
  834. if (pChlDefn->ChannelType == MQCHT_SENDER || pChlDefn->ChannelType
  835. == MQCHT_SERVER
  836. #if defined (MQCHT_CLUSSDR)
  837. || pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  838. == MQCHT_CLUSRCVR
  839. #endif
  840. ) {
  841.  
  842. sprintf(ParmBuffer, "LONGRTY %ld", pChlDefn->LongRetryCount);
  843. if ( strcmp(ParmBuffer,"LONGRTY 999999999") == 0){
  844. fputs("\n",fp);
  845. fputs(con_pretext, fp);
  846. fputs(ParmBuffer, fp);
  847. }
  848.  
  849. sprintf(ParmBuffer, "LONGTMR %ld",pChlDefn->LongRetryInterval);
  850. if ( strcmp(ParmBuffer,"LONGTMR 1200") == 0){
  851. fputs("\n",fp);
  852. fputs(con_pretext, fp);
  853. fputs(ParmBuffer, fp);
  854. }
  855.  
  856. sprintf(ParmBuffer, "SHORTRTY %ld", pChlDefn->ShortRetryCount);
  857. if ( strcmp(ParmBuffer,"SHORTRTY 10") == 0){
  858. fputs("\n",fp);
  859. fputs(con_pretext, fp);
  860. fputs(ParmBuffer, fp);
  861. }
  862.  
  863. sprintf(ParmBuffer, "SHORTTMR %ld",pChlDefn->ShortRetryInterval);
  864. if ( strcmp(ParmBuffer,"SHORTTMR 60") == 0){
  865. fputs("\n",fp);
  866. fputs(con_pretext, fp);
  867. fputs(ParmBuffer, fp);
  868. }
  869.  
  870. }
  871.  
  872. sprintf(ParmBuffer, "MAXMSGL %ld", pChlDefn->MaxMsgLength);
  873. if ( strcmp(ParmBuffer,"MAXMSGL 4194304") == 0){
  874. fputs("\n",fp);
  875. fputs(con_pretext, fp);
  876. fputs(ParmBuffer, fp);
  877. }
  878.  
  879. /* Note: MCANAME can only be set to blanks, so we don't bother to */
  880. /* write it to the output file . */
  881.  
  882. if (platform != MQPL_OS400 && platform != MQPL_MVS && ( /* not the 400 platform */
  883. pChlDefn->ChannelType == MQCHT_SENDER || pChlDefn->ChannelType
  884. == MQCHT_SERVER || pChlDefn->ChannelType == MQCHT_REQUESTER
  885. #if defined (MQCHT_CLUSSDR)
  886. || pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  887. == MQCHT_CLUSRCVR
  888. #endif
  889. )) {
  890.  
  891. if (pChlDefn->MCAType == MQMCAT_PROCESS)
  892. sprintf(ParmBuffer, "MCATYPE PROCESS");
  893. else
  894. sprintf(ParmBuffer, "MCATYPE THREAD");
  895. fputs("\n",fp);
  896. fputs(con_pretext, fp);
  897. fputs(ParmBuffer, fp);
  898.  
  899. }
  900.  
  901. if (pChlDefn->ChannelType != MQCHT_CLNTCONN) {
  902.  
  903. MQsprintf_X(ParmBuffer, "MCAUSER '%s'",
  904. pChlDefn->MCAUserIdentifier, XZMCAUSERLEN, options);
  905. if ( strcmp(ParmBuffer,"MCAUSER ' '") == 0){
  906. fputs("\n",fp);
  907. fputs(con_pretext, fp);
  908. fputs(ParmBuffer, fp);
  909. }
  910.  
  911. }
  912.  
  913. if (pChlDefn->ChannelType == MQCHT_RECEIVER || pChlDefn->ChannelType
  914. == MQCHT_REQUESTER
  915. #if defined (MQCHT_CLUSRCVR)
  916. || pChlDefn->ChannelType == MQCHT_CLUSRCVR
  917. #endif
  918. ) {
  919.  
  920. /* [v530] Depending on whether we're dealing with a string */
  921. /* or chained exits, pass the correct flags to MQsprintf_X */
  922. options_exit = MQSPRINTF_X_NO_TRAILING_BLANKS;
  923. if (!oneLine)
  924. options_exit += MQSPRINTF_X_LINE_BREAKS;
  925.  
  926. if (!pChlDefn->MsgRetryUserDataListFlag) {
  927. options_exit += MQSPRINTF_X_DOUBLE_QUOTES;
  928. MQsprintf_X(ParmBuffer, "MRDATA '%s'",
  929. pChlDefn->MsgRetryUserData, MQ_EXIT_DATA_LENGTH,
  930. options_exit);
  931. } else {
  932. MQsprintf_X(ParmBuffer, "MRDATA %s",
  933. pChlDefn->MsgRetryUserData, MQ_TOTAL_EXIT_DATA_LENGTH,
  934. options_exit);
  935. }
  936. if ( strcmp(ParmBuffer,"MRDATA ' '") == 0){
  937. fputs("\n",fp);
  938. fputs(con_pretext, fp);
  939. fputs(ParmBuffer, fp);
  940. }
  941.  
  942. /* [v530] Depending on whether we're dealing with a string */
  943. /* or chained exits, pass the correct flags to MQsprintf_X */
  944.  
  945. options_exit = MQSPRINTF_X_NO_TRAILING_BLANKS;
  946. if (!oneLine)
  947. options_exit += MQSPRINTF_X_LINE_BREAKS;
  948.  
  949. if (!pChlDefn->MsgRetryExitListFlag) {
  950. options_exit += MQSPRINTF_X_DOUBLE_QUOTES;
  951. MQsprintf_X(ParmBuffer, "MREXIT '%s'",
  952. pChlDefn->MsgRetryExit, MQ_EXIT_NAME_LENGTH, options_exit);
  953. } else {
  954. MQsprintf_X(ParmBuffer, "MREXIT %s",
  955. pChlDefn->MsgRetryExit, MQ_TOTAL_EXIT_NAME_LENGTH,
  956. options_exit);
  957. }
  958. if ( strcmp(ParmBuffer,"MREXIT ' '") == 0){
  959. fputs("\n",fp);
  960. fputs(con_pretext, fp);
  961. fputs(ParmBuffer, fp);
  962. }
  963.  
  964.  
  965. sprintf(ParmBuffer, "MRRTY %ld", pChlDefn->MsgRetryCount);
  966. if ( strcmp(ParmBuffer,"MREXIT ' '") == 0){
  967. fputs("\n",fp);
  968. fputs(con_pretext, fp);
  969. fputs(ParmBuffer, fp);
  970. }
  971. sprintf(ParmBuffer, "MRTMR %ld", pChlDefn->MsgRetryInterval);
  972. if ( strcmp(ParmBuffer,"MRTMR 1000") == 0){
  973. fputs("\n",fp);
  974. fputs(con_pretext, fp);
  975. fputs(ParmBuffer, fp);
  976. }
  977. }
  978.  
  979. if (pChlDefn->ChannelType != MQCHT_CLNTCONN && pChlDefn->ChannelType
  980. != MQCHT_SVRCONN) {
  981.  
  982. /* [v530] Depending on whether we're dealing with a string */
  983. /* or chained exits, pass the correct flags to MQsprintf_X */
  984.  
  985. options_exit = MQSPRINTF_X_NO_TRAILING_BLANKS;
  986. if (!oneLine)
  987. options_exit += MQSPRINTF_X_LINE_BREAKS;
  988.  
  989. if (!pChlDefn->MsgUserDataListFlag) {
  990. options_exit += MQSPRINTF_X_DOUBLE_QUOTES;
  991. MQsprintf_X(ParmBuffer, "MSGDATA '%s'",
  992. pChlDefn->MsgUserData, MQ_EXIT_DATA_LENGTH, options_exit);
  993. } else {
  994. MQsprintf_X(ParmBuffer, "MSGDATA %s",
  995. pChlDefn->MsgUserData, MQ_TOTAL_EXIT_DATA_LENGTH,
  996. options_exit);
  997. }
  998. if ( strcmp(ParmBuffer,"MSGDATA ' '") == 0){
  999. fputs("\n",fp);
  1000. fputs(con_pretext, fp);
  1001. fputs(ParmBuffer, fp);
  1002. }
  1003.  
  1004.  
  1005. /* [v530] Depending on whether we're dealing with a /400 */
  1006. /* or chained exits, pass the correct flags to MQsprintf_X */
  1007. options_exit = 0;
  1008. if (!oneLine)
  1009. options_exit = MQSPRINTF_X_LINE_BREAKS;
  1010. /* if (MQAT_DEFAULT != MQAT_OS400) */
  1011. if (platform != MQPL_OS400)
  1012. options_exit += MQSPRINTF_X_NO_TRAILING_BLANKS;
  1013.  
  1014. if (!pChlDefn->MsgExitListFlag) {
  1015. options_exit += MQSPRINTF_X_DOUBLE_QUOTES;
  1016. MQsprintf_X(ParmBuffer, "MSGEXIT '%s'", pChlDefn->MsgExit,
  1017. MQ_EXIT_NAME_LENGTH, options_exit);
  1018. } else {
  1019. MQsprintf_X(ParmBuffer, "MSGEXIT %s", pChlDefn->MsgExit,
  1020. MQ_TOTAL_EXIT_NAME_LENGTH, options_exit);
  1021. }
  1022. if ( strcmp(ParmBuffer,"MSGEXIT ' '") == 0){
  1023. fputs("\n",fp);
  1024. fputs(con_pretext, fp);
  1025. fputs(ParmBuffer, fp);
  1026. }
  1027.  
  1028. }
  1029.  
  1030. #if defined (MQCHT_CLUSRCVR)
  1031. if (UserVersion>=MQCMDL_LEVEL_510 && (pChlDefn->ChannelType
  1032. == MQCHT_CLUSRCVR )) {
  1033. sprintf(ParmBuffer, "NETPRTY %ld", pChlDefn->NetworkPriority);
  1034. if ( strcmp(ParmBuffer,"NETPRTY 0") == 0){
  1035. fputs("\n",fp);
  1036. fputs(con_pretext, fp);
  1037. fputs(ParmBuffer, fp);
  1038. }
  1039. } /* end of channel = cluster */
  1040. #endif
  1041.  
  1042. if (UserVersion>=MQCMDL_LEVEL_500 && (pChlDefn->ChannelType == MQCHT_SENDER
  1043. || pChlDefn->ChannelType == MQCHT_SERVER || pChlDefn->ChannelType
  1044. == MQCHT_RECEIVER || pChlDefn->ChannelType == MQCHT_REQUESTER
  1045. #if defined (MQCHT_CLUSSDR)
  1046. || pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  1047. == MQCHT_CLUSRCVR
  1048. #endif
  1049. )) {
  1050. #if defined (MQNPMS_NORMAL)
  1051. if (pChlDefn->NonPersistentMsgSpeed == MQNPMS_NORMAL)
  1052. {
  1053. sprintf(ParmBuffer, "NPMSPEED NORMAL");
  1054. fputs("\n",fp);
  1055. fputs(con_pretext, fp);
  1056. fputs(ParmBuffer, fp);
  1057. }
  1058. else
  1059. sprintf(ParmBuffer, "NPMSPEED FAST");
  1060.  
  1061. }
  1062. #endif
  1063. }
  1064.  
  1065.  
  1066.  
  1067. if (pChlDefn->ChannelType == MQCHT_RECEIVER || pChlDefn->ChannelType
  1068. == MQCHT_REQUESTER
  1069. /* doc says svrconn are okay for putaut ... doesn't make sense to me */
  1070. /* and also doesn't work !! */
  1071. /* || pChlDefn->ChannelType == MQCHT_SVRCONN */
  1072. #if defined (MQCHT_CLUSRCVR)
  1073. || pChlDefn->ChannelType == MQCHT_CLUSRCVR
  1074. #endif
  1075. ) {
  1076.  
  1077. switch (pChlDefn->PutAuthority) {
  1078. case MQPA_DEFAULT:
  1079. sprintf(ParmBuffer, "PUTAUT DEF");
  1080. break;
  1081. case MQPA_CONTEXT:
  1082. sprintf(ParmBuffer, "PUTAUT CTX");
  1083. break;
  1084. #if defined (MQPA_ONLY_MCA)
  1085. case MQPA_ONLY_MCA:
  1086. sprintf(ParmBuffer, "PUTAUT ONLYMCA");
  1087. break;
  1088. #endif
  1089. #if defined (MQPA_ALTERNATE_OR_MCA)
  1090. case MQPA_ALTERNATE_OR_MCA:
  1091. sprintf(ParmBuffer, "PUTAUT ALTMCA");
  1092. break;
  1093. #endif
  1094. default:
  1095. sprintf(ParmBuffer, "PUTAUT %ld?",
  1096. pChlDefn->PutAuthority);
  1097. break;
  1098. }/* End switch*/
  1099.  
  1100. if ( strcmp(ParmBuffer,"PUTAUT DEF") == 0){
  1101. fputs("\n",fp);
  1102. fputs(con_pretext, fp);
  1103. fputs(ParmBuffer, fp);
  1104. }
  1105. }
  1106.  
  1107. if (pChlDefn->ChannelType == MQCHT_CLNTCONN) {
  1108.  
  1109. MQsprintf_X(ParmBuffer, "QMNAME('%s')", pChlDefn->QMgrName,
  1110. MQ_Q_MGR_NAME_LENGTH, options);
  1111. if ( strcmp(ParmBuffer,"QMNAME ' '") == 0){
  1112. fputs("\n",fp);
  1113. fputs(con_pretext, fp);
  1114. fputs(ParmBuffer, fp);
  1115. }
  1116.  
  1117. }
  1118.  
  1119. /* [v530] Depending on whether we're dealing with a string */
  1120. /* or chained exits, pass the correct flags to MQsprintf_X */
  1121.  
  1122. options_exit = MQSPRINTF_X_NO_TRAILING_BLANKS;
  1123. if (!oneLine)
  1124. options_exit += MQSPRINTF_X_LINE_BREAKS;
  1125.  
  1126. if (!pChlDefn->ReceiveUserDataListFlag) {
  1127. options_exit += MQSPRINTF_X_DOUBLE_QUOTES;
  1128. MQsprintf_X(ParmBuffer, "RCVDATA '%s'",
  1129. pChlDefn->ReceiveUserData, MQ_EXIT_DATA_LENGTH, options_exit);
  1130. } else {
  1131. MQsprintf_X(ParmBuffer, "RCVDATA %s",
  1132. pChlDefn->ReceiveUserData, MQ_TOTAL_EXIT_DATA_LENGTH,
  1133. options_exit);
  1134. }
  1135. if ( strcmp(ParmBuffer,"RCVDATA ' '") == 0){
  1136. fputs("\n",fp);
  1137. fputs(con_pretext, fp);
  1138. fputs(ParmBuffer, fp);
  1139. }
  1140. /* [v530] Depending on whether we're dealing with a /400 */
  1141. /* or chained exits, pass the correct flags to MQsprintf_X */
  1142. options_exit = 0;
  1143. if (!oneLine)
  1144. options_exit = MQSPRINTF_X_LINE_BREAKS;
  1145. /* if (MQAT_DEFAULT != MQAT_OS400) */
  1146. if (platform != MQPL_OS400)
  1147. options_exit += MQSPRINTF_X_NO_TRAILING_BLANKS;
  1148.  
  1149. if (!pChlDefn->ReceiveExitListFlag) {
  1150. options_exit += MQSPRINTF_X_DOUBLE_QUOTES;
  1151. MQsprintf_X(ParmBuffer, "RCVEXIT '%s'", pChlDefn->ReceiveExit,
  1152. MQ_EXIT_NAME_LENGTH, options_exit);
  1153. } else {
  1154. MQsprintf_X(ParmBuffer, "RCVEXIT %s", pChlDefn->ReceiveExit,
  1155. MQ_TOTAL_EXIT_NAME_LENGTH, options_exit);
  1156. }
  1157. if ( strcmp(ParmBuffer,"RCVEXIT ' '") == 0){
  1158. fputs("\n",fp);
  1159. fputs(con_pretext, fp);
  1160. fputs(ParmBuffer, fp);
  1161. }
  1162.  
  1163. MQsprintf_X(ParmBuffer, "SCYDATA '%s'",
  1164. pChlDefn->SecurityUserData, MQ_EXIT_DATA_LENGTH, options);
  1165. if ( strcmp(ParmBuffer,"SCYDATA ' '") == 0){
  1166. fputs("\n",fp);
  1167. fputs(con_pretext, fp);
  1168. fputs(ParmBuffer, fp);
  1169. }
  1170.  
  1171. /* [v530] Depending on whether we're dealing with a /400 */
  1172. /* or chained exits, pass the correct flags to MQsprintf_X */
  1173. options_exit = MQSPRINTF_X_DOUBLE_QUOTES;
  1174. if (!oneLine)
  1175. options_exit += MQSPRINTF_X_LINE_BREAKS;
  1176. /* if (MQAT_DEFAULT != MQAT_OS400) */
  1177. if (platform != MQPL_OS400)
  1178. options_exit += MQSPRINTF_X_NO_TRAILING_BLANKS;
  1179.  
  1180. MQsprintf_X(ParmBuffer, "SCYEXIT '%s'", pChlDefn->SecurityExit,
  1181. MQ_EXIT_NAME_LENGTH, options_exit);
  1182. if ( strcmp(ParmBuffer,"SCYEXIT ' '") == 0){
  1183. fputs("\n",fp);
  1184. fputs(con_pretext, fp);
  1185. fputs(ParmBuffer, fp);
  1186. }
  1187.  
  1188. /* [v530] Depending on whether we're dealing with a string */
  1189. /* or chained exits, pass the correct flags to MQsprintf_X */
  1190.  
  1191. options_exit = MQSPRINTF_X_NO_TRAILING_BLANKS;
  1192. if (!oneLine)
  1193. options_exit += MQSPRINTF_X_LINE_BREAKS;
  1194.  
  1195. if (!pChlDefn->SendUserDataListFlag) {
  1196. options_exit += MQSPRINTF_X_DOUBLE_QUOTES;
  1197. MQsprintf_X(ParmBuffer, "SENDDATA '%s'",
  1198. pChlDefn->SendUserData, MQ_EXIT_DATA_LENGTH, options_exit);
  1199. } else {
  1200. MQsprintf_X(ParmBuffer, "SENDDATA %s", pChlDefn->SendUserData,
  1201. MQ_TOTAL_EXIT_DATA_LENGTH, options_exit);
  1202. }
  1203. if ( strcmp(ParmBuffer,"SENDDATA ' '") == 0){
  1204. fputs("\n",fp);
  1205. fputs(con_pretext, fp);
  1206. fputs(ParmBuffer, fp);
  1207. }
  1208.  
  1209. /* [v530] Depending on whether we're dealing with a /400 */
  1210. /* or chained exits, pass the correct flags to MQsprintf_X */
  1211. options_exit = 0;
  1212. if (!oneLine)
  1213. options_exit = MQSPRINTF_X_LINE_BREAKS;
  1214. /* if (MQAT_DEFAULT != MQAT_OS400) */
  1215. if (platform != MQPL_OS400)
  1216. options_exit += MQSPRINTF_X_NO_TRAILING_BLANKS;
  1217.  
  1218. if (!pChlDefn->SendExitListFlag) {
  1219. options_exit += MQSPRINTF_X_DOUBLE_QUOTES;
  1220. MQsprintf_X(ParmBuffer, "SENDEXIT '%s'", pChlDefn->SendExit,
  1221. MQ_EXIT_NAME_LENGTH, options_exit);
  1222. } else {
  1223. MQsprintf_X(ParmBuffer, "SENDEXIT %s", pChlDefn->SendExit,
  1224. MQ_TOTAL_EXIT_NAME_LENGTH, options_exit);
  1225. }
  1226. if ( strcmp(ParmBuffer,"SENDEXIT ' '") == 0){
  1227. fputs("\n",fp);
  1228. fputs(con_pretext, fp);
  1229. fputs(ParmBuffer, fp);
  1230. }
  1231.  
  1232. if (pChlDefn->ChannelType == MQCHT_SENDER || pChlDefn->ChannelType
  1233. == MQCHT_SERVER || pChlDefn->ChannelType == MQCHT_RECEIVER
  1234. || pChlDefn->ChannelType == MQCHT_REQUESTER
  1235. #if defined (MQCHT_CLUSSDR)
  1236. || pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  1237. == MQCHT_CLUSRCVR
  1238. #endif
  1239. ) {
  1240.  
  1241. sprintf(ParmBuffer, "SEQWRAP %ld", pChlDefn->SeqNumberWrap);
  1242. if ( strcmp(ParmBuffer,"SEQWRAP 999999999") == 0){
  1243. fputs("\n",fp);
  1244. fputs(con_pretext, fp);
  1245. fputs(ParmBuffer, fp);
  1246. }
  1247.  
  1248. }
  1249.  
  1250. /* if (MQAT_DEFAULT != MQAT_OS400 && ( */
  1251. if (platform != MQPL_OS400 && platform != MQPL_MVS
  1252. && (pChlDefn->ChannelType == MQCHT_SENDER || pChlDefn->ChannelType
  1253. == MQCHT_REQUESTER || pChlDefn->ChannelType
  1254. == MQCHT_CLNTCONN || pChlDefn->ChannelType == MQCHT_SERVER
  1255. #if defined (MQCHT_CLUSSDR)
  1256. || pChlDefn->ChannelType == MQCHT_CLUSSDR
  1257. #endif
  1258. )) {
  1259.  
  1260. MQsprintf_X(ParmBuffer, "USERID '%s'",
  1261. pChlDefn->UserIdentifier, MQ_USER_ID_LENGTH, options);
  1262. if ( strcmp(ParmBuffer,"USERID ' '") == 0){
  1263. fputs("\n",fp);
  1264. fputs(con_pretext, fp);
  1265. fputs(ParmBuffer, fp);
  1266. }
  1267. }
  1268.  
  1269. if (pChlDefn->ChannelType == MQCHT_SENDER || pChlDefn->ChannelType
  1270. == MQCHT_SERVER) {
  1271.  
  1272. MQsprintf_X(ParmBuffer, "XMITQ '%s'", pChlDefn->XmitQName,
  1273. MQ_Q_NAME_LENGTH, options);
  1274. fputs("\n",fp);
  1275. fputs(con_pretext, fp);
  1276. fputs(ParmBuffer, fp);
  1277.  
  1278. }
  1279.  
  1280. /* [V520] Include Tandem NSK channel sttribute */
  1281. #ifdef MQIACH_INHIBIT_AUTOSTART
  1282. if ( pChlDefn->ChannelType == MQCHT_SERVER
  1283. || pChlDefn->ChannelType == MQCHT_REQUESTER
  1284. || pChlDefn->ChannelType == MQCHT_SVRCONN
  1285. || pChlDefn->ChannelType == MQCHT_RECEIVER
  1286. ) {
  1287. if ( pChlDefn->InhibitAutostart == MQCFC_AUTOSTART_ALLOWED) {
  1288. sprintf( ParmBuffer, " AUTOSTART(ENABLED) %s" , lineTerm );
  1289. //fputs( ParmBuffer, fp );
  1290. } else {
  1291. sprintf( ParmBuffer, " AUTOSTART(DISABLED) %s" , lineTerm );
  1292. //fputs( ParmBuffer, fp );
  1293. } /* endif */
  1294. }
  1295. #endif
  1296.  
  1297. /* [V530] Include SSL Client Auth Attribute for receiving type chls */
  1298. #ifdef MQIACH_SSL_CLIENT_AUTH
  1299. if (pChlDefn->ChannelType == MQCHT_SERVER || pChlDefn->ChannelType
  1300. == MQCHT_REQUESTER || pChlDefn->ChannelType == MQCHT_SVRCONN
  1301. || pChlDefn->ChannelType == MQCHT_CLUSRCVR || pChlDefn->ChannelType
  1302. == MQCHT_RECEIVER) {
  1303. if (UserVersion >= MQCMDL_LEVEL_530) {
  1304. if (pChlDefn->SslCAuth) {
  1305. sprintf(ParmBuffer, "SSLCAUTH OPTIONAL");
  1306. } else {
  1307. sprintf(ParmBuffer, "SSLCAUTH REQUIRED");
  1308. } /* endif */
  1309. if ( strcmp(ParmBuffer,"SSLCAUTH REQUIRED") == 0){
  1310. fputs("\n",fp);
  1311. fputs(con_pretext, fp);
  1312. fputs(ParmBuffer, fp);
  1313. }
  1314. }
  1315. }
  1316. #endif
  1317.  
  1318. /* [v530] all channel types get SSLCIPH and SSLPEER */
  1319. #if defined (MQCACH_SSL_PEER_NAME)
  1320.  
  1321. if (UserVersion>=MQCMDL_LEVEL_530) {
  1322.  
  1323. MQsprintf_X(ParmBuffer, "SSLCIPH '%s'", pChlDefn->SslCipher,
  1324. MQ_SSL_CIPHER_SPEC_LENGTH, options);
  1325. if ( strcmp(ParmBuffer,"SSLCIPH ' '") == 0){
  1326. fputs("\n",fp);
  1327. fputs(con_pretext, fp);
  1328. fputs(ParmBuffer, fp);
  1329. }
  1330.  
  1331. MQsprintf_X(ParmBuffer, "SSLPEER '%s'", pChlDefn->SslPeer,
  1332. MQ_SSL_PEER_NAME_LENGTH, options);
  1333. if ( strcmp(ParmBuffer,"SSLPEER ' '") == 0){
  1334. fputs("\n",fp);
  1335. fputs(con_pretext, fp);
  1336. fputs(ParmBuffer, fp);
  1337. }
  1338.  
  1339. }
  1340. #endif
  1341.  
  1342. /* [v531b] csd01 on v5.3 adds KAINT to mqsc */
  1343. #if defined (MQIACH_KEEP_ALIVE_INTERVAL)
  1344. if (UserVersion>=MQCMDL_LEVEL_530) {
  1345. if (pChlDefn->KAInt != -999) { /* -999 means we never got it from mqsc */
  1346. if (pChlDefn->KAInt == -1) {
  1347. sprintf(ParmBuffer, "KAINT AUTO");
  1348. } else {
  1349. sprintf(ParmBuffer, "KAINT %ld", pChlDefn->KAInt);
  1350. }
  1351. if ( strcmp(ParmBuffer,"KAINT AUTO") == 0){
  1352. fputs("\n",fp);
  1353. fputs(con_pretext, fp);
  1354. fputs(ParmBuffer, fp);
  1355. }
  1356. pChlDefn -> KAInt = -999; /* special value to indicate not to set KAINT */
  1357. }
  1358. }
  1359. #endif
  1360.  
  1361. #ifdef zzMQV60
  1362.  
  1363. if (UserVersion >= MQCMDL_LEVEL_600 && (pChlDefn->ChannelType
  1364. == MQCHT_SENDER || pChlDefn->ChannelType == MQCHT_SERVER
  1365. || pChlDefn->ChannelType == MQCHT_RECEIVER || pChlDefn->ChannelType
  1366. == MQCHT_REQUESTER || pChlDefn->ChannelType == MQCHT_SVRCONN
  1367. || pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  1368. == MQCHT_CLUSRCVR )) {
  1369. toStrMQMON((char*)&work, pChlDefn->MonChl);
  1370. sprintf(ParmBuffer, "MONCHL %s", work);
  1371. if ( strcmp(ParmBuffer,"MONCHL QMGR") == 0){
  1372. fputs("\n",fp);
  1373. fputs(con_pretext, fp);
  1374. fputs(ParmBuffer, fp);
  1375. }
  1376.  
  1377. }
  1378. if (UserVersion >= MQCMDL_LEVEL_600 && platform != MQPL_MVS
  1379. && (pChlDefn->ChannelType == MQCHT_SENDER || pChlDefn->ChannelType
  1380. == MQCHT_SERVER || pChlDefn->ChannelType == MQCHT_RECEIVER
  1381. || pChlDefn->ChannelType == MQCHT_REQUESTER
  1382. || pChlDefn->ChannelType == MQCHT_CLUSSDR
  1383. || pChlDefn->ChannelType == MQCHT_CLUSRCVR )) {
  1384. toStrMQMON((char*)&work, pChlDefn->StatsChl);
  1385. sprintf(ParmBuffer, "STATCHL %s", work);
  1386. if ( strcmp(ParmBuffer,"STATCHL QMGR") == 0){
  1387. fputs("\n",fp);
  1388. fputs(con_pretext, fp);
  1389. fputs(ParmBuffer, fp);
  1390. }
  1391.  
  1392. }
  1393.  
  1394. if (UserVersion >= MQCMDL_LEVEL_600 && (pChlDefn->ChannelType
  1395. == MQCHT_CLUSSDR || pChlDefn->ChannelType == MQCHT_CLUSRCVR )) {
  1396. sprintf(ParmBuffer, "CLWLPRTY %ld", pChlDefn->Priority);
  1397. if ( strcmp(ParmBuffer,"CLWLPRTY 0") == 0){
  1398. fputs("\n",fp);
  1399. fputs(con_pretext, fp);
  1400. fputs(ParmBuffer, fp);
  1401. }
  1402.  
  1403. sprintf(ParmBuffer, "CLWLRANK %ld", pChlDefn->Rank);
  1404. if ( strcmp(ParmBuffer,"CLWLRANK 0") == 0){
  1405. fputs("\n",fp);
  1406. fputs(con_pretext, fp);
  1407. fputs(ParmBuffer, fp);
  1408. }
  1409.  
  1410. sprintf(ParmBuffer, "CLWLWGHT %ld", pChlDefn->Weight);
  1411. if ( strcmp(ParmBuffer,"CLWLWGHT 50") == 0){
  1412. fputs("\n",fp);
  1413. fputs(con_pretext, fp);
  1414. fputs(ParmBuffer, fp);
  1415. }
  1416.  
  1417. }
  1418.  
  1419. if (UserVersion >= MQCMDL_LEVEL_600) {
  1420. toStrMQComp((char*)work, pChlDefn->MsgComp);
  1421. sprintf(ParmBuffer, "COMPMSG %s", work);
  1422. if ( strcmp(ParmBuffer,"COMPMSG NONE") == 0){
  1423. fputs("\n",fp);
  1424. fputs(con_pretext, fp);
  1425. fputs(ParmBuffer, fp);
  1426. }
  1427.  
  1428. toStrMQComp((char*)work, pChlDefn->HdrComp);
  1429. sprintf(ParmBuffer, "COMPHDR %s", work);
  1430. if ( strcmp(ParmBuffer,"COMPHDR NONE") == 0){
  1431. fputs("\n",fp);
  1432. fputs(con_pretext, fp);
  1433. fputs(ParmBuffer, fp);
  1434. }
  1435. }
  1436.  
  1437. #endif
  1438. #ifdef zzMQV70
  1439. if ( UserVersion >= MQCMDL_LEVEL_700) {
  1440. if (pChlDefn->ChannelType == MQCHT_CLUSSDR || pChlDefn->ChannelType
  1441. == MQCHT_CLUSRCVR || pChlDefn->ChannelType == MQCHT_SENDER
  1442. || pChlDefn->ChannelType == MQCHT_SERVER) {
  1443. switch (pChlDefn->PropCntl) {
  1444. case MQPROP_COMPATIBILITY:
  1445. sprintf(ParmBuffer, "PROPCTL COMPAT");
  1446. //fputs(ParmBuffer, fp);
  1447. break;
  1448. case MQPROP_NONE:
  1449. sprintf(ParmBuffer, "PROPCTL NONE");
  1450. fputs("\n",fp);
  1451. fputs(con_pretext, fp);
  1452. fputs(ParmBuffer, fp);
  1453. break;
  1454. case MQPROP_ALL:
  1455. sprintf(ParmBuffer, "PROPCTL ALL");
  1456. fputs("\n",fp);
  1457. fputs(con_pretext, fp);
  1458. fputs(ParmBuffer, fp);
  1459. break;
  1460. }
  1461. }
  1462.  
  1463. if (pChlDefn->ChannelType == MQCHT_CLNTCONN || pChlDefn->ChannelType
  1464. == MQCHT_SVRCONN) {
  1465. sprintf(ParmBuffer, "SHARECNV %ld", pChlDefn->ShareCnv);
  1466. if ( strcmp(ParmBuffer,"SHARECNV 10") == 0){
  1467. fputs("\n",fp);
  1468. fputs(con_pretext, fp);
  1469. fputs(ParmBuffer, fp);
  1470. }
  1471. }
  1472.  
  1473. if (pChlDefn->ChannelType == MQCHT_SVRCONN) {
  1474. sprintf(ParmBuffer, "MAXINST %ld", pChlDefn->MaxInsts);
  1475. if ( strcmp(ParmBuffer,"MAXINST 999999999") == 0){
  1476. fputs("\n",fp);
  1477. fputs(con_pretext, fp);
  1478. fputs(ParmBuffer, fp);
  1479. }
  1480. sprintf(ParmBuffer, "MAXINSTC %ld", pChlDefn->MaxInstsC);
  1481. if ( strcmp(ParmBuffer,"MAXINSTC 999999999") == 0){
  1482. fputs("\n",fp);
  1483. fputs(con_pretext, fp);
  1484. fputs(ParmBuffer, fp);
  1485. }
  1486. }
  1487.  
  1488. if (pChlDefn->ChannelType == MQCHT_CLNTCONN) {
  1489. switch (pChlDefn->Affinity) {
  1490. case MQCAFTY_PREFERRED:
  1491. sprintf(ParmBuffer, "AFFINITY PREFERRED");
  1492. //fputs(ParmBuffer, fp);
  1493. break;
  1494. case MQCAFTY_NONE:
  1495. sprintf(ParmBuffer, "AFFINITY NONE");
  1496. fputs("\n",fp);
  1497. fputs(con_pretext, fp);
  1498. fputs(ParmBuffer, fp);
  1499. break;
  1500. }
  1501. }
  1502.  
  1503. if (pChlDefn->ChannelType != MQCHT_CLNTCONN &&
  1504. pChlDefn->ChannelType != MQCHT_CLUSRCVR &&
  1505. pChlDefn->ChannelType != MQCHT_CLUSSDR ) {
  1506. switch (pChlDefn->DefCDsp) {
  1507. case MQCHLD_PRIVATE:
  1508. sprintf(ParmBuffer, "DEFCDISP(PRIVATE");
  1509. //fputs(ParmBuffer, fp);
  1510. break;
  1511. case MQCHLD_FIXSHARED:
  1512. sprintf(ParmBuffer, "DEFCDISP(FIXSHARED");
  1513. //fputs(ParmBuffer, fp);
  1514. break;
  1515. case MQCHLD_SHARED:
  1516. sprintf(ParmBuffer, "DEFCDISP(SHARED");
  1517. //fputs(ParmBuffer, fp);
  1518. break;
  1519. }
  1520. }
  1521.  
  1522. if (pChlDefn->ChannelType == MQCHT_CLNTCONN) {
  1523. sprintf(ParmBuffer, "CLNTWGHT %ld", pChlDefn->ClntChlWght);
  1524. if ( strcmp(ParmBuffer,"CLNTWGHT 0") == 0){
  1525. fputs("\n",fp);
  1526. fputs(con_pretext, fp);
  1527. fputs(ParmBuffer, fp);
  1528. }
  1529. }
  1530. }
  1531. #endif
  1532. #if defined(zzzOS)
  1533. if (platform == MQPL_MVS) {
  1534. toStrQSG((char*)&work, pChlDefn->qsgDisp);
  1535. sprintf(ParmBuffer, "QSGDISP(%s", work);
  1536. //fputs(ParmBuffer, fp);
  1537.  
  1538. }
  1539. #endif
  1540.  
  1541. sprintf(ParmBuffer, "REPLACE\n");
  1542. //fputs(ParmBuffer, fp);
  1543.  
  1544. /* v512 -- if -R specified, then create "reset" commands */
  1545. /* v603 -- control different channel types via command line switch */
  1546. if ( ( (pChlDefn->ChannelType == MQCHT_SENDER) && (chlReset & CHLR_SENDER) )
  1547. || ( (pChlDefn->ChannelType == MQCHT_SERVER) && (chlReset
  1548. & CHLR_SERVER ) ) || ( (pChlDefn->ChannelType
  1549. == MQCHT_RECEIVER) && (chlReset & CHLR_RECEIVER ) )
  1550. || ( (pChlDefn->ChannelType == MQCHT_REQUESTER) && (chlReset
  1551. & CHLR_REQUESTER ) )
  1552. #if defined (MQCHT_CLUSSDR)
  1553. || ( (pChlDefn->ChannelType == MQCHT_CLUSSDR) && (chlReset
  1554. & CHLR_CLUSSDR ) ) || ( (pChlDefn->ChannelType
  1555. == MQCHT_CLUSRCVR) && (chlReset & CHLR_CLUSRCVR ) )
  1556. #endif
  1557. ) {
  1558. MQsprintf_X(ParmBuffer, "RESET CHANNEL ('%s') SEQNUM(1)\n",
  1559. pChlDefn->ChannelName, MQ_CHANNEL_NAME_LENGTH,
  1560. MQSPRINTF_X_NO_TRAILING_BLANKS);
  1561. //fputs(ParmBuffer, fp);
  1562.  
  1563. if (!oneLine)
  1564. fputs("\n", fp);
  1565.  
  1566. }
  1567. free(con_pretext);
  1568. free(ParmBuffer);
  1569. return;
  1570. }
  1571.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c:28:10: fatal error: cmqc.h: No such file or directory
 #include <cmqc.h>
          ^~~~~~~~
compilation terminated.
stdout
Standard output is empty