package com.blazemeter.jmeter.xmpp;
import org.apache.jmeter.config.ConfigTestElement;
import org.apache.jmeter.testelement.TestStateListener;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
import org.jivesoftware.smack.XMPPConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Arrays;
public abstract class JMeterXMPPConnectionBase extends ConfigTestElement implements TestStateListener {
private static final Logger log = LoggingManager.getLoggerForClass();
private static final String ADDRESS = "address";
private static final String PORT = "port";
private static final String SERVICE_NAME = "service_name";
private static final String TIMEOUT = "timeout";
private static final String TYPE = "class";
private static final String BOSH_IS_SSL = "bosh_is_ssl";
private static final String BOSH_URL = "bosh_url";
private static final String FROM_MODE = "from_mode";
public String getAddress() {
return getPropertyAsString(ADDRESS);
}
public void setAddress(String value) {
setProperty(ADDRESS, value);
}
public String getPort() {
return getPropertyAsString(PORT, "5222");
}
public void setPort(String value) {
setProperty(PORT, value);
}
public String getServiceName() {
return getPropertyAsString(SERVICE_NAME);
}
public void setServiceName(String value) {
setProperty(SERVICE_NAME, value);
}
public boolean isBOSHSSL() {
return getPropertyAsBoolean(BOSH_IS_SSL);
}
public void setBOSHSSL(boolean value) {
setProperty(BOSH_IS_SSL, value);
}
public String getBOSHURL() {
return getPropertyAsString(BOSH_URL, "/http-bind/");
}
public void setBOSHURL(String value) {
setProperty(BOSH_URL, value);
}
public String getPacketReplyTimeout() {
return getPropertyAsString(TIMEOUT, "1000");
}
public void setPacketReplyTimeout(String value) {
setProperty(TIMEOUT, value);
}
public String getConnectionType() {
return getPropertyAsString(TYPE, JMeterXMPPConnectionBase.Type.TCP.toString());
}
public void setConnectionType(String value) {
setProperty(TYPE, value);
}
public XMPPConnection.FromMode getFromMode() {
String str = getPropertyAsString(FROM_MODE, XMPPConnection.FromMode.USER.toString());
if (str.equals(XMPPConnection.FromMode.USER.toString())) {
return XMPPConnection.FromMode.USER;
} else if (str.equals(XMPPConnection.FromMode.UNCHANGED.toString())) {
return XMPPConnection.FromMode.UNCHANGED;
} else if (str.equals(XMPPConnection.FromMode.OMITTED.toString())) {
return XMPPConnection.FromMode.OMITTED;
} else {
throw new IllegalArgumentException("Unhandled value for fromMode: " + str);
}
}
public void setFromMode(String value) {
setProperty(FROM_MODE, value);
}
@Override
public void testStarted(String host) {
}
protected SSLContext getSSLContext() throws NoSuchAlgorithmException, KeyManagementException {
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(this.getKS(), this.getTM(), new java.security.SecureRandom());
return ctx;
}
private KeyManager[] getKS() {
return new KeyManager[0];
}
private TrustManager[] getTM() {
TrustManager[] res = new TrustManager[1];
res[0] = new DummyTrustManager();
return res;
}
@Override
public void testEnded() {
testEnded("");
}
@Override
public void testStarted() {
testStarted("");
}
public abstract void resetConnection();
public enum Type {TCP, BOSH}
private class DummyTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
log.debug("checkClientTrusted " + s + ": " + Arrays.toString(x509Certificates));
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
log.debug("checkServerTrusted " + s);
}
@Override
public X509Certificate[] getAcceptedIssuers() {
log.debug("getAcceptedIssuers");
return new X509Certificate[0];
}
}
}