~dsuch/pymqi/lp-507617

« back to all changes in this revision

Viewing changes to src/pymqi.py

  • Committer: Dariusz Suchojad
  • Date: 2009-12-03 19:38:38 UTC
  • mfrom: (6.1.9 lp-444793)
  • Revision ID: dsuch@gefira.pl-20091203193838-okncwm2kinrd1kmd
Reintegrated branch into trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
#
14
14
 
15
15
""" 
16
 
pymqi - Python MQI Wrapper Classes
 
16
PyMQI - Python MQI Wrapper Classes
17
17
 
18
18
These classes wrap the pymqe low level MQI calls. They present an OO
19
19
interface with a passing resemblance MQI C++.
80
80
their MQI counterparts.
81
81
 
82
82
"""
83
 
import pymqe, CMQC, CMQCFC
 
83
 
 
84
# Stdlib
84
85
import struct, exceptions, types, threading
85
86
 
86
 
__version__ = '1.0dev'
 
87
# PyMQI
 
88
import pymqe, CMQC, CMQCFC, CMQXC
 
89
 
 
90
__version__ = '1.0trunk'
87
91
__mqlevels__ = pymqe.__mqlevels__
88
92
__mqbuild__ = pymqe.__mqbuild__
89
93
 
 
94
 
 
95
#
 
96
# 64bit suppport courtesy of Brent S. Elmer, Ph.D. (mailto:webe3vt@aim.com)
 
97
 
98
# On 64 bit machines when MQ is compiled 64bit, MQLONG is an int defined
 
99
# in /opt/mqm/inc/cmqc.h or wherever your MQ installs to.
 
100
#
 
101
# On 32 bit machines, MQLONG is a long and many other MQ data types are set to MQLONG
 
102
#
 
103
# So, set MQLONG_TYPE to 'i' for 64bit MQ and 'l' for 32bit MQ so that the
 
104
# conversion from the Python data types to C data types in the MQ structures
 
105
# will work correctly.
 
106
#
 
107
 
 
108
# Are we running 64 bit?
 
109
if struct.calcsize("P") == 8:
 
110
   MQLONG_TYPE = 'i' # 64 bit
 
111
else:
 
112
   MQLONG_TYPE = 'l' # 32 bit
 
113
 
90
114
#######################################################################
91
115
#
92
116
 
262
286
 
263
287
    def __init__(self, **kw):
264
288
        opts = [['StrucId', CMQC.MQGMO_STRUC_ID, '4s'],
265
 
            ['Version', CMQC.MQGMO_VERSION_1, 'l'],
266
 
            ['Options', CMQC.MQGMO_NO_WAIT, 'l'],
267
 
            ['WaitInterval', 0, 'l'],
268
 
            ['Signal1', 0, 'l'],
269
 
            ['Signal2', 0, 'l'],
 
289
            ['Version', CMQC.MQGMO_VERSION_1, MQLONG_TYPE],
 
290
            ['Options', CMQC.MQGMO_NO_WAIT, MQLONG_TYPE],
 
291
            ['WaitInterval', 0, MQLONG_TYPE],
 
292
            ['Signal1', 0, MQLONG_TYPE],
 
293
            ['Signal2', 0, MQLONG_TYPE],
270
294
            ['ResolvedQName', '', '48s'],
271
 
            ['MatchOptions', CMQC.MQMO_MATCH_MSG_ID+CMQC.MQMO_MATCH_CORREL_ID, 'l'],
 
295
            ['MatchOptions', CMQC.MQMO_MATCH_MSG_ID+CMQC.MQMO_MATCH_CORREL_ID, MQLONG_TYPE],
272
296
            ['GroupStatus', CMQC.MQGS_NOT_IN_GROUP, 'b'], 
273
297
            ['SegmentStatus', CMQC.MQSS_NOT_A_SEGMENT, 'b'],
274
298
            ['Segmentation', CMQC.MQSEG_INHIBITED, 'b'],
275
299
            ['Reserved1', ' ', 'c'],
276
300
            ['MsgToken', '', '16s'],
277
 
            ['ReturnedLength', CMQC.MQRL_UNDEFINED, 'l'],]
 
301
            ['ReturnedLength', CMQC.MQRL_UNDEFINED, MQLONG_TYPE],]
278
302
            
279
303
        if "7.0" in pymqe.__mqlevels__:
280
304
            opts += [
281
 
                ['Reserved2', 0L, 'l'],
 
305
                ['Reserved2', 0L, MQLONG_TYPE],
282
306
                ['MsgHandle', 0L, 'q']]
283
307
                
284
308
        apply(MQOpts.__init__, (self, tuple(opts)), kw)
294
318
    def __init__(self, **kw):
295
319
        opts = [
296
320
            ['StrucId', CMQC.MQPMO_STRUC_ID, '4s'],
297
 
            ['Version', CMQC.MQPMO_VERSION_1, 'l'],
298
 
            ['Options', CMQC.MQPMO_NONE, 'l'],
299
 
            ['Timeout', -1, 'l'],
300
 
            ['Context', 0, 'l'],
301
 
            ['KnownDestCount', 0, 'l'],
302
 
            ['UnknownDestCount', 0, 'l'],
303
 
            ['InvalidDestCount', 0, 'l'],
 
321
            ['Version', CMQC.MQPMO_VERSION_1, MQLONG_TYPE],
 
322
            ['Options', CMQC.MQPMO_NONE, MQLONG_TYPE],
 
323
            ['Timeout', -1, MQLONG_TYPE],
 
324
            ['Context', 0, MQLONG_TYPE],
 
325
            ['KnownDestCount', 0, MQLONG_TYPE],
 
326
            ['UnknownDestCount', 0, MQLONG_TYPE],
 
327
            ['InvalidDestCount', 0, MQLONG_TYPE],
304
328
            ['ResolvedQName', '', '48s'],
305
329
            ['ResolvedQMgrName', '', '48s'],
306
 
            ['RecsPresent', 0, 'l'],
307
 
            ['PutMsgRecFields',  0, 'l'],
308
 
            ['PutMsgRecOffset', 0,'l'],
309
 
            ['ResponseRecOffset', 0, 'l'],
 
330
            ['RecsPresent', 0, MQLONG_TYPE],
 
331
            ['PutMsgRecFields',  0, MQLONG_TYPE],
 
332
            ['PutMsgRecOffset', 0, MQLONG_TYPE],
 
333
            ['ResponseRecOffset', 0, MQLONG_TYPE],
310
334
            ['PutMsgRecPtr', 0, 'P'],
311
335
            ['ResponseRecPtr', 0, 'P']]
312
336
            
314
338
            opts += [
315
339
                ['OriginalMsgHandle', 0L, 'q'],
316
340
                ['NewMsgHandle', 0L, 'q'],
317
 
                ['Action', 0L, 'l'],
318
 
                ['PubLevel', 0L, 'l']]
 
341
                ['Action', 0L, MQLONG_TYPE],
 
342
                ['PubLevel', 0L, MQLONG_TYPE]]
319
343
            
320
344
        apply(MQOpts.__init__, (self, tuple(opts)), kw)
321
345
 
328
352
 
329
353
    def __init__(self, **kw):
330
354
        opts = [['StrucId', CMQC.MQOD_STRUC_ID, '4s'],
331
 
            ['Version', CMQC.MQOD_VERSION_1, 'l'],
332
 
            ['ObjectType', CMQC.MQOT_Q, 'l'],
 
355
            ['Version', CMQC.MQOD_VERSION_1, MQLONG_TYPE],
 
356
            ['ObjectType', CMQC.MQOT_Q, MQLONG_TYPE],
333
357
            ['ObjectName', '', '48s'],
334
358
            ['ObjectQMgrName', '', '48s'],
335
359
            ['DynamicQName', 'AMQ.*', '48s'],
336
360
            ['AlternateUserId', '', '12s'],
337
 
            ['RecsPresent', 0, 'l'],
338
 
            ['KnownDestCount', 0, 'l'],
339
 
            ['UnknownDestCount', 0, 'l'],
340
 
            ['InvalidDestCount', 0, 'l'],
341
 
            ['ObjectRecOffset', 0, 'l'],
342
 
            ['ResponseRecOffset', 0, 'l'],
 
361
            ['RecsPresent', 0, MQLONG_TYPE],
 
362
            ['KnownDestCount', 0, MQLONG_TYPE],
 
363
            ['UnknownDestCount', 0, MQLONG_TYPE],
 
364
            ['InvalidDestCount', 0, MQLONG_TYPE],
 
365
            ['ObjectRecOffset', 0, MQLONG_TYPE],
 
366
            ['ResponseRecOffset', 0, MQLONG_TYPE],
343
367
            ['ObjectRecPtr', 0, 'P'],
344
368
            ['ResponseRecPtr', 0, 'P'],
345
369
            ['AlternateSecurityId', '', '40s'],
348
372
            
349
373
        if "7.0" in pymqe.__mqlevels__:
350
374
            opts += [
351
 
                ['ObjectStringVSPtr', 0L, 'l'],
352
 
                ['ObjectStringVSOffset', 0L, 'l'],
353
 
                ['ObjectStringVSBufSize', 0L, 'l'],
354
 
                ['ObjectStringVSLength', 0L, 'l'],
355
 
                ['ObjectStringVSCCSID', 0L, 'l'],
356
 
                ['SelectionStringVSPtr', 0L, 'l'],
357
 
                ['SelectionStringVSOffset', 0L, 'l'],
358
 
                ['SelectionStringVSBufSize', 0L, 'l'],
359
 
                ['SelectionStringVSLength', 0L, 'l'],
360
 
                ['SelectionStringVSCCSID', 0L, 'l'],
361
 
                ['ResObjectStringVSPtr', 0L, 'l'],
362
 
                ['ResObjectStringVSOffset', 0L, 'l'],
363
 
                ['ResObjectStringVSBufSize', 0L, 'l'],
364
 
                ['ResObjectStringVSLength', 0L, 'l'],
365
 
                ['ResObjectStringVSCCSID', 0L, 'l'],
366
 
                ['ResolvedType', -3L, 'l']]
 
375
            
 
376
                # ObjectString
 
377
                ['ObjectStringVSPtr', 0, 'P'],
 
378
                ['ObjectStringVSOffset', 0L, MQLONG_TYPE],
 
379
                ['ObjectStringVSBufSize', 0L, MQLONG_TYPE],
 
380
                ['ObjectStringVSLength', 0L, MQLONG_TYPE],
 
381
                ['ObjectStringVSCCSID', 0L, MQLONG_TYPE],
 
382
                
 
383
                # SelectionString
 
384
                ['SelectionStringVSPtr', 0, 'P'],
 
385
                ['SelectionStringVSOffset', 0L, MQLONG_TYPE],
 
386
                ['SelectionStringVSBufSize', 0L, MQLONG_TYPE],
 
387
                ['SelectionStringVSLength', 0L, MQLONG_TYPE],
 
388
                ['SelectionStringVSCCSID', 0L, MQLONG_TYPE],
 
389
                
 
390
                # ResObjectString
 
391
                ['ResObjectStringVSPtr', 0, 'P'],
 
392
                ['ResObjectStringVSOffset', 0L, MQLONG_TYPE],
 
393
                ['ResObjectStringVSBufSize', 0L, MQLONG_TYPE],
 
394
                ['ResObjectStringVSLength', 0L, MQLONG_TYPE],
 
395
                ['ResObjectStringVSCCSID', 0L, MQLONG_TYPE],
 
396
                
 
397
                ['ResolvedType', -3L, MQLONG_TYPE]]
 
398
                
 
399
            # For 64bit platforms MQLONG is an int and this pad
 
400
            # needs to be here for WMQ 7.0
 
401
            if MQLONG_TYPE == 'i':
 
402
                opts += [['pad','', '4s']]
367
403
            
368
404
        apply(MQOpts.__init__, (self, tuple(opts)), kw)
369
405
    
378
414
    def __init__(self, **kw):
379
415
        apply(MQOpts.__init__, (self, (
380
416
            ['StrucId', CMQC.MQMD_STRUC_ID, '4s'],
381
 
            ['Version', CMQC.MQMD_VERSION_1, 'l'],
382
 
            ['Report', CMQC.MQRO_NONE, 'l'],
383
 
            ['MsgType', CMQC.MQMT_DATAGRAM, 'l'],
384
 
            ['Expiry', CMQC.MQEI_UNLIMITED, 'l'],
385
 
            ['Feedback', CMQC.MQFB_NONE, 'l'],
386
 
            ['Encoding', CMQC.MQENC_NATIVE, 'l'],
387
 
            ['CodedCharSetId', CMQC.MQCCSI_Q_MGR, 'l'],
 
417
            ['Version', CMQC.MQMD_VERSION_1, MQLONG_TYPE],
 
418
            ['Report', CMQC.MQRO_NONE, MQLONG_TYPE],
 
419
            ['MsgType', CMQC.MQMT_DATAGRAM, MQLONG_TYPE],
 
420
            ['Expiry', CMQC.MQEI_UNLIMITED, MQLONG_TYPE],
 
421
            ['Feedback', CMQC.MQFB_NONE, MQLONG_TYPE],
 
422
            ['Encoding', CMQC.MQENC_NATIVE, MQLONG_TYPE],
 
423
            ['CodedCharSetId', CMQC.MQCCSI_Q_MGR, MQLONG_TYPE],
388
424
            ['Format', '', '8s'],
389
 
            ['Priority', CMQC.MQPRI_PRIORITY_AS_Q_DEF,'l'],
390
 
            ['Persistence', CMQC.MQPER_PERSISTENCE_AS_Q_DEF, 'l'],
 
425
            ['Priority', CMQC.MQPRI_PRIORITY_AS_Q_DEF, MQLONG_TYPE],
 
426
            ['Persistence', CMQC.MQPER_PERSISTENCE_AS_Q_DEF, MQLONG_TYPE],
391
427
            ['MsgId', '', '24s'],
392
428
            ['CorrelId', '', '24s'],
393
 
            ['BackoutCount', 0, 'l'],
 
429
            ['BackoutCount', 0, MQLONG_TYPE],
394
430
            ['ReplyToQ', '', '48s'],
395
431
            ['ReplyToQMgr', '', '48s'],
396
432
            ['UserIdentifier', '', '12s'],
397
433
            ['AccountingToken', '', '32s'],
398
434
            ['ApplIdentityData', '', '32s'],
399
 
            ['PutApplType', CMQC.MQAT_NO_CONTEXT, 'l'],
 
435
            ['PutApplType', CMQC.MQAT_NO_CONTEXT, MQLONG_TYPE],
400
436
            ['PutApplName', '', '28s'],
401
437
            ['PutDate', '', '8s'],
402
438
            ['PutTime', '', '8s'],
403
439
            ['ApplOriginData', '', '4s'],
404
440
            ['GroupId', '', '24s'],
405
 
            ['MsgSeqNumber', 1, 'l'],
406
 
            ['Offset', 0, 'l'],
407
 
            ['MsgFlags', CMQC.MQMF_NONE, 'l'],
408
 
            ['OriginalLength', CMQC.MQOL_UNDEFINED, 'l'])), kw)
 
441
            ['MsgSeqNumber', 1, MQLONG_TYPE],
 
442
            ['Offset', 0, MQLONG_TYPE],
 
443
            ['MsgFlags', CMQC.MQMF_NONE, MQLONG_TYPE],
 
444
            ['OriginalLength', CMQC.MQOL_UNDEFINED, MQLONG_TYPE])), kw)
409
445
            
410
446
 
411
447
# MQCONNX code courtesy of John OSullivan (mailto:jos@onebox.com)
418
454
    default values may be overridden by the optional keyword arguments
419
455
    'kw'."""
420
456
    
 
457
    # The MQCD_VERSION & MQCD_LENGTH_* we're going to use depend on the WMQ
 
458
    # version we had been compiled with but it is not known on Python side
 
459
    # until runtime so set it once here when first importing pymqi
 
460
    # (originally written by Brent S. Elmer, Ph.D. (mailto:webe3vt@aim.com)).
 
461
    
 
462
    if '7.0' in pymqe.__mqlevels__:
 
463
        _mqcd_version = CMQXC.MQCD_VERSION_9
 
464
        _mqcd_current_length = CMQXC.MQCD_LENGTH_9
 
465
            
 
466
    elif '6.0' in pymqe.__mqlevels__:
 
467
        _mqcd_version = CMQXC.MQCD_VERSION_8
 
468
        _mqcd_current_length = CMQXC.MQCD_LENGTH_8
 
469
        
 
470
    elif '5.3' in pymqe.__mqlevels__:
 
471
        _mqcd_version = CMQXC.MQCD_VERSION_7
 
472
        _mqcd_current_length = CMQXC.MQCD_LENGTH_7
 
473
        
 
474
    else:
 
475
        # The default version in MQCD_DEFAULT in cmqxc.h is MQCD_VERSION_6
 
476
        _mqcd_version = CMQXC.MQCD_VERSION_6
 
477
        _mqcd_current_length = CMQXC.MQCD_LENGTH_6
 
478
    
421
479
    def __init__(self, **kw):
422
 
        opts = [
 
480
        opts = []
 
481
        opts += [
423
482
            ['ChannelName', '', '20s'],
424
 
            ['Version', CMQC.MQCD_CURRENT_VERSION, 'l'],
425
 
            ['ChannelType', CMQC.MQCHT_SENDER, 'l'],
426
 
            ['TransportType', CMQC.MQXPT_LU62, 'l'],
 
483
            ['Version', self._mqcd_version, MQLONG_TYPE],
 
484
            ['ChannelType', CMQC.MQCHT_SENDER, MQLONG_TYPE],
 
485
            ['TransportType', CMQC.MQXPT_LU62, MQLONG_TYPE],
427
486
            ['Desc', '', '64s'],
428
487
            ['QMgrName', '', '48s'],
429
488
            ['XmitQName', '', '48s'],
431
490
            ['MCAName', '', '20s'],
432
491
            ['ModeName', '', '8s'],
433
492
            ['TpName', '', '64s'],
434
 
            ['BatchSize', 50L, 'l'],
435
 
            ['DiscInterval', 6000L, 'l'],
436
 
            ['ShortRetryCount', 10L, 'l'],
437
 
            ['ShortRetryInterval', 60L, 'l'],
438
 
            ['LongRetryCount', 999999999L, 'l'],
439
 
            ['LongRetryInterval', 1200L, 'l'],
 
493
            ['BatchSize', 50L, MQLONG_TYPE],
 
494
            ['DiscInterval', 6000L, MQLONG_TYPE],
 
495
            ['ShortRetryCount', 10L, MQLONG_TYPE],
 
496
            ['ShortRetryInterval', 60L, MQLONG_TYPE],
 
497
            ['LongRetryCount', 999999999L, MQLONG_TYPE],
 
498
            ['LongRetryInterval', 1200L, MQLONG_TYPE],
440
499
            ['SecurityExit', '', '128s'],
441
500
            ['MsgExit', '', '128s'],
442
501
            ['SendExit', '', '128s'],
443
502
            ['ReceiveExit', '', '128s'],
444
 
            ['SeqNumberWrap', 999999999L, 'l'],
445
 
            ['MaxMsgLength', 4194304L, 'l'],
446
 
            ['PutAuthority', CMQC.MQPA_DEFAULT, 'l'],
447
 
            ['DataConversion', CMQC.MQCDC_NO_SENDER_CONVERSION, 'l'],
 
503
            ['SeqNumberWrap', 999999999L, MQLONG_TYPE],
 
504
            ['MaxMsgLength', 4194304L, MQLONG_TYPE],
 
505
            ['PutAuthority', CMQC.MQPA_DEFAULT, MQLONG_TYPE],
 
506
            ['DataConversion', CMQC.MQCDC_NO_SENDER_CONVERSION, MQLONG_TYPE],
448
507
            ['SecurityUserData', '', '32s'],
449
508
            ['MsgUserData', '', '32s'],
450
509
            ['SendUserData', '', '32s'],
452
511
            ['UserIdentifier', '', '12s'],
453
512
            ['Password', '', '12s'],
454
513
            ['MCAUserIdentifier', '', '12s'],
455
 
            ['MCAType', CMQC.MQMCAT_PROCESS, 'l'],
 
514
            ['MCAType', CMQC.MQMCAT_PROCESS, MQLONG_TYPE],
456
515
            ['ConnectionName', '', '264s'],
457
516
            ['RemoteUserIdentifier', '', '12s'],
458
517
            ['RemotePassword', '', '12s'],
459
518
            ['MsgRetryExit', '', '128s'],
460
519
            ['MsgRetryUserData', '', '32s'],
461
 
            ['MsgRetryCount', 10L, 'l'],
462
 
            ['MsgRetryInterval', 1000L, 'l'],
463
 
            ['HeartbeatInterval', 300L, 'l'],
464
 
            ['BatchInterval', 0L, 'l'],
465
 
            ['NonPersistentMsgSpeed', CMQC.MQNPMS_FAST, 'l'],
466
 
            ['StrucLength', CMQC.MQCD_CURRENT_LENGTH, 'l'],
467
 
            ['ExitNameLength', CMQC.MQ_EXIT_NAME_LENGTH, 'l'],
468
 
            ['ExitDataLength', CMQC.MQ_EXIT_DATA_LENGTH, 'l'],
469
 
            ['MsgExitsDefined', 0L, 'l'],
470
 
            ['SendExitsDefined', 0L, 'l'],
471
 
            ['ReceiveExitsDefined', 0L, 'l'],
 
520
            ['MsgRetryCount', 10L, MQLONG_TYPE],
 
521
            ['MsgRetryInterval', 1000L, MQLONG_TYPE],
 
522
            ['HeartbeatInterval', 300L, MQLONG_TYPE],
 
523
            ['BatchInterval', 0L, MQLONG_TYPE],
 
524
            ['NonPersistentMsgSpeed', CMQC.MQNPMS_FAST, MQLONG_TYPE],
 
525
            ['StrucLength', self._mqcd_current_length, MQLONG_TYPE],
 
526
            ['ExitNameLength', CMQC.MQ_EXIT_NAME_LENGTH, MQLONG_TYPE],
 
527
            ['ExitDataLength', CMQC.MQ_EXIT_DATA_LENGTH, MQLONG_TYPE],
 
528
            ['MsgExitsDefined', 0L, MQLONG_TYPE],
 
529
            ['SendExitsDefined', 0L, MQLONG_TYPE],
 
530
            ['ReceiveExitsDefined', 0L, MQLONG_TYPE],
472
531
            ['MsgExitPtr', 0, 'P'],
473
532
            ['MsgUserDataPtr', 0, 'P'],
474
533
            ['SendExitPtr', 0, 'P'],
476
535
            ['ReceiveExitPtr', 0, 'P'],
477
536
            ['ReceiveUserDataPtr', 0, 'P'],
478
537
            ['ClusterPtr', 0, 'P'],
479
 
            ['ClustersDefined', 0L, 'l'],
480
 
            ['NetworkPriority', 0L, 'l'],
481
 
            ['LongMCAUserIdLength', 0L, 'l'],
482
 
            ['LongRemoteUserIdLength', 0L, 'l'],
 
538
            ['ClustersDefined', 0L, MQLONG_TYPE],
 
539
            ['NetworkPriority', 0L, MQLONG_TYPE],
 
540
            ['LongMCAUserIdLength', 0L, MQLONG_TYPE],
 
541
            ['LongRemoteUserIdLength', 0L, MQLONG_TYPE],
483
542
            ['LongMCAUserIdPtr', 0, 'P'],
484
543
            ['LongRemoteUserIdPtr', 0, 'P'],
485
544
            ['MCASecurityId', '', '40s'],
489
548
        # implied by 5.3.
490
549
        if "5.3" in pymqe.__mqlevels__:
491
550
            opts += [['SSLCipherSpec','','32s'],
492
 
                     ['SSLPeerName',0,'P'],
493
 
                     ['SSLPeerNameLength',0L,'l'],
494
 
                     ['SSLClientAuth',0L,'l'],
495
 
                     ['KeepAliveInterval',-1,'l'],
 
551
                     ['SSLPeerNamePtr',0,'P'],
 
552
                     ['SSLPeerNameLength',0L,MQLONG_TYPE],
 
553
                     ['SSLClientAuth',0L,MQLONG_TYPE],
 
554
                     ['KeepAliveInterval',-1,MQLONG_TYPE],
496
555
                     ['LocalAddress','','48s'],
497
 
                     ['BatchHeartbeat',0L,'l']]
 
556
                     ['BatchHeartbeat',0L,MQLONG_TYPE]]
498
557
        else:
499
558
            # No mqaiExecute means no 5.3, so redefine the struct version
500
 
            opts[1] = ['Version', CMQC.MQCD_VERSION_6, 'l']
 
559
            opts[1] = ['Version', CMQC.MQCD_VERSION_6, MQLONG_TYPE]
501
560
 
502
561
        if "6.0" in pymqe.__mqlevels__:
503
 
            opts += [['HdrCompList', [0L, -1L], '2l'],
504
 
                     ['MsgCompList', [0] + 15 * [-1L], '16l'],
505
 
                     ['CLWLChannelRank', 0L, 'l'],
506
 
                     ['CLWLChannelPriority', 0L, 'l'],
507
 
                     ['CLWLChannelWeight', 50L, 'l'],
508
 
                     ['ChannelMonitoring', 0L, 'l'],
509
 
                     ['ChannelStatistics', 0L, 'l']]
 
562
            opts += [['HdrCompList', [0L, -1L], '2' + MQLONG_TYPE],
 
563
                     ['MsgCompList', [0] + 15 * [-1L], '16' + MQLONG_TYPE],
 
564
                     ['CLWLChannelRank', 0L, MQLONG_TYPE],
 
565
                     ['CLWLChannelPriority', 0L, MQLONG_TYPE],
 
566
                     ['CLWLChannelWeight', 50L, MQLONG_TYPE],
 
567
                     ['ChannelMonitoring', 0L, MQLONG_TYPE],
 
568
                     ['ChannelStatistics', 0L, MQLONG_TYPE]]
510
569
                     
511
570
        if "7.0" in pymqe.__mqlevels__:
512
 
            opts += [['SharingConversations', 10, 'l'],
513
 
                     ['PropertyControl', 0, 'l'],      # 0 = MQPROP_COMPATIBILITY 
514
 
                     ['MaxInstances', 999999999, 'l'],
515
 
                     ['MaxInstancesPerClient', 999999999, 'l'],
516
 
                     ['ClientChannelWeight', 0, 'l'],
517
 
                     ['ConnectionAffinity', 1, 'l']]  # 1 = MQCAFTY_PREFERRED
 
571
            opts += [['SharingConversations', 10, MQLONG_TYPE],
 
572
                     ['PropertyControl', 0, MQLONG_TYPE],      # 0 = MQPROP_COMPATIBILITY 
 
573
                     ['MaxInstances', 999999999, MQLONG_TYPE],
 
574
                     ['MaxInstancesPerClient', 999999999, MQLONG_TYPE],
 
575
                     ['ClientChannelWeight', 0, MQLONG_TYPE],
 
576
                     ['ConnectionAffinity', 1, MQLONG_TYPE]]  # 1 = MQCAFTY_PREFERRED
 
577
                     
 
578
        # In theory, the pad should've been placed right before the 'MsgExitPtr'
 
579
        # attribute, however setting it there makes no effect and that's why
 
580
        # it's being set here, as a last element in the list.
 
581
        if MQLONG_TYPE == 'i':
 
582
            opts += [['pad','', '4s']]
518
583
 
519
584
        apply(MQOpts.__init__, (self, tuple(opts)), kw)
520
585
 
531
596
    def __init__(self, **kw):
532
597
         opts = [
533
598
        ['StrucId', CMQC.MQSCO_STRUC_ID, '4s'],            
534
 
            ['Version', CMQC.MQSCO_VERSION_1, 'l'],
 
599
            ['Version', CMQC.MQSCO_VERSION_1, MQLONG_TYPE],
535
600
        ['KeyRepository', '', '256s'],
536
601
        ['CryptoHardware', '', '256s'],
537
 
        ['AuthInfoRecCount', 0L, 'l'],
538
 
        ['AuthInfoRecOffset', 0L, 'l'],
 
602
        ['AuthInfoRecCount', 0L, MQLONG_TYPE],
 
603
        ['AuthInfoRecOffset', 0L, MQLONG_TYPE],
539
604
        ['AuthInfoRecPtr', 0, 'P']]
540
605
 
541
606
         # Add new SSL fields defined in 6.0 and update version to 2
542
607
         if "6.0" in pymqe.__mqlevels__:
543
 
            opts += [['KeyResetCount', 0L, 'l'],
544
 
                     ['FipsRequired', 0L, 'l']]
 
608
            opts += [['KeyResetCount', 0L, MQLONG_TYPE],
 
609
                     ['FipsRequired', 0L, MQLONG_TYPE]]
545
610
 
546
611
         apply(MQOpts.__init__, (self, tuple(opts)), kw)
547
612