@@ -78,75 +78,81 @@ protected void createSessionInitiators()
7878 throws ConfigError {
7979 try {
8080 createSessions ();
81- SessionSettings settings = getSettings ();
8281 for (final Session session : getSessionMap ().values ()) {
83- final SessionID sessionID = session .getSessionID ();
84- final int [] reconnectingIntervals = getReconnectIntervalInSeconds (sessionID );
85-
86- final SocketAddress [] socketAddresses = getSocketAddresses (sessionID );
87- if (socketAddresses .length == 0 ) {
88- throw new ConfigError ("Must specify at least one socket address" );
89- }
90-
91- SocketAddress localAddress = getLocalAddress (settings , sessionID );
82+ createInitiator (session );
83+ }
84+ } catch (final FieldConvertError e ) {
85+ throw new ConfigError (e );
86+ }
87+ }
9288
93- final NetworkingOptions networkingOptions = new NetworkingOptions (getSettings ()
94- .getSessionProperties (sessionID , true ));
89+ private void createInitiator (final Session session ) throws ConfigError , FieldConvertError {
90+
91+ SessionSettings settings = getSettings ();
92+ final SessionID sessionID = session .getSessionID ();
93+ final int [] reconnectingIntervals = getReconnectIntervalInSeconds (sessionID );
9594
96- boolean sslEnabled = false ;
97- SSLConfig sslConfig = null ;
98- if (getSettings ().isSetting (sessionID , SSLSupport .SETTING_USE_SSL )
99- && BooleanConverter .convert (getSettings ().getString (sessionID , SSLSupport .SETTING_USE_SSL ))) {
100- sslEnabled = true ;
101- sslConfig = SSLSupport .getSslConfig (getSettings (), sessionID );
102- }
95+ final SocketAddress [] socketAddresses = getSocketAddresses (sessionID );
96+ if (socketAddresses .length == 0 ) {
97+ throw new ConfigError ("Must specify at least one socket address" );
98+ }
10399
104- String proxyUser = null ;
105- String proxyPassword = null ;
106- String proxyHost = null ;
100+ SocketAddress localAddress = getLocalAddress (settings , sessionID );
107101
108- String proxyType = null ;
109- String proxyVersion = null ;
102+ final NetworkingOptions networkingOptions = new NetworkingOptions ( getSettings ()
103+ . getSessionProperties ( sessionID , true )) ;
110104
111- String proxyWorkstation = null ;
112- String proxyDomain = null ;
105+ boolean sslEnabled = false ;
106+ SSLConfig sslConfig = null ;
107+ if (getSettings ().isSetting (sessionID , SSLSupport .SETTING_USE_SSL )
108+ && BooleanConverter .convert (getSettings ().getString (sessionID , SSLSupport .SETTING_USE_SSL ))) {
109+ sslEnabled = true ;
110+ sslConfig = SSLSupport .getSslConfig (getSettings (), sessionID );
111+ }
113112
114- int proxyPort = -1 ;
113+ String proxyUser = null ;
114+ String proxyPassword = null ;
115+ String proxyHost = null ;
115116
116- if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_TYPE )) {
117- proxyType = settings .getString (sessionID , Initiator .SETTING_PROXY_TYPE );
118- if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_VERSION )) {
119- proxyVersion = settings .getString (sessionID ,
120- Initiator .SETTING_PROXY_VERSION );
121- }
117+ String proxyType = null ;
118+ String proxyVersion = null ;
122119
123- if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_USER )) {
124- proxyUser = settings .getString (sessionID , Initiator .SETTING_PROXY_USER );
125- proxyPassword = settings .getString (sessionID ,
126- Initiator .SETTING_PROXY_PASSWORD );
127- }
128- if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_WORKSTATION )
129- && getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_DOMAIN )) {
130- proxyWorkstation = settings .getString (sessionID ,
131- Initiator .SETTING_PROXY_WORKSTATION );
132- proxyDomain = settings .getString (sessionID , Initiator .SETTING_PROXY_DOMAIN );
133- }
120+ String proxyWorkstation = null ;
121+ String proxyDomain = null ;
134122
135- proxyHost = settings .getString (sessionID , Initiator .SETTING_PROXY_HOST );
136- proxyPort = (int ) settings .getLong (sessionID , Initiator .SETTING_PROXY_PORT );
137- }
123+ int proxyPort = -1 ;
138124
139- final IoSessionInitiator ioSessionInitiator = new IoSessionInitiator (session ,
140- socketAddresses , localAddress , reconnectingIntervals ,
141- getScheduledExecutorService (), networkingOptions ,
142- getEventHandlingStrategy (), getIoFilterChainBuilder (), sslEnabled , sslConfig ,
143- proxyType , proxyVersion , proxyHost , proxyPort , proxyUser , proxyPassword , proxyDomain , proxyWorkstation );
125+ if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_TYPE )) {
126+ proxyType = settings .getString (sessionID , Initiator .SETTING_PROXY_TYPE );
127+ if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_VERSION )) {
128+ proxyVersion = settings .getString (sessionID ,
129+ Initiator .SETTING_PROXY_VERSION );
130+ }
144131
145- initiators .add (ioSessionInitiator );
132+ if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_USER )) {
133+ proxyUser = settings .getString (sessionID , Initiator .SETTING_PROXY_USER );
134+ proxyPassword = settings .getString (sessionID ,
135+ Initiator .SETTING_PROXY_PASSWORD );
146136 }
147- } catch (final FieldConvertError e ) {
148- throw new ConfigError (e );
137+ if (getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_WORKSTATION )
138+ && getSettings ().isSetting (sessionID , Initiator .SETTING_PROXY_DOMAIN )) {
139+ proxyWorkstation = settings .getString (sessionID ,
140+ Initiator .SETTING_PROXY_WORKSTATION );
141+ proxyDomain = settings .getString (sessionID , Initiator .SETTING_PROXY_DOMAIN );
142+ }
143+
144+ proxyHost = settings .getString (sessionID , Initiator .SETTING_PROXY_HOST );
145+ proxyPort = (int ) settings .getLong (sessionID , Initiator .SETTING_PROXY_PORT );
149146 }
147+
148+ final IoSessionInitiator ioSessionInitiator = new IoSessionInitiator (session ,
149+ socketAddresses , localAddress , reconnectingIntervals ,
150+ getScheduledExecutorService (), networkingOptions ,
151+ getEventHandlingStrategy (), getIoFilterChainBuilder (), sslEnabled , sslConfig ,
152+ proxyType , proxyVersion , proxyHost , proxyPort , proxyUser , proxyPassword , proxyDomain , proxyWorkstation );
153+
154+ initiators .add (ioSessionInitiator );
155+
150156 }
151157
152158 // QFJ-482
@@ -181,8 +187,10 @@ private void createSessions() throws ConfigError, FieldConvertError {
181187 final SessionID sessionID = i .next ();
182188 if (isInitiatorSession (sessionID )) {
183189 try {
184- final Session quickfixSession = createSession (sessionID );
185- initiatorSessions .put (sessionID , quickfixSession );
190+ if (!settings .isSetting (sessionID , SETTING_DYNAMIC_SESSION ) || !settings .getBool (sessionID , SETTING_DYNAMIC_SESSION )) {
191+ final Session quickfixSession = createSession (sessionID );
192+ initiatorSessions .put (sessionID , quickfixSession );
193+ }
186194 } catch (final Throwable e ) {
187195 if (continueInitOnError ) {
188196 log .error ("error during session initialization, continuing..." , e );
@@ -193,11 +201,20 @@ private void createSessions() throws ConfigError, FieldConvertError {
193201 }
194202 }
195203 }
196- if (initiatorSessions .isEmpty ()) {
197- throw new ConfigError ("no initiators in settings" );
198- }
199204 setSessions (initiatorSessions );
200205 }
206+
207+ public void createDynamicSession (SessionID sessionID ) throws ConfigError {
208+
209+ try {
210+ Session session = createSession (sessionID );
211+ super .addDynamicSession (session );
212+ createInitiator (session );
213+ startInitiators ();
214+ } catch (final FieldConvertError e ) {
215+ throw new ConfigError (e );
216+ }
217+ }
201218
202219 private int [] getReconnectIntervalInSeconds (SessionID sessionID ) throws ConfigError {
203220 final SessionSettings settings = getSettings ();
0 commit comments