Author: sebb
Date: Fri Mar 18 12:19:46 2011
New Revision: 1082883
URL: http://svn.apache.org/viewvc?rev=1082883&view=rev
Log:
Bug 50937 - TCP Sampler does not provide for / honor connect timeout
Added:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/ServerPanel.java
(with props)
Modified:
jakarta/jmeter/trunk/docs/images/screenshots/tcpsampler.png
jakarta/jmeter/trunk/docs/images/screenshots/tcpsamplerconfig.png
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
jakarta/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/config/gui/TCPConfigGui.java
jakarta/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java
jakarta/jmeter/trunk/xdocs/changes.xml
jakarta/jmeter/trunk/xdocs/images/screenshots/tcpsampler.png
jakarta/jmeter/trunk/xdocs/images/screenshots/tcpsamplerconfig.png
jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
Modified: jakarta/jmeter/trunk/docs/images/screenshots/tcpsampler.png
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/tcpsampler.png?rev=1082883&r1=1082882&r2=1082883&view=diff
==============================================================================
Binary files - no diff available.
Modified: jakarta/jmeter/trunk/docs/images/screenshots/tcpsamplerconfig.png
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/tcpsamplerconfig.png?rev=1082883&r1=1082882&r2=1082883&view=diff
==============================================================================
Binary files - no diff available.
Added: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/ServerPanel.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/ServerPanel.java?rev=1082883&view=auto
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/ServerPanel.java (added)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/ServerPanel.java Fri
Mar 18 12:19:46 2011
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jmeter.gui;
+
+import java.awt.BorderLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.apache.jmeter.gui.util.HorizontalPanel;
+import org.apache.jmeter.gui.util.VerticalPanel;
+import org.apache.jmeter.util.JMeterUtils;
+
+/**
+ * Common server panel implementation for use with HTTP, TCP etc samplers
+ */
+public class ServerPanel extends JPanel {
+
+ private static final long serialVersionUID = -2749091243070619669L;
+
+ private JTextField domain;
+
+ private JTextField port;
+
+ private JTextField connectTimeOut;
+
+ private JTextField responseTimeOut;
+
+ /**
+ * create the target server panel.
+ * <ul>
+ * <li>Server IP</li>
+ * <li>Server Port</li>
+ * <li>Connect Timeout</li>
+ * <li>Response Timeout</li>
+ * </ul>
+ */
+ public ServerPanel() {
+ init();
+ }
+
+ /**
+ * clear all the fields
+ */
+ public void clear() {
+ domain.setText("");
+ port.setText("");
+ connectTimeOut.setText("");
+ responseTimeOut.setText("");
+ }
+
+ public String getServer(){
+ return domain.getText();
+ }
+
+ public void setServer(String value){
+ domain.setText(value);
+ }
+
+ public String getPort(){
+ return port.getText();
+ }
+
+ public void setPort(String value){
+ port.setText(value);
+ }
+
+ public String getConnectTimeout(){
+ return connectTimeOut.getText();
+ }
+
+ public void setConnectTimeout(String value){
+ connectTimeOut.setText(value);
+ }
+
+ public String getResponseTimeout(){
+ return responseTimeOut.getText();
+ }
+
+ public void setResponseTimeout(String value){
+ responseTimeOut.setText(value);
+ }
+
+ private void init() {
+ setLayout(new BorderLayout(5, 0));
+ // Target server panel
+ JPanel webServerPanel = new HorizontalPanel();
+
webServerPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
+ JMeterUtils.getResString("target_server"))); // $NON-NLS-1$
+ final JPanel domainPanel = getDomainPanel();
+ final JPanel portPanel = getPortPanel();
+ webServerPanel.add(domainPanel, BorderLayout.CENTER);
+ webServerPanel.add(portPanel, BorderLayout.EAST);
+
+ JPanel timeOut = new HorizontalPanel();
+
timeOut.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
+ JMeterUtils.getResString("web_server_timeout_title"))); //
$NON-NLS-1$
+ final JPanel connPanel = getConnectTimeOutPanel();
+ final JPanel reqPanel = getResponseTimeOutPanel();
+ timeOut.add(connPanel);
+ timeOut.add(reqPanel);
+
+ JPanel webServerTimeoutPanel = new VerticalPanel();
+ webServerTimeoutPanel.add(webServerPanel, BorderLayout.CENTER);
+ webServerTimeoutPanel.add(timeOut, BorderLayout.EAST);
+
+ JPanel bigPanel = new VerticalPanel();
+ bigPanel.add(webServerTimeoutPanel);
+
+ add(bigPanel);
+ }
+
+ private JPanel getDomainPanel() {
+ domain = new JTextField(20);
+
+ JLabel label = new
JLabel(JMeterUtils.getResString("web_server_domain")); // $NON-NLS-1$
+ label.setLabelFor(domain);
+
+ JPanel panel = new JPanel(new BorderLayout(5, 0));
+ panel.add(label, BorderLayout.WEST);
+ panel.add(domain, BorderLayout.CENTER);
+ return panel;
+ }
+
+ private JPanel getPortPanel() {
+ port = new JTextField(4);
+
+ JLabel label = new
JLabel(JMeterUtils.getResString("web_server_port")); // $NON-NLS-1$
+ label.setLabelFor(port);
+
+ JPanel panel = new JPanel(new BorderLayout(5, 0));
+ panel.add(label, BorderLayout.WEST);
+ panel.add(port, BorderLayout.CENTER);
+
+ return panel;
+ }
+
+ private JPanel getConnectTimeOutPanel() {
+ connectTimeOut = new JTextField(4);
+
+ JLabel label = new
JLabel(JMeterUtils.getResString("web_server_timeout_connect")); // $NON-NLS-1$
+ label.setLabelFor(connectTimeOut);
+
+ JPanel panel = new JPanel(new BorderLayout(5, 0));
+ panel.add(label, BorderLayout.WEST);
+ panel.add(connectTimeOut, BorderLayout.CENTER);
+
+ return panel;
+ }
+
+ private JPanel getResponseTimeOutPanel() {
+ responseTimeOut = new JTextField(4);
+
+ JLabel label = new
JLabel(JMeterUtils.getResString("web_server_timeout_response")); // $NON-NLS-1$
+ label.setLabelFor(responseTimeOut);
+
+ JPanel panel = new JPanel(new BorderLayout(5, 0));
+ panel.add(label, BorderLayout.WEST);
+ panel.add(responseTimeOut, BorderLayout.CENTER);
+
+ return panel;
+ }
+
+}
Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/ServerPanel.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/ServerPanel.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1082883&r1=1082882&r2=1082883&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
Fri Mar 18 12:19:46 2011
@@ -879,6 +879,7 @@ table_visualizer_status=Status
table_visualizer_success=Success
table_visualizer_thread_name=Thread Name
table_visualizer_warning=Warning
+target_server=Target Server
tcp_classname=TCPClient classname\:
tcp_config_title=TCP Sampler Config
tcp_nodelay=Set NoDelay
Modified:
jakarta/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/config/gui/TCPConfigGui.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/config/gui/TCPConfigGui.java?rev=1082883&r1=1082882&r2=1082883&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/config/gui/TCPConfigGui.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/config/gui/TCPConfigGui.java
Fri Mar 18 12:19:46 2011
@@ -28,6 +28,8 @@ import javax.swing.JTextField;
import org.apache.jmeter.config.ConfigTestElement;
import org.apache.jmeter.config.gui.AbstractConfigGui;
+import org.apache.jmeter.gui.ServerPanel;
+import org.apache.jmeter.gui.util.HorizontalPanel;
import org.apache.jmeter.gui.util.VerticalPanel;
import org.apache.jmeter.protocol.tcp.sampler.TCPSampler;
import org.apache.jmeter.testelement.TestElement;
@@ -38,16 +40,13 @@ public class TCPConfigGui extends Abstra
private static final long serialVersionUID = 240L;
+ private ServerPanel serverPanel;
+
private JLabeledTextField classname;
- private JTextField server;
-
private JCheckBox reUseConnection;
- private JTextField port;
-
// NOTUSED yet private JTextField filename;
- private JTextField timeout;
private JCheckBox setNoDelay;
@@ -73,12 +72,13 @@ public class TCPConfigGui extends Abstra
super.configure(element);
// N.B. this will be a config element, so we cannot use the getXXX()
methods
classname.setText(element.getPropertyAsString(TCPSampler.CLASSNAME));
- server.setText(element.getPropertyAsString(TCPSampler.SERVER));
+ serverPanel.setServer(element.getPropertyAsString(TCPSampler.SERVER));
// Default to original behaviour, i.e. re-use connection
reUseConnection.setSelected(element.getPropertyAsBoolean(TCPSampler.RE_USE_CONNECTION,true));
- port.setText(element.getPropertyAsString(TCPSampler.PORT));
+ serverPanel.setPort(element.getPropertyAsString(TCPSampler.PORT));
// filename.setText(element.getPropertyAsString(TCPSampler.FILENAME));
- timeout.setText(element.getPropertyAsString(TCPSampler.TIMEOUT));
+
serverPanel.setResponseTimeout(element.getPropertyAsString(TCPSampler.TIMEOUT));
+
serverPanel.setConnectTimeout(element.getPropertyAsString(TCPSampler.TIMEOUT_CONNECT));
setNoDelay.setSelected(element.getPropertyAsBoolean(TCPSampler.NODELAY));
requestData.setText(element.getPropertyAsString(TCPSampler.REQUEST));
}
@@ -98,12 +98,13 @@ public class TCPConfigGui extends Abstra
configureTestElement(element);
// N.B. this will be a config element, so we cannot use the setXXX()
methods
element.setProperty(TCPSampler.CLASSNAME, classname.getText(), "");
- element.setProperty(TCPSampler.SERVER, server.getText());
+ element.setProperty(TCPSampler.SERVER, serverPanel.getServer());
element.setProperty(TCPSampler.RE_USE_CONNECTION,
reUseConnection.isSelected());
- element.setProperty(TCPSampler.PORT, port.getText());
+ element.setProperty(TCPSampler.PORT, serverPanel.getPort());
// element.setProperty(TCPSampler.FILENAME, filename.getText());
element.setProperty(TCPSampler.NODELAY, setNoDelay.isSelected());
- element.setProperty(TCPSampler.TIMEOUT, timeout.getText());
+ element.setProperty(TCPSampler.TIMEOUT,
serverPanel.getResponseTimeout());
+ element.setProperty(TCPSampler.TIMEOUT_CONNECT,
serverPanel.getConnectTimeout(),"");
element.setProperty(TCPSampler.REQUEST, requestData.getText());
}
@@ -114,26 +115,13 @@ public class TCPConfigGui extends Abstra
public void clearGui() {
super.clearGui();
+ serverPanel.clear();
classname.setText(""); //$NON-NLS-1$
- server.setText(""); //$NON-NLS-1$
- port.setText(""); //$NON-NLS-1$
- timeout.setText(""); //$NON-NLS-1$
requestData.setText(""); //$NON-NLS-1$
reUseConnection.setSelected(true);
setNoDelay.setSelected(false);
}
- private JPanel createTimeoutPanel() {
- JLabel label = new JLabel(JMeterUtils.getResString("tcp_timeout")); //
$NON-NLS-1$
-
- timeout = new JTextField(10);
- label.setLabelFor(timeout);
-
- JPanel timeoutPanel = new JPanel(new BorderLayout(5, 0));
- timeoutPanel.add(label, BorderLayout.WEST);
- timeoutPanel.add(timeout, BorderLayout.CENTER);
- return timeoutPanel;
- }
private JPanel createNoDelayPanel() {
JLabel label = new JLabel(JMeterUtils.getResString("tcp_nodelay")); //
$NON-NLS-1$
@@ -147,18 +135,6 @@ public class TCPConfigGui extends Abstra
return nodelayPanel;
}
- private JPanel createServerPanel() {
- JLabel label = new JLabel(JMeterUtils.getResString("server")); //
$NON-NLS-1$
-
- server = new JTextField(10);
- label.setLabelFor(server);
-
- JPanel serverPanel = new JPanel(new BorderLayout(5, 0));
- serverPanel.add(label, BorderLayout.WEST);
- serverPanel.add(server, BorderLayout.CENTER);
- return serverPanel;
- }
-
private JPanel createClosePortPanel() {
JLabel label = new
JLabel(JMeterUtils.getResString("reuseconnection")); //$NON-NLS-1$
@@ -171,18 +147,6 @@ public class TCPConfigGui extends Abstra
return closePortPanel;
}
- private JPanel createPortPanel() {
- JLabel label = new JLabel(JMeterUtils.getResString("tcp_port"));
//$NON-NLS-1$
-
- port = new JTextField(10);
- label.setLabelFor(port);
-
- JPanel PortPanel = new JPanel(new BorderLayout(5, 0));
- PortPanel.add(label, BorderLayout.WEST);
- PortPanel.add(port, BorderLayout.CENTER);
- return PortPanel;
- }
-
private JPanel createRequestPanel() {
JLabel reqLabel = new
JLabel(JMeterUtils.getResString("tcp_request_data")); // $NON-NLS-1$
requestData = new JTextArea(3, 0);
@@ -193,7 +157,6 @@ public class TCPConfigGui extends Abstra
reqDataPanel.add(reqLabel, BorderLayout.WEST);
reqDataPanel.add(requestData, BorderLayout.CENTER);
return reqDataPanel;
-
}
// private JPanel createFilenamePanel()//Not used yet
@@ -214,6 +177,8 @@ public class TCPConfigGui extends Abstra
private void init() {
setLayout(new BorderLayout(0, 5));
+ serverPanel = new ServerPanel();
+
if (displayName) {
setBorder(makeBorder());
add(makeTitlePanel(), BorderLayout.NORTH);
@@ -222,12 +187,12 @@ public class TCPConfigGui extends Abstra
VerticalPanel mainPanel = new VerticalPanel();
classname = new
JLabeledTextField(JMeterUtils.getResString("tcp_classname"));
mainPanel.add(classname);
- final JPanel serverPanel = createServerPanel();
- serverPanel.add(createPortPanel(), BorderLayout.EAST);
mainPanel.add(serverPanel);
- mainPanel.add(createClosePortPanel());
- mainPanel.add(createTimeoutPanel());
- mainPanel.add(createNoDelayPanel());
+
+ HorizontalPanel optionsPanel = new HorizontalPanel();
+ optionsPanel.add(createClosePortPanel());
+ optionsPanel.add(createNoDelayPanel());
+ mainPanel.add(optionsPanel);
mainPanel.add(createRequestPanel());
// mainPanel.add(createFilenamePanel());
Modified:
jakarta/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java?rev=1082883&r1=1082882&r2=1082883&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java
Fri Mar 18 12:19:46 2011
@@ -24,7 +24,9 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.net.InetSocketAddress;
import java.net.Socket;
+import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
@@ -62,6 +64,8 @@ public class TCPSampler extends Abstract
public static final String TIMEOUT = "TCPSampler.timeout"; //$NON-NLS-1$
+ public static final String TIMEOUT_CONNECT = "TCPSampler.ctimeout";
//$NON-NLS-1$
+
public static final String REQUEST = "TCPSampler.request"; //$NON-NLS-1$
public static final String RE_USE_CONNECTION =
"TCPSampler.reUseConnection"; //$NON-NLS-1$
@@ -148,7 +152,9 @@ public class TCPSampler extends Abstract
// Not in cache, so create new one and cache it
try {
closeSocket(); // Bug 44910 - close previous socket (if any)
- con = new Socket(getServer(), getPort());
+ SocketAddress sockaddr = new InetSocketAddress(getServer(),
getPort());
+ con = new Socket();
+ con.connect(sockaddr, getConnectTimeout());
con.setSoTimeout(getTimeout());
con.setTcpNoDelay(getNoDelay());
@@ -221,6 +227,14 @@ public class TCPSampler extends Abstract
return getPropertyAsInt(TIMEOUT);
}
+ public void setConnectTimeout(String newTimeout) {
+ this.setProperty(TIMEOUT_CONNECT, newTimeout, "");
+ }
+
+ public int getConnectTimeout() {
+ return getPropertyAsInt(TIMEOUT_CONNECT, 0);
+ }
+
public void setNoDelay(String newNoDelay) {
this.setProperty(NODELAY, newNoDelay);
}
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1082883&r1=1082882&r2=1082883&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Fri Mar 18 12:19:46 2011
@@ -158,6 +158,7 @@ Fixed RMI startup to provide location of
<li>Bug 50268 - Adds static and dynamic destinations to JMS Publisher</li>
<li>JMS Subscriber - Add dynamic destination</li>
<li>Bug 50666 - JMSSubscriber: support for durable subscriptions</li>
+<li>Bug 50937 - TCP Sampler does not provide for / honor connect timeout</li>
</ul>
<h3>Controllers</h3>
Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/tcpsampler.png
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/tcpsampler.png?rev=1082883&r1=1082882&r2=1082883&view=diff
==============================================================================
Binary files - no diff available.
Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/tcpsamplerconfig.png
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/tcpsamplerconfig.png?rev=1082883&r1=1082882&r2=1082883&view=diff
==============================================================================
Binary files - no diff available.
Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1082883&r1=1082882&r2=1082883&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Fri Mar 18
12:19:46 2011
@@ -1054,7 +1054,7 @@ For details, see <complink name="BSF Sam
</description>
</component>
-<component name="TCP Sampler" index="§-num;.1.12" width="477"
height="343" screenshot="tcpsampler.png">
+<component name="TCP Sampler" index="§-num;.1.12" width="743"
height="357" screenshot="tcpsampler.png">
<description>
<p>
The TCP Sampler opens a TCP/IP connection to the specified
server.
@@ -1136,7 +1136,8 @@ For details, see <complink name="BSF Sam
<property name="ServerName or IP" required="Yes">Name or IP of TCP
server</property>
<property name="Port Number" required="Yes">Port to be used</property>
<property name="Re-use connection" required="Yes">If selected, the
connection is kept open. Otherwise it is closed when the data has been
read.</property>
- <property name="Timeout (milliseconds)" required="No">Timeout for
replies.</property>
+ <property name="Connect Timeout" required="No">Connect Timeout
(milliseconds, 0 disables).</property>
+ <property name="Response Timeout" required="No">Response Timeout
(milliseconds, 0 disables).</property>
<property name="Set Nodelay" required="Yes">See
java.net.Socket.setTcpNoDelay().
If selected, this will disable Nagle's algorithm, otherwise Nagle's
algorithm will be used.</property>
<property name="Text to Send" required="Yes">Text to be sent</property>
@@ -3252,7 +3253,7 @@ OR<br/>jdbc:oracle:thin:@(description=(a
</component>
-<component name="TCP Sampler Config" index="§-num;.4.12" width="476"
height="272" screenshot="tcpsamplerconfig.png">
+<component name="TCP Sampler Config" index="§-num;.4.12" width="747"
height="251" screenshot="tcpsamplerconfig.png">
<description>
<p>
The TCP Sampler Config provides default data for the TCP Sampler
@@ -3264,7 +3265,8 @@ OR<br/>jdbc:oracle:thin:@(description=(a
<property name="ServerName or IP" required="">Name or IP of TCP
server</property>
<property name="Port Number" required="">Port to be used</property>
<property name="Re-use connection" required="Yes">If selected, the
connection is kept open. Otherwise it is closed when the data has been
read.</property>
- <property name="Timeout (milliseconds)" required="">Timeout for
replies</property>
+ <property name="Connect Timeout" required="No">Connect Timeout
(milliseconds, 0 disables).</property>
+ <property name="Response Timeout" required="No">Response Timeout
(milliseconds, 0 disables).</property>
<property name="Set Nodelay" required="">Should the nodelay property be
set?</property>
<property name="Text to Send" required="">Text to be sent</property>
</properties>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]