diff --git a/include/ts_profile.hrl b/include/ts_profile.hrl index 1ae88ad3e..b13371916 100644 --- a/include/ts_profile.hrl +++ b/include/ts_profile.hrl @@ -54,7 +54,7 @@ % protocol options -record(proto_opts, - {ssl_ciphers = negociate, % for ssl only + {ssl_ciphers = negotiate, % for ssl only bosh_path = "/http-bind/", % for bash only tcp_reuseaddr = false, % for tcp reuseaddr ip_transparent = false, % set IP_TRANSPARENT option on the socket diff --git a/src/tsung/ts_ssl.erl b/src/tsung/ts_ssl.erl index 91e6ca6dc..5c9f170ac 100644 --- a/src/tsung/ts_ssl.erl +++ b/src/tsung/ts_ssl.erl @@ -8,15 +8,19 @@ -include("ts_config.hrl"). -protocol_options(#proto_opts{ssl_ciphers=Ciphers, certificate = Cert, +protocol_options(#proto_opts{ssl_versions=Versions, ssl_ciphers=Ciphers, certificate = Cert, is_first_connect = First, reuse_sessions =Reuse}) when First or not Reuse-> - [binary, {active, once}, {reuse_sessions, false} ] ++ Cert ++ set_ciphers(Ciphers); -protocol_options(#proto_opts{ssl_ciphers=Ciphers, certificate = Cert}) -> - [binary, {active, once}] ++ Cert ++ set_ciphers(Ciphers). + [binary, {active, once}, {reuse_sessions, false} ] ++ Cert ++ set_ciphers(Ciphers) ++ set_versions(Versions); +protocol_options(#proto_opts{ssl_versions=Versions, ssl_ciphers=Ciphers, certificate = Cert}) -> + [binary, {active, once}] ++ Cert ++ set_ciphers(Ciphers) ++ set_versions(Versions). -set_ciphers(negociate)-> []; +set_ciphers(negotiate)-> []; set_ciphers(Ciphers) -> [{ciphers, Ciphers}]. +set_versions(negotiate)-> []; +set_versions(Versions) -> [{versions, Versions}]. + + %% -> {ok, Socket} connect(Host, Port, Opts) when is_list(Host) -> connect(Host, Port, opts_to_tcp_opts(Opts), infinity); diff --git a/src/tsung/tsung.app.in b/src/tsung/tsung.app.in index e97d44b3c..29f1f042b 100644 --- a/src/tsung/tsung.app.in +++ b/src/tsung/tsung.app.in @@ -35,7 +35,8 @@ {http_modified_since_date, "Fri, 14 Nov 2003 02:43:31 GMT"}, {client_retry_timeout, 10}, % retry sending (in microsec.) {max_retries, 3}, % number of max retries - {ssl_ciphers, negociate}, + {ssl_ciphers, negotiate}, + {ssl_versions, negotiate}, %%% -------- JABBER OPTIONS {jabber_users, 2000000}, diff --git a/src/tsung_controller/ts_config.erl b/src/tsung_controller/ts_config.erl index 16dd3d8ef..c5ff2c0c0 100644 --- a/src/tsung_controller/ts_config.erl +++ b/src/tsung_controller/ts_config.erl @@ -782,11 +782,17 @@ parse(Element = #xmlElement{name=option, attributes=Attrs}, ets:insert(Tab,{{thinktime, override}, Override}), lists:foldl( fun parse/2, Conf, Element#xmlElement.content); "ssl_ciphers" -> - Cipher = getAttr(string,Attrs, value, negociate), + Cipher = getAttr(string,Attrs, value, negotiate), OldProto = Conf#config.proto_opts, NewProto = OldProto#proto_opts{ssl_ciphers=Cipher}, lists:foldl( fun parse/2, Conf#config{proto_opts=NewProto}, Element#xmlElement.content); + "ssl_versions" -> + Protocol = getAttr(atom,Attrs, value, negotiate), + OldProto = Conf#config.proto_opts, + NewProto = OldProto#proto_opts{ssl_versions=[Protocol]}, + lists:foldl( fun parse/2, Conf#config{proto_opts=NewProto}, + Element#xmlElement.content); "ssl_reuse_sessions" -> case getAttr(atom,Attrs, value, true) of false ->