rubywmq 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README CHANGED
@@ -12,12 +12,12 @@
12
12
  Building Ruby WMQ on UNIX/Linux
13
13
  -------------------------------
14
14
  The following is required to build from source code
15
- A C compiler
16
- The WebSphere MQ Software development toolkit
15
+ * A 'C' compiler
16
+ * The WebSphere MQ Software development toolkit
17
17
 
18
18
  Extracting the source code package:
19
- unzip package.zip
20
- tar -xvf package.tar
19
+ * unzip package.zip
20
+ * tar -xvf package.tar
21
21
 
22
22
  cd ext/wmq
23
23
  Edit the file build.sh and edit the location of WebSphere MQ (if not in /opt/mqm)
@@ -31,8 +31,8 @@
31
31
  Building Ruby WMQ on Windows
32
32
  ----------------------------
33
33
  The following is required to build from source code
34
- The Visual C++ 6.0 compiler
35
- The WebSphere MQ Software development toolkit
34
+ * The Visual C++ 6.0 compiler
35
+ * The WebSphere MQ Software development toolkit
36
36
 
37
37
  cd ext\wmq
38
38
  Edit the file build.bat and edit the location of WebSphere MQ
data/examples/each_a.rb CHANGED
@@ -19,6 +19,7 @@
19
19
  # If no messages are on the queue, the program
20
20
  # completes without waiting
21
21
  #
22
+ require 'rubygems'
22
23
  require 'wmq/wmq'
23
24
 
24
25
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
data/examples/each_b.rb CHANGED
@@ -18,6 +18,7 @@
18
18
  # Sample : each() : Retrieve all messages from a queue that
19
19
  # have the same correlation id
20
20
  #
21
+ require 'rubygems'
21
22
  require 'wmq/wmq'
22
23
 
23
24
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
@@ -19,6 +19,7 @@
19
19
  # If no messages are on the queue, the program
20
20
  # completes without waiting
21
21
  #
22
+ require 'rubygems'
22
23
  require 'wmq/wmq'
23
24
 
24
25
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
@@ -2,12 +2,12 @@ dev:
2
2
  qmgr_options:
3
3
  :q_mgr_name: REID
4
4
  output_queue:
5
- :q_name: TEST.DEAD.BACKUP
5
+ :q_name: TEST.QUEUE
6
6
  put_options:
7
7
  :new_msg_id: true
8
8
  descriptor:
9
9
  :format: MQSTR
10
- source_directory: samples
10
+ source_directory: messages
11
11
 
12
12
  test:
13
13
  qmgr_options:
@@ -15,10 +15,10 @@ test:
15
15
  :channel_name: SYSTEM.DEF.SVRCONN
16
16
  :connection_name: remotehost(1414)
17
17
  output_queue:
18
- :q_name: TEST.DEAD.BACKUP
18
+ :q_name: TEST.QUEUE
19
19
  put_options:
20
20
  :new_msg_id: true
21
21
  descriptor:
22
22
  :format: MQSTR
23
- source_directory: samples
23
+ source_directory: messages
24
24
 
@@ -15,16 +15,16 @@
15
15
  ################################################################################
16
16
 
17
17
  #
18
- # Sample : files_to_q : Place all files in a directory to a queue
18
+ # Example : files_to_q : Place all files in a directory to a queue
19
19
  # Each file is written as a separate message
20
20
  #
21
+ require 'rubygems'
21
22
  require 'find'
22
23
  require 'yaml'
23
24
  require 'wmq/wmq'
24
25
 
25
26
  # Call program passing environment name as first parameter
26
27
  # The environment corresponds to an entry in the config file
27
- # Defaults to dev
28
28
  env = ARGV[0] || raise("Command line argument 'environment' is required")
29
29
  config = YAML::load_file('files_to_q.cfg')[env]
30
30
 
data/examples/get_a.rb CHANGED
@@ -18,6 +18,7 @@
18
18
  # Sample : get() : Retrieve a single message from a queue
19
19
  # If no messages are on the queue, message.data is nil
20
20
  #
21
+ require 'rubygems'
21
22
  require 'wmq/wmq'
22
23
 
23
24
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
@@ -24,6 +24,7 @@
24
24
  # If :connection_name is not present, a WebSphere MQ Server connection will be used
25
25
  # I.e. Local server connection
26
26
  #
27
+ require 'rubygems'
27
28
  require 'wmq/wmq'
28
29
 
29
30
  WMQ::QueueManager.connect(
data/examples/put1_a.rb CHANGED
@@ -17,6 +17,7 @@
17
17
  #
18
18
  # Sample : put1() : Put a single message to a queue
19
19
  #
20
+ require 'rubygems'
20
21
  require 'wmq/wmq'
21
22
 
22
23
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
data/examples/put1_b.rb CHANGED
@@ -19,6 +19,7 @@
19
19
  #
20
20
  # Set the correlation id to a text string
21
21
  #
22
+ require 'rubygems'
22
23
  require 'wmq/wmq'
23
24
 
24
25
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
data/examples/put1_c.rb CHANGED
@@ -17,6 +17,7 @@
17
17
  #
18
18
  # Sample : put() : Put a single request message to a queue
19
19
  #
20
+ require 'rubygems'
20
21
  require 'wmq/wmq'
21
22
 
22
23
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
data/examples/put_a.rb CHANGED
@@ -18,6 +18,7 @@
18
18
  # Sample : put() : Put a single message to a queue
19
19
  # Open the queue so that multiple puts can be performed
20
20
  #
21
+ require 'rubygems'
21
22
  require 'wmq/wmq'
22
23
 
23
24
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
data/examples/put_b.rb CHANGED
@@ -19,6 +19,7 @@
19
19
  # Open the queue so that multiple puts can be performed
20
20
  # Ensure that all messages have the same correlation id
21
21
  #
22
+ require 'rubygems'
22
23
  require 'wmq/wmq'
23
24
 
24
25
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
data/examples/put_dlh.rb CHANGED
@@ -18,6 +18,7 @@
18
18
  # Sample : put() : Put a message to a queue with a dead letter header
19
19
  # Open the queue so that multiple puts can be performed
20
20
  #
21
+ require 'rubygems'
21
22
  require 'wmq/wmq'
22
23
 
23
24
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
@@ -25,6 +25,7 @@
25
25
  # That way the queue would remain after termination of this code.
26
26
  # In this sample the queue will disappear when this program terminates
27
27
  #
28
+ require 'rubygems'
28
29
  require 'wmq/wmq'
29
30
 
30
31
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
@@ -0,0 +1,51 @@
1
+ ################################################################################
2
+ # Copyright 2006 J. Reid Morrison. Dimension Solutions, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ ################################################################################
16
+
17
+ #
18
+ # Sample : put() : Put multiple Messages to a queue under the same group Id
19
+ # Open the queue so that multiple puts can be performed
20
+ # Ensure that all messages have the same group id
21
+ # Allow MQ to create the unique group id and let it automatically
22
+ # assign message sequence numbers for each message in the group
23
+ #
24
+ require 'rubygems'
25
+ require 'wmq/wmq'
26
+
27
+ # Put 5 messages in a single group onto the queue
28
+ total = 5
29
+
30
+ WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
31
+ qmgr.open_queue(:q_name=>'TEST.QUEUE', :mode=>:output) do |queue|
32
+ message = WMQ::Message.new
33
+ total.times do |count|
34
+ message.data = "Hello:#{count}"
35
+
36
+ # Set the message flag to indicate message is in a group
37
+ # On the last message, set the last message flag
38
+ message.descriptor[:msg_flags] = (count < total-1) ? WMQ::MQMF_MSG_IN_GROUP : WMQ::MQMF_LAST_MSG_IN_GROUP
39
+
40
+ # new_id => true causes subsequent messages to have unique message and
41
+ # correlation id's. Otherwise all messages will have the same message and
42
+ # correlation id's since the same message object is being
43
+ # re-used for all put calls.
44
+ #
45
+ # By setting the put :options => WMQ::MQPMO_LOGICAL_ORDER then MQ will supply a unique Group Id
46
+ # and MQ will automatically set the message sequence number for us.
47
+ queue.put(:message => message, :new_id => true, :options => WMQ::MQPMO_LOGICAL_ORDER)
48
+ p message.descriptor
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,53 @@
1
+ ################################################################################
2
+ # Copyright 2006 J. Reid Morrison. Dimension Solutions, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ ################################################################################
16
+
17
+ #
18
+ # Sample : put() : Put multiple Messages to a queue under the same group Id
19
+ # Open the queue so that multiple puts can be performed
20
+ # Ensure that all messages have the same group id
21
+ # Supply our own user-defined group Id.
22
+ # We also have to supply the message sequence number which starts at 1
23
+ #
24
+ require 'rubygems'
25
+ require 'wmq/wmq'
26
+
27
+ # Put 5 messages in a single group onto the queue
28
+ total = 5
29
+
30
+ WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
31
+ qmgr.open_queue(:q_name=>'TEST.QUEUE', :mode=>:output) do |queue|
32
+ message = WMQ::Message.new
33
+ # Supply a unique Group Id, truncated to the MQ maximum for Group Id.
34
+ message.descriptor[:group_id] = 'MyUniqueGroupId'
35
+ total.times do |count|
36
+ # new_id => true causes subsequent messages to have unique message and
37
+ # correlation id's. Otherwise all messages will have the same message and
38
+ # correlation id's since the same message object is being
39
+ # re-used for all put calls
40
+ message.data = "Hello:#{count}"
41
+
42
+ # Set the message flag to indicate message is in a group
43
+ # On the last message, set the last message flag
44
+ message.descriptor[:msg_flags] = (count < total-1) ? WMQ::MQMF_MSG_IN_GROUP : WMQ::MQMF_LAST_MSG_IN_GROUP
45
+ message.descriptor[:msg_seq_number] = count + 1
46
+
47
+ # By setting the put :options => WMQ::MQPMO_LOGICAL_ORDER then MQ will supply a unique Group Id
48
+ # and MQ will automatically set the message sequence number for us.
49
+ queue.put(:message => message, :new_id => true)
50
+ p message.descriptor
51
+ end
52
+ end
53
+ end
data/examples/put_rfh.rb CHANGED
@@ -18,6 +18,7 @@
18
18
  # Sample : put() : Put a message to a queue with a Refernce header
19
19
  # Open the queue so that multiple puts can be performed
20
20
  #
21
+ require 'rubygems'
21
22
  require 'wmq/wmq'
22
23
 
23
24
  # The Rules Format header (MQRFH) allows a list of name value pairs to be sent along
@@ -18,6 +18,7 @@
18
18
  # Sample : put() : Put a message to a queue with a Refernce header
19
19
  # Open the queue so that multiple puts can be performed
20
20
  #
21
+ require 'rubygems'
21
22
  require 'wmq/wmq'
22
23
 
23
24
  # The Rules Format header2 (MQRFH2) allows a an XML-like string to be passed as a header
@@ -18,6 +18,7 @@
18
18
  # Sample : put() : Put a message to a queue with a Refernce header
19
19
  # Open the queue so that multiple puts can be performed
20
20
  #
21
+ require 'rubygems'
21
22
  require 'wmq/wmq'
22
23
 
23
24
  # The Rules Format header2 (MQRFH2) allows a an XML-like string to be passed as a header
@@ -17,6 +17,7 @@
17
17
  #
18
18
  # Sample : put() : Put a message to a queue with a Transmission header
19
19
  #
20
+ require 'rubygems'
20
21
  require 'wmq/wmq'
21
22
 
22
23
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
@@ -0,0 +1,48 @@
1
+ ################################################################################
2
+ # Copyright 2006 J. Reid Morrison. Dimension Solutions, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ ################################################################################
16
+
17
+ #
18
+ # Example: q_to_files: Copy all messages in a queue to separate files in a directory
19
+ #
20
+ require 'rubygems'
21
+ require 'find'
22
+ require 'yaml'
23
+ require 'wmq/wmq'
24
+ require 'fileutils'
25
+
26
+ # Call program passing environment name as first parameter
27
+ # The environment corresponds to an entry in the config file
28
+ env = ARGV[0] || raise("Command line argument 'environment' is required")
29
+ config = YAML::load_file('q_to_files.cfg')[env]
30
+
31
+ # Create supplied path if it does not exist
32
+ path = config['target_directory']
33
+ FileUtils.mkdir_p(path)
34
+
35
+ message = WMQ::Message.new
36
+ message.descriptor = config['descriptor'] || {}
37
+ tstart = Time.now
38
+ counter = 0
39
+ WMQ::QueueManager.connect(config['qmgr_options']) do |qmgr|
40
+ qmgr.open_queue(config['input_queue']) do |queue|
41
+ queue.each do |message|
42
+ counter = counter + 1
43
+ File.open(File.join(path, "message_%03d" % counter), 'w') {|file| file.write(message.data) }
44
+ end
45
+ end
46
+ end
47
+ duration = Time.now - tstart
48
+ printf "Processed #{counter} messages in %.3f seconds. Average: %.3f messages/second\n", duration, counter/duration
data/examples/request.rb CHANGED
@@ -22,6 +22,7 @@
22
22
  #
23
23
  # A temporary Dynamic Reply To Queue is used with non-persistent messaging
24
24
  #
25
+ require 'rubygems'
25
26
  require 'wmq'
26
27
 
27
28
  wait_seconds = 30
data/examples/server.rb CHANGED
@@ -62,6 +62,7 @@
62
62
  # - E.g. Database, File etc..
63
63
  # - etc....
64
64
  #
65
+ require 'rubygems'
65
66
  require 'wmq/wmq'
66
67
 
67
68
  WMQ::QueueManager.connect(:q_mgr_name=>'REID') do |qmgr|
data/ext/build.sh CHANGED
@@ -1,5 +1,6 @@
1
- ruby extconf.rb --with-mqm-include=/opt/mqm/inc --with-mqm-lib=/opt/mqm/lib
2
- make
3
- # Uncomment the following lines for platforms other than Solaris, Windows and Linux
4
- #ruby extconf_client.rb --with-mqm-include=/opt/mqm/inc --with-mqm-lib=/opt/mqm/lib
5
- #make
1
+ ruby extconf.rb --with-mqm-include=/opt/mqm/inc --with-mqm-lib=/opt/mqm/lib
2
+ make
3
+ # Uncomment the following lines for platforms other than Solaris, Windows and Linux
4
+ #ruby extconf_client.rb --with-mqm-include=/opt/mqm/inc --with-mqm-lib=/opt/mqm/lib
5
+ #make
6
+
data/ext/extconf.rb CHANGED
@@ -25,7 +25,7 @@ if RUBY_PLATFORM =~ /mswin32/
25
25
  dir_config('mqm', include_path, '.')
26
26
  else
27
27
  include_path = '/opt/mqm/inc'
28
- dir_config('mqm', include_path, '/opt/mqm/lib')
28
+ #dir_config('mqm', include_path, '/opt/mqm/lib')
29
29
  end
30
30
 
31
31
  have_header('cmqc.h')
@@ -85,7 +85,7 @@ END_OF_STRING
85
85
  end
86
86
  str << <<END_OF_STRING
87
87
  }
88
- printf("WMQ::wmq_reason Unknown Reason code:%ld\\n",reason_code);
88
+ printf("WMQ::wmq_reason Unknown Reason code:%ld\\n",(long)reason_code);
89
89
  return "Unknown reason code";
90
90
  }
91
91
 
@@ -101,11 +101,14 @@ END_OF_STRING
101
101
  'MQIACH_BYTES_RCVD',
102
102
  'MQIACH_BUFFERS_RCVD']],
103
103
  ['cmqcfc.h', 'MQIAMO_'],
104
- ['cmqcfc.h', 'MQIAMO64_'],
104
+ ['cmqcfc.h', 'MQIAMO64_', ['MQIAMO64_AVG_Q_TIME',
105
+ 'MQIAMO64_Q_TIME_AVG',
106
+ 'MQIAMO64_Q_TIME_MAX',
107
+ 'MQIAMO64_Q_TIME_MIN']],
105
108
  # Integer System Selectors
106
109
  ['cmqbc.h', 'MQIASY_'],
107
110
  # Character Selectors for Object Attributes
108
- ['cmqc.h', 'MQCA_'],
111
+ ['cmqc.h', 'MQCA_',['MQCA_BASE_OBJECT_NAME']],
109
112
  ['cmqcfc.h', 'MQCACF_'],
110
113
  ['cmqcfc.h', 'MQCACH_'],
111
114
  ['cmqcfc.h', 'MQCAMO_'],
@@ -138,7 +141,7 @@ ID wmq_selector_id(MQLONG selector)
138
141
  {
139
142
  #{str_switch}
140
143
  }
141
- printf("WMQ::wmq_select_text Unknown Selector:%ld\\n",selector);
144
+ printf("WMQ::wmq_select_text Unknown Selector:%ld\\n",(long)selector);
142
145
  return rb_intern("unknown_selector_code");
143
146
  }
144
147
 
@@ -152,12 +155,15 @@ END_OF_STRING
152
155
  # Integer Selectors for Object Attributes
153
156
  [['cmqc.h', 'MQIA_'],
154
157
  ['cmqcfc.h', 'MQIACF_', ['MQIACF_ERROR_ID',
155
- 'MQIACF_QUIESCE']],
158
+ 'MQIACF_QUIESCE']],
156
159
  ['cmqcfc.h', 'MQIACH_', ['MQIACH_CURRENT_SEQ_NUMBER',
157
- 'MQIACH_BYTES_RCVD',
158
- 'MQIACH_BUFFERS_RCVD']],
160
+ 'MQIACH_BYTES_RCVD',
161
+ 'MQIACH_BUFFERS_RCVD']],
159
162
  ['cmqcfc.h', 'MQIAMO_'],
160
- ['cmqcfc.h', 'MQIAMO64_'],
163
+ ['cmqcfc.h', 'MQIAMO64_', ['MQIAMO64_AVG_Q_TIME',
164
+ 'MQIAMO64_Q_TIME_AVG',
165
+ 'MQIAMO64_Q_TIME_MAX',
166
+ 'MQIAMO64_Q_TIME_MIN']],
161
167
  # Integer System Selectors
162
168
  # ['cmqbc.h', 'MQIASY_'],
163
169
  ].each do |item|
@@ -168,7 +174,7 @@ END_OF_STRING
168
174
  end
169
175
  str << "\n *selector_type = MQIT_STRING;\n\n"
170
176
  # Character Selectors for Object Attributes
171
- [['cmqc.h', 'MQCA_'],
177
+ [['cmqc.h', 'MQCA_',['MQCA_BASE_OBJECT_NAME']],
172
178
  ['cmqcfc.h', 'MQCACF_'],
173
179
  ['cmqcfc.h', 'MQCACH_'],
174
180
  ['cmqcfc.h', 'MQCAMO_'],
@@ -28,7 +28,6 @@ class GenerateStructs
28
28
  def extract_struct (filename, struct_name)
29
29
  properties_list = []
30
30
  line_number = 0
31
- group_name = nil
32
31
  found = false
33
32
  File.open(filename) do |file|
34
33
  file.each do |line|
@@ -40,7 +39,6 @@ class GenerateStructs
40
39
  found = true if line =~ /^\s*struct\s*tag#{struct_name}/
41
40
  else
42
41
  return(properties_list) if line =~ /^\s*\};/
43
- #puts line
44
42
  match = /\s*(MQ\w+)\s+(\w+);/.match(line)
45
43
  if match
46
44
  type = match[1]
@@ -263,9 +263,9 @@ void Message_deblock(VALUE self, PMQMD pmqmd, PMQBYTE p_buffer, MQLONG total_len
263
263
 
264
264
  if(memcmp(p_header->StrucId, <%=struct[:struct_id] || "#{struct[:struct].upcase}_STRUC_ID"%>, sizeof(p_header->StrucId)) != 0)
265
265
  {
266
- break; /* Bad Message received, do not deblock headers */
267
266
  if(trace_level>1)
268
267
  printf("WMQ::Message#deblock MQFMT_<%=struct[:header].upcase%> received, but message does not contain <%=struct[:struct].upcase%>\n");
268
+ break; /* Bad Message received, do not deblock headers */
269
269
  }
270
270
  else
271
271
  {
@@ -367,7 +367,7 @@ int Message_build_header (VALUE hash, struct Message_build_header_arg* parg)
367
367
  *(parg->p_data_offset) += sizeof(<%=struct[:struct]%>);
368
368
 
369
369
  if(parg->trace_level>2)
370
- printf ("WMQ::Message#build_header data offset:%ld\n", *(parg->p_data_offset));
370
+ printf ("WMQ::Message#build_header data offset:%ld\n", (long)(*(parg->p_data_offset)));
371
371
  <% end
372
372
  %> }
373
373
  else
data/ext/wmq.c CHANGED
@@ -22,7 +22,7 @@ VALUE wmq_message;
22
22
  VALUE wmq_exception;
23
23
 
24
24
  void Init_wmq() {
25
- VALUE qmgr, wmq;
25
+ VALUE wmq;
26
26
 
27
27
  wmq = rb_define_module("WMQ");
28
28
 
data/ext/wmq.h CHANGED
@@ -188,6 +188,32 @@ void to_mqdlh(VALUE hash, MQDLH* pmqdlh);
188
188
  void from_mqdlh(VALUE hash, MQDLH* pmqdlh);
189
189
 
190
190
  void wmq_structs_id_init();
191
+ void Message_to_mqmd(VALUE hash, MQMD* pmqmd);
192
+ void Message_to_mqmd1(VALUE hash, MQMD1* pmqmd1);
193
+ void Message_to_mqrfh2(VALUE hash, MQRFH2* pmqrfh2);
194
+ void Message_to_mqrfh(VALUE hash, MQRFH* pmqrfh);
195
+ void Message_to_mqdlh(VALUE hash, MQDLH* pmqdlh);
196
+ void Message_to_mqcih(VALUE hash, MQCIH* pmqcih);
197
+ void Message_to_mqdh(VALUE hash, MQDH* pmqdh);
198
+ void Message_to_mqiih(VALUE hash, MQIIH* pmqiih);
199
+ void Message_to_mqrmh(VALUE hash, MQRMH* pmqrmh);
200
+ void Message_to_mqtm(VALUE hash, MQTM* pmqtm);
201
+ void Message_to_mqtmc2(VALUE hash, MQTMC2* pmqtmc2);
202
+ void Message_to_mqwih(VALUE hash, MQWIH* pmqwih);
203
+ void Message_to_mqxqh(VALUE hash, MQXQH* pmqxqh);
204
+ void Message_from_mqmd(VALUE hash, MQMD* pmqmd);
205
+ void Message_from_mqmd1(VALUE hash, MQMD1* pmqmd1);
206
+ void Message_from_mqrfh2(VALUE hash, MQRFH2* pmqrfh2);
207
+ void Message_from_mqrfh(VALUE hash, MQRFH* pmqrfh);
208
+ void Message_from_mqdlh(VALUE hash, MQDLH* pmqdlh);
209
+ void Message_from_mqcih(VALUE hash, MQCIH* pmqcih);
210
+ void Message_from_mqdh(VALUE hash, MQDH* pmqdh);
211
+ void Message_from_mqiih(VALUE hash, MQIIH* pmqiih);
212
+ void Message_from_mqrmh(VALUE hash, MQRMH* pmqrmh);
213
+ void Message_from_mqtm(VALUE hash, MQTM* pmqtm);
214
+ void Message_from_mqtmc2(VALUE hash, MQTMC2* pmqtmc2);
215
+ void Message_from_mqwih(VALUE hash, MQWIH* pmqwih);
216
+ void Message_from_mqxqh(VALUE hash, MQXQH* pmqxqh);
191
217
 
192
218
  char* wmq_reason(MQLONG reason_code);
193
219
  ID wmq_selector_id(MQLONG selector);
@@ -242,7 +268,7 @@ void wmq_selector(ID selector_id, PMQLONG selector_type, PMQLONG selector);
242
268
  val = rb_hash_aref(HASH, ID2SYM(ID_##KEY)); \
243
269
  if (!NIL_P(val)) \
244
270
  { \
245
- WMQ_STR2MQBYTES(val,ELEMENT)(val); \
271
+ WMQ_STR2MQBYTES(val,ELEMENT) \
246
272
  }
247
273
 
248
274
  #define WMQ_HASH2BOOL(HASH,KEY,ELEMENT) \
data/ext/wmq_message.c CHANGED
@@ -88,7 +88,6 @@ void Message_build(PMQBYTE* pq_pp_buffer, PMQLONG pq_p_buffer_size, MQLONG trace
88
88
  if ( !NIL_P(headers) &&
89
89
  (NUM2LONG(rb_funcall(headers, ID_size, 0))>0) )
90
90
  {
91
- PMQBYTE p_data = 0;
92
91
  MQLONG data_offset = 0;
93
92
  struct Message_build_header_arg arg;
94
93
  VALUE next_header;
@@ -96,7 +95,6 @@ void Message_build(PMQBYTE* pq_pp_buffer, PMQLONG pq_p_buffer_size, MQLONG trace
96
95
  VALUE header_type;
97
96
  VALUE ind_val;
98
97
  size_t index;
99
- ID first_header_id;
100
98
 
101
99
  if(trace_level>2)
102
100
  printf ("WMQ::Queue#put %ld Header(s) supplied\n", NUM2LONG(rb_funcall(headers, ID_size, 0)));
@@ -106,11 +104,11 @@ void Message_build(PMQBYTE* pq_pp_buffer, PMQLONG pq_p_buffer_size, MQLONG trace
106
104
  {
107
105
  MQLONG new_size = RSTRING(data)->len + 512; /* Add space for data and a header */
108
106
  if(trace_level>2)
109
- printf ("WMQ::Queue#reallocate Resizing buffer from %ld to %ld bytes\n", *pq_p_buffer_size, new_size);
107
+ printf ("WMQ::Queue#reallocate Resizing buffer from %ld to %ld bytes\n", *pq_p_buffer_size, (long)new_size);
110
108
 
111
109
  *pq_p_buffer_size = new_size;
112
110
  free(*pq_pp_buffer);
113
- *pq_pp_buffer = ALLOC_N(char, new_size);
111
+ *pq_pp_buffer = ALLOC_N(unsigned char, new_size);
114
112
  }
115
113
 
116
114
  arg.pp_buffer = pq_pp_buffer;
@@ -160,7 +158,7 @@ void Message_build(PMQBYTE* pq_pp_buffer, PMQLONG pq_p_buffer_size, MQLONG trace
160
158
  }
161
159
 
162
160
  if(trace_level>2)
163
- printf ("WMQ::Queue#put done building headers. Offset is now %ld\n", arg.p_data_offset);
161
+ printf ("WMQ::Queue#put done building headers. Offset is now %ld\n", *arg.p_data_offset);
164
162
 
165
163
  memcpy((*pq_pp_buffer) + data_offset, RSTRING(data)->ptr, RSTRING(data)->len);
166
164
  *p_total_length = data_offset + RSTRING(data)->len;
@@ -210,7 +208,6 @@ void Message_build_mqmd(VALUE self, PMQMD pmqmd)
210
208
  VALUE Message_initialize(int argc, VALUE *argv, VALUE self)
211
209
  {
212
210
  VALUE parms = Qnil;
213
- VALUE proc = Qnil;
214
211
 
215
212
  /* Extract optional parameter */
216
213
  rb_scan_args(argc, argv, "01", &parms);
@@ -285,7 +282,7 @@ PMQBYTE Message_autogrow_data_buffer(struct Message_build_header_arg* parg, MQLO
285
282
  size += 512; /* Additional space for subsequent headers */
286
283
 
287
284
  if(parg->trace_level>2)
288
- printf ("WMQ::Message Reallocating buffer from %ld to %ld\n", *(parg->p_buffer_size), size);
285
+ printf ("WMQ::Message Reallocating buffer from %ld to %ld\n", *(parg->p_buffer_size), (long)size);
289
286
 
290
287
  *(parg->p_buffer_size) = size;
291
288
  *(parg->pp_buffer) = ALLOC_N(char, size);
@@ -384,7 +381,6 @@ void Message_build_rf_header (VALUE hash, struct Message_build_header_arg* parg)
384
381
  MQLONG name_value_len = 0;
385
382
  PMQCHAR p_name_value = 0;
386
383
  VALUE name_value = rb_hash_aref(hash, ID2SYM(ID_name_value));
387
- MQLONG pad = 0;
388
384
 
389
385
  MQRFH_DEF.CodedCharSetId = MQCCSI_INHERIT;
390
386
 
@@ -441,7 +437,7 @@ void Message_build_rf_header (VALUE hash, struct Message_build_header_arg* parg)
441
437
  }
442
438
 
443
439
  if(parg->trace_level>3)
444
- printf ("WMQ::Message#build_rf_header Sizeof namevalue string:%ld\n", name_value_len);
440
+ printf ("WMQ::Message#build_rf_header Sizeof namevalue string:%ld\n", (long)name_value_len);
445
441
 
446
442
  if(parg->trace_level>2)
447
443
  printf ("WMQ::Message#build_rf_header data offset:%ld\n", *(parg->p_data_offset));
@@ -494,7 +490,7 @@ MQLONG Message_deblock_rf_header (VALUE hash, PMQBYTE p_data, MQLONG data_len)
494
490
 
495
491
  rfh_toktype_t toktype;
496
492
 
497
- if(size > data_len) /* Poison Message */
493
+ if(size < 0 || size > data_len) /* Poison Message */
498
494
  {
499
495
  printf("WMQ::Message_deblock_rf_header StrucLength supplied in MQRFH exceeds total message length\n");
500
496
  return 0;
@@ -537,7 +533,7 @@ MQLONG Message_deblock_rf_header_2 (VALUE hash, PMQBYTE p_buffer, MQLONG data_le
537
533
  size_t length;
538
534
  size_t i;
539
535
 
540
- if(size > data_len) /* Poison Message */
536
+ if(size < 0 || size > data_len) /* Poison Message */
541
537
  {
542
538
  printf("WMQ::Message_deblock_rf_header_2 StrucLength supplied in MQRFH exceeds total message length\n");
543
539
  return 0;
@@ -550,7 +546,7 @@ MQLONG Message_deblock_rf_header_2 (VALUE hash, PMQBYTE p_buffer, MQLONG data_le
550
546
  xml_len = *(PMQLONG)p_data;
551
547
  p_data += sizeof(MQLONG);
552
548
 
553
- if (p_data+xml_len > p_end)
549
+ if (xml_len < 0 || p_data+xml_len > p_end)
554
550
  {
555
551
  printf("WMQ::Message#deblock_rf_header_2 Poison Message received, stopping further processing\n");
556
552
  p_data = p_end;
data/ext/wmq_mq_load.c CHANGED
@@ -54,6 +54,10 @@
54
54
  #define RTLD_GLOBAL 0
55
55
  #endif
56
56
 
57
+ #if defined(__linux__) || defined(LINUX)
58
+ #include <dlfcn.h>
59
+ #endif
60
+
57
61
  #define MQ_LOAD(LIBRARY) \
58
62
  void* handle = (void*)dlopen(LIBRARY, RTLD_LAZY|RTLD_GLOBAL); \
59
63
  if (!handle) \
data/ext/wmq_queue.c CHANGED
@@ -146,7 +146,7 @@ VALUE QUEUE_alloc(VALUE klass)
146
146
  pq->fail_if_exists = 1;
147
147
  memset(&pq->q_name, 0, sizeof(pq->q_name));
148
148
  pq->buffer_size = 16384;
149
- pq->p_buffer = ALLOC_N(char, pq->buffer_size);
149
+ pq->p_buffer = ALLOC_N(unsigned char, pq->buffer_size);
150
150
 
151
151
  return Data_Wrap_Struct(klass, 0, QUEUE_free, pq);
152
152
  }
@@ -203,6 +203,11 @@ void Queue_extract_put_message_options(VALUE hash, PMQPMO ppmo)
203
203
  ppmo->Options |= MQPMO_SYNCPOINT;
204
204
  }
205
205
 
206
+ IF_TRUE(fail_if_quiescing, 1) /* Defaults to true */
207
+ {
208
+ ppmo->Options |= MQPMO_FAIL_IF_QUIESCING;
209
+ }
210
+
206
211
  IF_TRUE(new_id, 0) /* :new_id */
207
212
  {
208
213
  ppmo->Options |= MQPMO_NEW_MSG_ID;
@@ -308,10 +313,7 @@ VALUE Queue_initialize(VALUE self, VALUE hash)
308
313
  if(pq->trace_level > 1) printf("WMQ::Queue::new Queue:%s\n", pq->q_name);
309
314
 
310
315
  val = rb_hash_aref(hash, ID2SYM(ID_dynamic_q_name)); /* :dynamic_q_name */
311
- if (!NIL_P(val))
312
- {
313
- rb_iv_set(self, "@dynamic_q_name", val);
314
- }
316
+ rb_iv_set(self, "@dynamic_q_name", val);
315
317
 
316
318
  WMQ_HASH2MQBYTES(hash,alternate_security_id, pq->od.AlternateSecurityId)
317
319
  WMQ_HASH2MQLONG(hash,close_options, pq->close_options)
@@ -439,7 +441,7 @@ VALUE Queue_open(VALUE self)
439
441
  pq->hcon = pqm->hcon; /* Store Queue Manager handle for subsequent calls */
440
442
 
441
443
  if(pq->trace_level)
442
- printf ("WMQ::Queue#open() Opening Queue:%s, Queue Manager Handle:%d\n", RSTRING(name)->ptr, pq->hcon);
444
+ printf ("WMQ::Queue#open() Opening Queue:%s, Queue Manager Handle:%ld\n", RSTRING(name)->ptr, (long)pq->hcon);
443
445
 
444
446
  if(pq->hobj) /* Close queue if already open, ignore errors */
445
447
  {
@@ -470,9 +472,9 @@ VALUE Queue_open(VALUE self)
470
472
  }
471
473
 
472
474
  if(pq->trace_level)
473
- printf("WMQ::Queue#open() MQOPEN completed with reason:%s, Handle:%d\n",
475
+ printf("WMQ::Queue#open() MQOPEN completed with reason:%s, Handle:%ld\n",
474
476
  wmq_reason(pq->reason_code),
475
- pq->hobj);
477
+ (long)pq->hobj);
476
478
 
477
479
  if (pq->comp_code == MQCC_FAILED)
478
480
  {
@@ -539,7 +541,7 @@ VALUE Queue_close(VALUE self)
539
541
  return Qtrue;
540
542
  }
541
543
 
542
- if(pq->trace_level) printf ("WMQ::Queue#close() Queue Handle:%ld, Queue Manager Handle:%ld\n", pq->hobj, pq->hcon);
544
+ if(pq->trace_level) printf ("WMQ::Queue#close() Queue Handle:%ld, Queue Manager Handle:%ld\n", (long)pq->hobj, (long)pq->hcon);
543
545
 
544
546
  pq->MQCLOSE(pq->hcon, &pq->hobj, pq->close_options, &pq->comp_code, &pq->reason_code);
545
547
 
@@ -680,11 +682,7 @@ VALUE Queue_close(VALUE self)
680
682
  */
681
683
  VALUE Queue_get(VALUE self, VALUE hash)
682
684
  {
683
- VALUE handle;
684
685
  VALUE val;
685
- VALUE str;
686
- VALUE descriptor;
687
- VALUE data;
688
686
  VALUE message;
689
687
  PQUEUE pq;
690
688
  MQLONG flag;
@@ -693,6 +691,7 @@ VALUE Queue_get(VALUE self, VALUE hash)
693
691
  MQMD md = {MQMD_DEFAULT}; /* Message Descriptor */
694
692
  MQGMO gmo = {MQGMO_DEFAULT}; /* get message options */
695
693
 
694
+ md.Version = MQMD_CURRENT_VERSION; /* Allow Group Options */
696
695
  gmo.Version = MQGMO_CURRENT_VERSION; /* Allow MatchOptions */
697
696
 
698
697
  Check_Type(hash, T_HASH);
@@ -743,8 +742,8 @@ VALUE Queue_get(VALUE self, VALUE hash)
743
742
 
744
743
  WMQ_HASH2MQLONG(hash,match, gmo.MatchOptions) /* :match */
745
744
 
746
- if(pq->trace_level > 1) printf("WMQ::Queue#get() Get Message Option: MatchOptions=%ld\n", gmo.MatchOptions);
747
- if(pq->trace_level) printf("WMQ::Queue#get() Queue Handle:%ld, Queue Manager Handle:%ld\n", pq->hobj, pq->hcon);
745
+ if(pq->trace_level > 1) printf("WMQ::Queue#get() Get Message Option: MatchOptions=%ld\n", (long)gmo.MatchOptions);
746
+ if(pq->trace_level) printf("WMQ::Queue#get() Queue Handle:%ld, Queue Manager Handle:%ld\n", (long)pq->hobj, (long)pq->hcon);
748
747
 
749
748
  /* If descriptor is re-used
750
749
 
@@ -775,16 +774,16 @@ VALUE Queue_get(VALUE self, VALUE hash)
775
774
  /* report reason, if any */
776
775
  if (pq->reason_code != MQRC_NONE)
777
776
  {
778
- if(pq->trace_level>1) printf("WMQ::Queue#get() Growing buffer size from %ld to %ld\n", pq->buffer_size, messlen);
777
+ if(pq->trace_level>1) printf("WMQ::Queue#get() Growing buffer size from %ld to %ld\n", (long)pq->buffer_size, (long)messlen);
779
778
  /* TODO: Add support for autogrow buffer here */
780
779
  if (pq->reason_code == MQRC_TRUNCATED_MSG_FAILED)
781
780
  {
782
781
  if(pq->trace_level>2)
783
- printf ("WMQ::Queue#reallocate Resizing buffer from %ld to %ld bytes\n", pq->buffer_size, messlen);
782
+ printf ("WMQ::Queue#reallocate Resizing buffer from %ld to %ld bytes\n", (long)pq->buffer_size, (long)messlen);
784
783
 
785
784
  free(pq->p_buffer);
786
785
  pq->buffer_size = messlen;
787
- pq->p_buffer = ALLOC_N(char, messlen);
786
+ pq->p_buffer = ALLOC_N(unsigned char, messlen);
788
787
  }
789
788
  }
790
789
  }
@@ -953,6 +952,8 @@ VALUE Queue_put(VALUE self, VALUE hash)
953
952
  MQLONG BufferLength = 0; /* Length of the message in Buffer */
954
953
  PMQVOID pBuffer = 0; /* Message data */
955
954
 
955
+ md.Version = MQMD_CURRENT_VERSION; /* Allow Group Options */
956
+
956
957
  Check_Type(hash, T_HASH);
957
958
 
958
959
  Data_Get_Struct(self, QUEUE, pq);
@@ -967,7 +968,7 @@ VALUE Queue_put(VALUE self, VALUE hash)
967
968
  Message_build(&pq->p_buffer, &pq->buffer_size, pq->trace_level,
968
969
  hash, &pBuffer, &BufferLength, &md);
969
970
 
970
- if(pq->trace_level) printf("WMQ::Queue#put() Queue Handle:%ld, Queue Manager Handle:%ld\n", pq->hobj, pq->hcon);
971
+ if(pq->trace_level) printf("WMQ::Queue#put() Queue Handle:%ld, Queue Manager Handle:%ld\n", (long)pq->hobj, (long)pq->hcon);
971
972
 
972
973
  pq->MQPUT(
973
974
  pq->hcon, /* connection handle */
@@ -1306,7 +1307,7 @@ VALUE Queue_each(int argc, VALUE *argv, VALUE self)
1306
1307
  }
1307
1308
  rb_hash_aset(hash, ID2SYM(ID_options), LONG2NUM(get_options));
1308
1309
 
1309
- if(pq->trace_level>1) printf("WMQ::Queue#each MQGMO_BROWSE_FIRST set, get options:%ld\n", get_options);
1310
+ if(pq->trace_level>1) printf("WMQ::Queue#each MQGMO_BROWSE_FIRST set, get options:%ld\n", (long)get_options);
1310
1311
  browse = 1;
1311
1312
  }
1312
1313
 
@@ -1330,7 +1331,7 @@ VALUE Queue_each(int argc, VALUE *argv, VALUE self)
1330
1331
  }
1331
1332
  rb_hash_aset(hash, ID2SYM(ID_options), LONG2NUM(get_options));
1332
1333
 
1333
- if(pq->trace_level>1) printf("WMQ::Queue#each MQGMO_BROWSE_NEXT set, get options:%ld\n", get_options);
1334
+ if(pq->trace_level>1) printf("WMQ::Queue#each MQGMO_BROWSE_NEXT set, get options:%ld\n", (long)get_options);
1334
1335
  }
1335
1336
  }
1336
1337
 
@@ -20,7 +20,6 @@ static ID ID_open;
20
20
  static ID ID_call;
21
21
  static ID ID_new;
22
22
  static ID ID_backout;
23
- static ID ID_any_message;
24
23
  static ID ID_connect_options;
25
24
  static ID ID_q_mgr_name;
26
25
  static ID ID_queue_manager;
@@ -217,9 +216,7 @@ VALUE QueueManager_initialize(VALUE self, VALUE hash)
217
216
  VALUE str;
218
217
  size_t size;
219
218
  size_t length;
220
- size_t i;
221
219
  PQUEUE_MANAGER pqm;
222
- char* pChar;
223
220
 
224
221
  Check_Type(hash, T_HASH);
225
222
 
@@ -393,9 +390,6 @@ VALUE QueueManager_initialize(VALUE self, VALUE hash)
393
390
  VALUE QueueManager_connect(VALUE self)
394
391
  {
395
392
  VALUE name;
396
- VALUE str;
397
- VALUE val;
398
- VALUE hash;
399
393
 
400
394
  PQUEUE_MANAGER pqm;
401
395
  Data_Get_Struct(self, QUEUE_MANAGER, pqm);
@@ -425,9 +419,9 @@ VALUE QueueManager_connect(VALUE self)
425
419
  &pqm->reason_code); /* connect reason code */
426
420
 
427
421
  if(pqm->trace_level)
428
- printf("WMQ::QueueManager#connect() MQCONNX completed with reason:%s, Handle:%d\n",
422
+ printf("WMQ::QueueManager#connect() MQCONNX completed with reason:%s, Handle:%ld\n",
429
423
  wmq_reason(pqm->reason_code),
430
- pqm->hcon);
424
+ (long)pqm->hcon);
431
425
 
432
426
  if (pqm->comp_code == MQCC_FAILED)
433
427
  {
@@ -473,7 +467,7 @@ VALUE QueueManager_disconnect(VALUE self)
473
467
  PQUEUE_MANAGER pqm;
474
468
  Data_Get_Struct(self, QUEUE_MANAGER, pqm);
475
469
 
476
- if(pqm->trace_level) printf ("WMQ::QueueManager#disconnect() Queue Manager Handle:%ld\n", pqm->hcon);
470
+ if(pqm->trace_level) printf ("WMQ::QueueManager#disconnect() Queue Manager Handle:%ld\n", (long)pqm->hcon);
477
471
 
478
472
  if (!pqm->already_connected)
479
473
  {
@@ -534,7 +528,7 @@ VALUE QueueManager_commit(VALUE self)
534
528
  PQUEUE_MANAGER pqm;
535
529
  Data_Get_Struct(self, QUEUE_MANAGER, pqm);
536
530
 
537
- if(pqm->trace_level) printf ("WMQ::QueueManager#commit() Queue Manager Handle:%ld\n", pqm->hcon);
531
+ if(pqm->trace_level) printf ("WMQ::QueueManager#commit() Queue Manager Handle:%ld\n", (long)pqm->hcon);
538
532
 
539
533
  pqm->MQCMIT(pqm->hcon, &pqm->comp_code, &pqm->reason_code);
540
534
 
@@ -586,7 +580,7 @@ VALUE QueueManager_backout(VALUE self)
586
580
  PQUEUE_MANAGER pqm;
587
581
  Data_Get_Struct(self, QUEUE_MANAGER, pqm);
588
582
 
589
- if(pqm->trace_level) printf ("WMQ::QueueManager#backout() Queue Manager Handle:%ld\n", pqm->hcon);
583
+ if(pqm->trace_level) printf ("WMQ::QueueManager#backout() Queue Manager Handle:%ld\n", (long)pqm->hcon);
590
584
 
591
585
  pqm->MQBACK(pqm->hcon, &pqm->comp_code, &pqm->reason_code);
592
586
 
@@ -636,7 +630,7 @@ VALUE QueueManager_begin(VALUE self)
636
630
  PQUEUE_MANAGER pqm;
637
631
  Data_Get_Struct(self, QUEUE_MANAGER, pqm);
638
632
 
639
- if(pqm->trace_level) printf ("WMQ::QueueManager#begin() Queue Manager Handle:%ld\n", pqm->hcon);
633
+ if(pqm->trace_level) printf ("WMQ::QueueManager#begin() Queue Manager Handle:%ld\n", (long)pqm->hcon);
640
634
 
641
635
  pqm->MQBEGIN(pqm->hcon, 0, &pqm->comp_code, &pqm->reason_code);
642
636
 
@@ -791,10 +785,6 @@ VALUE QueueManager_put(VALUE self, VALUE hash)
791
785
  {
792
786
  MQLONG BufferLength; /* Length of the message in Buffer */
793
787
  PMQVOID pBuffer; /* Message data */
794
- /*-----------------10/22/2006 7:11PM----------------
795
- * TODO: Need dynamic buffer here!
796
- * --------------------------------------------------*/
797
- MQBYTE header_buffer[65535]; /* message buffer for header use */
798
788
  MQMD md = {MQMD_DEFAULT}; /* Message Descriptor */
799
789
  MQPMO pmo = {MQPMO_DEFAULT}; /* put message options */
800
790
  MQOD od = {MQOD_DEFAULT}; /* Object Descriptor */
@@ -838,7 +828,7 @@ VALUE QueueManager_put(VALUE self, VALUE hash)
838
828
  Message_build(&pqm->p_buffer, &pqm->buffer_size, pqm->trace_level,
839
829
  hash, &pBuffer, &BufferLength, &md);
840
830
 
841
- if(pqm->trace_level) printf("WMQ::QueueManager#put Queue Manager Handle:%ld\n", pqm->hcon);
831
+ if(pqm->trace_level) printf("WMQ::QueueManager#put Queue Manager Handle:%ld\n", (long)pqm->hcon);
842
832
 
843
833
  pqm->MQPUT1(
844
834
  pqm->hcon, /* connection handle */
@@ -1045,7 +1035,6 @@ static VALUE QueueManager_singleton_connect_rescue(VALUE self)
1045
1035
  {
1046
1036
  PQUEUE_MANAGER pqm;
1047
1037
  VALUE exception;
1048
- MQLONG command = 0;
1049
1038
  Data_Get_Struct(self, QUEUE_MANAGER, pqm);
1050
1039
 
1051
1040
  if(pqm->trace_level) printf("WMQ::QueueManager.connect() Backing out due to unhandled exception\n");
@@ -1382,7 +1371,7 @@ static int QueueManager_execute_each (VALUE array, PQUEUE_MANAGER pqm)
1382
1371
  VALUE QueueManager_execute(VALUE self, VALUE hash)
1383
1372
  {
1384
1373
  #ifdef MQHB_UNUSABLE_HBAG
1385
- VALUE val, str;
1374
+ VALUE val;
1386
1375
  PQUEUE_MANAGER pqm;
1387
1376
  Data_Get_Struct(self, QUEUE_MANAGER, pqm);
1388
1377
 
@@ -1420,7 +1409,7 @@ VALUE QueueManager_execute(VALUE self, VALUE hash)
1420
1409
  #else
1421
1410
  rb_iterate (rb_each, hash, QueueManager_execute_each, (VALUE)pqm);
1422
1411
  #endif
1423
- if(pqm->trace_level) printf ("WMQ::QueueManager#execute() Queue Manager Handle:%ld\n", pqm->hcon);
1412
+ if(pqm->trace_level) printf ("WMQ::QueueManager#execute() Queue Manager Handle:%ld\n", (long)pqm->hcon);
1424
1413
 
1425
1414
  pqm->mqExecute(
1426
1415
  pqm->hcon, /* MQ connection handle */
@@ -1454,7 +1443,7 @@ VALUE QueueManager_execute(VALUE self, VALUE hash)
1454
1443
  pqm->mqCountItems(pqm->reply_bag, MQHA_BAG_HANDLE, &numberOfBags, &pqm->comp_code, &pqm->reason_code);
1455
1444
  CHECK_COMPLETION_CODE("Counting number of bags returned from the command server")
1456
1445
 
1457
- if(pqm->trace_level > 1) printf("WMQ::QueueManager#execute() %ld bags returned\n", numberOfBags);
1446
+ if(pqm->trace_level > 1) printf("WMQ::QueueManager#execute() %ld bags returned\n", (long)numberOfBags);
1458
1447
  array = rb_ary_new2(numberOfBags);
1459
1448
 
1460
1449
  for ( bag_index=0; bag_index<numberOfBags; bag_index++) /* For each bag, extract the queue depth */
@@ -1467,7 +1456,7 @@ VALUE QueueManager_execute(VALUE self, VALUE hash)
1467
1456
  pqm->mqCountItems(qAttrsBag, MQSEL_ALL_SELECTORS, &number_of_items, &pqm->comp_code, &pqm->reason_code);
1468
1457
  CHECK_COMPLETION_CODE("Counting number of items in this bag")
1469
1458
 
1470
- if(pqm->trace_level > 1) printf("WMQ::QueueManager#execute() Bag %ld contains %ld items\n", bag_index, number_of_items);
1459
+ if(pqm->trace_level > 1) printf("WMQ::QueueManager#execute() Bag %d contains %ld items\n", bag_index, (long)number_of_items);
1471
1460
 
1472
1461
  for (items=0; items<number_of_items; items++) /* For each item, extract it's value */
1473
1462
  {
@@ -1490,7 +1479,7 @@ VALUE QueueManager_execute(VALUE self, VALUE hash)
1490
1479
  CHECK_COMPLETION_CODE("Inquiring Integer item")
1491
1480
 
1492
1481
  if(pqm->trace_level > 1)
1493
- printf("WMQ::QueueManager#execute() Item %ld: Integer:%ld, selector:%ld\n", items, qDepth, selector);
1482
+ printf("WMQ::QueueManager#execute() Item %d: Integer:%ld, selector:%ld\n", items, (long)qDepth, (long)selector);
1494
1483
 
1495
1484
  rb_hash_aset(hash, ID2SYM(wmq_selector_id(selector)), LONG2NUM(qDepth));
1496
1485
  break;
@@ -1499,8 +1488,8 @@ VALUE QueueManager_execute(VALUE self, VALUE hash)
1499
1488
  pqm->mqInquireString(qAttrsBag, MQSEL_ALL_SELECTORS, items, WMQ_EXEC_STRING_INQ_BUFFER_SIZE-1, inquiry_buffer,
1500
1489
  &size, NULL, &pqm->comp_code, &pqm->reason_code);
1501
1490
  if(pqm->trace_level > 2)
1502
- printf("WMQ::QueueManager#execute() mqInquireString buffer size: %ld, string size:%ld\n",
1503
- WMQ_EXEC_STRING_INQ_BUFFER_SIZE,size);
1491
+ printf("WMQ::QueueManager#execute() mqInquireString buffer size: %d, string size:%ld\n",
1492
+ WMQ_EXEC_STRING_INQ_BUFFER_SIZE,(long)size);
1504
1493
  CHECK_COMPLETION_CODE("Inquiring String item")
1505
1494
 
1506
1495
  length = 0;
@@ -1519,8 +1508,8 @@ VALUE QueueManager_execute(VALUE self, VALUE hash)
1519
1508
  if(pqm->trace_level > 1)
1520
1509
  {
1521
1510
  inquiry_buffer[length] = '\0';
1522
- printf("WMQ::QueueManager#execute() Item %ld: String:'%s', selector:%ld\n",
1523
- items, inquiry_buffer, selector);
1511
+ printf("WMQ::QueueManager#execute() Item %d: String:'%s', selector:%ld\n",
1512
+ items, inquiry_buffer, (long)selector);
1524
1513
  }
1525
1514
  break;
1526
1515
 
@@ -1529,7 +1518,7 @@ VALUE QueueManager_execute(VALUE self, VALUE hash)
1529
1518
  break;
1530
1519
 
1531
1520
  default:
1532
- printf("Ignoring Unknown type:%ld\n", item_type);
1521
+ printf("Ignoring Unknown type:%ld\n", (long)item_type);
1533
1522
  break;
1534
1523
  }
1535
1524
  }
data/tests/test.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # Shift include path to use locally built copy of rubywmq - For testing dev builds only
2
2
  #$:.unshift '../lib'
3
3
 
4
+ require 'rubygems'
4
5
  require 'wmq/wmq'
5
6
  require 'wmq/wmq_const_admin'
6
7
  require 'test/unit'
metadata CHANGED
@@ -1,53 +1,50 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.1
3
- specification_version: 1
4
2
  name: rubywmq
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.3.0
7
- date: 2007-01-19 00:00:00 -05:00
8
- summary: Ruby interface into WebSphere MQ (MQSeries)
9
- require_paths:
10
- - lib
11
- email: rubywmq@gmail.com
12
- homepage: http://rubywmq.rubyforge.org
13
- rubyforge_project: rubywmq
14
- description:
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 1.8.0
24
- version:
4
+ version: 1.0.0
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Reid Morrison
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-07 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: rubywmq@gmail.com
18
+ executables: []
19
+
20
+ extensions:
21
+ - ext/extconf.rb
22
+ extra_rdoc_files:
23
+ - README
24
+ - LICENSE
31
25
  files:
32
- - examples/each_a.rb
33
- - examples/each_b.rb
34
- - examples/each_header.rb
35
- - examples/files_to_q.rb
36
- - examples/get_a.rb
37
- - examples/get_client.rb
38
- - examples/put1_a.rb
39
- - examples/put1_b.rb
40
- - examples/put1_c.rb
41
- - examples/put_a.rb
42
26
  - examples/put_b.rb
43
- - examples/put_dlh.rb
44
- - examples/put_dynamic_q.rb
27
+ - examples/put1_b.rb
28
+ - examples/each_a.rb
45
29
  - examples/put_rfh.rb
30
+ - examples/put_group_b.rb
46
31
  - examples/put_rfh2_a.rb
47
- - examples/put_rfh2_b.rb
48
- - examples/put_xmit_q.rb
32
+ - examples/put_dlh.rb
33
+ - examples/put_a.rb
49
34
  - examples/request.rb
35
+ - examples/get_client.rb
50
36
  - examples/server.rb
37
+ - examples/each_header.rb
38
+ - examples/put1_c.rb
39
+ - examples/put1_a.rb
40
+ - examples/put_rfh2_b.rb
41
+ - examples/each_b.rb
42
+ - examples/q_to_files.rb
43
+ - examples/put_xmit_q.rb
44
+ - examples/put_group_a.rb
45
+ - examples/get_a.rb
46
+ - examples/files_to_q.rb
47
+ - examples/put_dynamic_q.rb
51
48
  - .document
52
49
  - lib/wmq.rb
53
50
  - ext/lib/wmq_temp.rb
@@ -70,18 +67,31 @@ files:
70
67
  - examples/files_to_q.cfg
71
68
  - README
72
69
  - LICENSE
73
- test_files:
74
- - tests/test.rb
70
+ has_rdoc: true
71
+ homepage: http://rubywmq.rubyforge.org
72
+ post_install_message:
75
73
  rdoc_options: []
76
74
 
77
- extra_rdoc_files:
78
- - README
79
- - LICENSE
80
- executables: []
81
-
82
- extensions:
83
- - ext/extconf.rb
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 1.8.0
82
+ version:
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: "0"
88
+ version:
84
89
  requirements:
85
90
  - WebSphere MQ, v5.3 or greater
86
- dependencies: []
87
-
91
+ rubyforge_project: rubywmq
92
+ rubygems_version: 1.1.1
93
+ signing_key:
94
+ specification_version: 2
95
+ summary: Ruby interface into WebSphere MQ (MQSeries)
96
+ test_files:
97
+ - tests/test.rb