quickfix-developers Mailing List for QuickFIX (Page 217)
Brought to you by:
orenmnero
You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
|
Feb
(5) |
Mar
(16) |
Apr
(15) |
May
(17) |
Jun
(33) |
Jul
(35) |
Aug
(34) |
Sep
(19) |
Oct
(40) |
Nov
(51) |
Dec
(43) |
2003 |
Jan
(45) |
Feb
(79) |
Mar
(124) |
Apr
(121) |
May
(132) |
Jun
(77) |
Jul
(110) |
Aug
(57) |
Sep
(48) |
Oct
(83) |
Nov
(60) |
Dec
(40) |
2004 |
Jan
(67) |
Feb
(72) |
Mar
(74) |
Apr
(87) |
May
(70) |
Jun
(96) |
Jul
(75) |
Aug
(147) |
Sep
(128) |
Oct
(83) |
Nov
(67) |
Dec
(42) |
2005 |
Jan
(110) |
Feb
(84) |
Mar
(68) |
Apr
(55) |
May
(51) |
Jun
(192) |
Jul
(111) |
Aug
(100) |
Sep
(79) |
Oct
(127) |
Nov
(73) |
Dec
(112) |
2006 |
Jan
(95) |
Feb
(120) |
Mar
(138) |
Apr
(127) |
May
(124) |
Jun
(97) |
Jul
(103) |
Aug
(88) |
Sep
(138) |
Oct
(91) |
Nov
(112) |
Dec
(57) |
2007 |
Jan
(55) |
Feb
(35) |
Mar
(56) |
Apr
(16) |
May
(20) |
Jun
(77) |
Jul
(43) |
Aug
(47) |
Sep
(29) |
Oct
(54) |
Nov
(39) |
Dec
(40) |
2008 |
Jan
(69) |
Feb
(79) |
Mar
(122) |
Apr
(106) |
May
(114) |
Jun
(76) |
Jul
(83) |
Aug
(71) |
Sep
(53) |
Oct
(75) |
Nov
(54) |
Dec
(43) |
2009 |
Jan
(32) |
Feb
(31) |
Mar
(64) |
Apr
(48) |
May
(38) |
Jun
(43) |
Jul
(35) |
Aug
(15) |
Sep
(52) |
Oct
(62) |
Nov
(62) |
Dec
(21) |
2010 |
Jan
(44) |
Feb
(10) |
Mar
(47) |
Apr
(22) |
May
(5) |
Jun
(54) |
Jul
(19) |
Aug
(54) |
Sep
(16) |
Oct
(15) |
Nov
(7) |
Dec
(8) |
2011 |
Jan
(18) |
Feb
(9) |
Mar
(5) |
Apr
(5) |
May
(41) |
Jun
(40) |
Jul
(29) |
Aug
(17) |
Sep
(12) |
Oct
(23) |
Nov
(22) |
Dec
(11) |
2012 |
Jan
(8) |
Feb
(24) |
Mar
(5) |
Apr
(5) |
May
(6) |
Jun
(5) |
Jul
(5) |
Aug
(5) |
Sep
(2) |
Oct
(9) |
Nov
(2) |
Dec
(18) |
2013 |
Jan
(25) |
Feb
(16) |
Mar
(8) |
Apr
(2) |
May
(16) |
Jun
(17) |
Jul
(2) |
Aug
(13) |
Sep
(3) |
Oct
(4) |
Nov
(1) |
Dec
|
2014 |
Jan
(2) |
Feb
|
Mar
(22) |
Apr
(9) |
May
(3) |
Jun
(1) |
Jul
(5) |
Aug
(11) |
Sep
(18) |
Oct
(4) |
Nov
(4) |
Dec
(3) |
2015 |
Jan
(2) |
Feb
|
Mar
|
Apr
(3) |
May
(4) |
Jun
(37) |
Jul
|
Aug
(4) |
Sep
(6) |
Oct
(1) |
Nov
(4) |
Dec
(2) |
2016 |
Jan
(9) |
Feb
(3) |
Mar
(7) |
Apr
(1) |
May
(8) |
Jun
|
Jul
|
Aug
|
Sep
(7) |
Oct
(3) |
Nov
(16) |
Dec
|
2017 |
Jan
(1) |
Feb
(15) |
Mar
(2) |
Apr
(12) |
May
(4) |
Jun
(7) |
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
(23) |
Dec
(8) |
2018 |
Jan
(2) |
Feb
(4) |
Mar
(2) |
Apr
(8) |
May
(3) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2019 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
|
Oct
(5) |
Nov
(3) |
Dec
|
2020 |
Jan
|
Feb
(4) |
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
(12) |
Aug
(5) |
Sep
(3) |
Oct
(1) |
Nov
|
Dec
(1) |
2021 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
2022 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2025 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Steven L. <ste...@2G...> - 2005-01-04 08:24:07
|
Here are more detail errors, and it seems it related to MySQL since the make install is ok when not compiling with MySQL =20 ....... g++ -shared -nostdlib /usr/local/lib/gcc/sparc-sun-solaris2.8/3.4.2/crti.o /usr/ccs/lib/values-Xa.o /usr/local/lib/gcc/sparc-sun-solaris2.8/3.4.2/crtbegin.o .libs/JVM.o .libs/Conversions.o .libs/JavaApplication.o .libs/JavaLog.o .libs/JavaLogFactory.o .libs/JavaMessageStore.o .libs/JavaMessageStoreFactory.o .libs/quickfix_DataDictionary.o .libs/quickfix_FileStore.o .libs/quickfix_FileStoreFactory.o .libs/quickfix_FileLog.o .libs/quickfix_FileLogFactory.o .libs/quickfix_Group.o .libs/quickfix_CppMessageStore.o .libs/quickfix_MemoryStore.o .libs/quickfix_Message.o .libs/quickfix_MySQLStore.o .libs/quickfix_MySQLStoreFactory.o .libs/quickfix_CppLog.o .libs/quickfix_MySQLLog.o .libs/quickfix_MySQLLogFactory.o .libs/quickfix_ScreenLog.o .libs/quickfix_ScreenLogFactory.o .libs/quickfix_Session.o .libs/quickfix_SessionID.o .libs/quickfix_SessionSettings.o .libs/quickfix_SocketAcceptor.o .libs/quickfix_SocketInitiator.o .libs/quickfix_ThreadedSocketAcceptor.o .libs/quickfix_ThreadedSocketInitiator.o -Wl,-R -Wl,/usr/local/lib -Wl,-R -Wl,/usr/local/mysql/lib/mysql -L/usr/local/lib/../sparc-sun-solaris2.8/lib -L/usr/local/sparc-sun-solaris2.8/lib -L/usr/local/sparc-sun-solaris2.8/bin -L/usr2/SOURCES/S8/gcc-3.4.2/objdir/gcc -L/usr2/SOURCES/S8/gcc-3.4.2/objdir/sparc-sun-solaris2.8/libstdc++-v3/sr c/.libs -L/usr2/SOURCES/S8/gcc-3.4.2/objdir/sparc-sun-solaris2.8/libstdc++-v3/sr c -L/usr/local/mysql/lib/mysql -L/usr/local/BerkeleyDB.4.1/lib -L/usr/local/ssl/lib -L/usr/openwin/lib -L/usr/lib -L/usr/local/lib -lquickfix -lrt -lxml2 -lz -lpthread -liconv -lsocket -lnsl -lmysqlclient -liberty -L/usr/local/lib/gcc/sparc-sun-solaris2.8/3.4.2 -L/usr/local/lib/gcc/sparc-sun-solaris2.8/3.4.2/../../../../sparc-sun-so laris2.8/lib -L/usr/ccs/bin -L/usr/ccs/lib -L/usr/local/lib/gcc/sparc-sun-solaris2.8/3.4.2/../../.. -lstdc++ -lm -lgcc_s /usr/local/lib/gcc/sparc-sun-solaris2.8/3.4.2/crtend.o /usr/local/lib/gcc/sparc-sun-solaris2.8/3.4.2/crtn.o -Wl,-h -Wl,libquickfix_jni.so.9 -o .libs/libquickfix_jni.so.9.0.0 Text relocation remains referenced against symbol offset in file <unknown> 0x524 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x528 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x52c /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x530 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x534 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x538 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x53c /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x540 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x544 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x548 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x54c /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x550 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) <unknown> 0x554 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) : ; ; ; __floatdidf 0x4094 /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) __floatdisf 0x401c /usr/local/mysql/lib/mysql/libmysqlclient.a(libmysql.o) __muldi3 0x78 /usr/local/mysql/lib/mysql/libmysqlclient.a(longlong2str.o) __muldi3 0x984 /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __muldi3 0xc18 /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __muldi3 0x22c /usr/local/mysql/lib/mysql/libmysqlclient.a(my_strtoll10.o) __muldi3 0x3f8 /usr/local/mysql/lib/mysql/libmysqlclient.a(my_strtoll10.o) __muldi3 0x440 /usr/local/mysql/lib/mysql/libmysqlclient.a(my_strtoll10.o) __udivdi3 0x5c /usr/local/mysql/lib/mysql/libmysqlclient.a(longlong2str.o) __udivdi3 0x204 /usr/local/mysql/lib/mysql/libmysqlclient.a(longlong2str.o) __udivdi3 0x8d4 /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __udivdi3 0xb68 /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __udivdi3 0xe74 /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __umoddi3 0x8f8 /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __umoddi3 0xb8c /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) ld: fatal: relocations remain against allocatable but non-writable sections collect2: ld returned 1 exit status =20 Thx =20 =20 ________________________________ From: Steven Leung=20 Sent: Tuesday, January 04, 2005 12:54 AM To: Oren Miller; qui...@li... Subject: RE: [Quickfix-developers] Problem on compiling with MySQL =20 Oren, =20 My OS is Solaris 8 and compiler is gcc 3.4.2. And the MySQL itself is running properly. =20 Thx Steven ________________________________ From: Oren Miller [mailto:or...@qu...] Sent: Tue 1/4/2005 12:55 AM To: Steven Leung; qui...@li... Subject: Re: [Quickfix-developers] Problem on compiling with MySQL Steven, =20 Please give details on the operating system and compiler you are using. Thanks. =20 --oren ----- Original Message -----=20 From: Steven Leung <mailto:ste...@2G...> =20 To: qui...@li...=20 Sent: Monday, January 03, 2005 10:26 AM Subject: [Quickfix-developers] Problem on compiling with MySQL =20 Hi, When I compile quickfix 1.9.4 with MySQL option, everything was fine in './configure ' and 'make'. However when I try to 'make install', it show a huge page of errors, a part of it as follows:=20 =20 ............ sqlclient.a(ctype-simple.o) __udivdi3 0xb68 /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __udivdi3 0xe74 /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __umoddi3 0x8f8 /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __umoddi3 0xb8c /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) ld: fatal: relocations remain against allocatable but non-writable sections collect2: ld returned 1 exit status libtool: install: error: relink `libquickfix_jni.la' with the above command before installing it make[2]: *** [install-libLTLIBRARIES] Error 1 make[2]: Leaving directory `/usr/local/src/quickfix/src/java' make[1]: *** [install-am] Error 2 make[1]: Leaving directory `/usr/local/src/quickfix/src/java' make: *** [install-recursive] Error 1 =20 Please advice. =20 Thanks a lot! Steven |
From: Xizhen W. <wan...@ya...> - 2005-01-03 22:22:21
|
Hi, I got an "UnsatisfiedLinkError" when I run quickfix. The document says, "You havn't built quickfix or the JNI wrapper with MySQL support". I just want to make sure that the existing quickfix_jni.dll file that came with installation was not build with MySQL support. If that's the case, is there any place where I can download the dll file with MySQL support? Or I have to build myself? Thanks! ===== /)_/) ( ._.) c(")(") __________________________________ Do you Yahoo!? Take Yahoo! Mail with you! Get it on your mobile phone. http://mobile.yahoo.com/maildemo |
From: Caleb E. <cal...@gm...> - 2005-01-03 20:50:54
|
On Mon, 3 Jan 2005 11:13:03 -0800 (PST), Xizhen Wang <wan...@ya...> wrote: > I wonder if Quickfix is able to use database other > than MySQL? We are using SQLServer for example. Is > there a way to do it? QuickFIX can use any backing store you like, you'll just need to write some code. You would need to implement a set of MessageStore/MessageStoreFactory classes that interface to SQL Server. The MySQLMessageStore class would be a good starting point, just adapt it to read/write data using the SQL Server APIs. -- Caleb Epstein caleb dot epstein at gmail dot com |
From: Xizhen W. <wan...@ya...> - 2005-01-03 19:13:12
|
Hi Gurus, I wonder if Quickfix is able to use database other than MySQL? We are using SQLServer for example. Is there a way to do it? Thanks! ===== /)_/) ( ._.) c(")(") __________________________________ Do you Yahoo!? Yahoo! Mail - Helps protect you from nasty viruses. http://promotions.yahoo.com/new_mail |
From: Gustavo C. J. <gu...@hz...> - 2005-01-03 18:01:52
|
Hi there, =20 =20 I'm new to Fix and I'm trying to send the logs of the engine to a text box on a form instead of to the default output. =20 Is this possible? How? =20 Tanks in advance. =20 =20 =20 Gustavo Chiamolera Jacob HZB Consultoria Financeira 55-11-4501-2033 =20 |
From: Steven L. <ste...@2G...> - 2005-01-03 17:00:23
|
Oren, =20 My OS is Solaris 8 and compiler is gcc 3.4.2. And the MySQL itself = is running properly. =20 Thx Steven ________________________________ From: Oren Miller [mailto:or...@qu...] Sent: Tue 1/4/2005 12:55 AM To: Steven Leung; qui...@li... Subject: Re: [Quickfix-developers] Problem on compiling with MySQL Steven, =20 Please give details on the operating system and compiler you are using. = Thanks. =20 --oren ----- Original Message -----=20 From: Steven Leung <mailto:ste...@2G...> =20 To: qui...@li...=20 Sent: Monday, January 03, 2005 10:26 AM Subject: [Quickfix-developers] Problem on compiling with MySQL =09 =09 Hi, When I compile quickfix 1.9.4 with MySQL option, everything was = fine in './configure ' and 'make'. However when I try to 'make install', = it show a huge page of errors, a part of it as follows:=20 =20 ............ sqlclient.a(ctype-simple.o) __udivdi3 0xb68 = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __udivdi3 0xe74 = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __umoddi3 0x8f8 = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __umoddi3 0xb8c = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) ld: fatal: relocations remain against allocatable but non-writable = sections collect2: ld returned 1 exit status libtool: install: error: relink `libquickfix_jni.la' with the above = command before installing it make[2]: *** [install-libLTLIBRARIES] Error 1 make[2]: Leaving directory `/usr/local/src/quickfix/src/java' make[1]: *** [install-am] Error 2 make[1]: Leaving directory `/usr/local/src/quickfix/src/java' make: *** [install-recursive] Error 1 =20 Please advice. =20 Thanks a lot! Steven |
From: Oren M. <or...@qu...> - 2005-01-03 16:55:06
|
Steven, Please give details on the operating system and compiler you are using. = Thanks. --oren ----- Original Message -----=20 From: Steven Leung=20 To: qui...@li...=20 Sent: Monday, January 03, 2005 10:26 AM Subject: [Quickfix-developers] Problem on compiling with MySQL Hi, When I compile quickfix 1.9.4 with MySQL option, everything was = fine in './configure ' and 'make'. However when I try to 'make install', = it show a huge page of errors, a part of it as follows:=20 ............ sqlclient.a(ctype-simple.o) __udivdi3 0xb68 = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __udivdi3 0xe74 = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __umoddi3 0x8f8 = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __umoddi3 0xb8c = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) ld: fatal: relocations remain against allocatable but non-writable = sections collect2: ld returned 1 exit status libtool: install: error: relink `libquickfix_jni.la' with the above = command before installing it make[2]: *** [install-libLTLIBRARIES] Error 1 make[2]: Leaving directory `/usr/local/src/quickfix/src/java' make[1]: *** [install-am] Error 2 make[1]: Leaving directory `/usr/local/src/quickfix/src/java' make: *** [install-recursive] Error 1 Please advice. Thanks a lot! Steven |
From: Steven L. <ste...@2G...> - 2005-01-03 16:31:11
|
Hi, When I compile quickfix 1.9.4 with MySQL option, everything was = fine in './configure ' and 'make'. However when I try to 'make install', = it show a huge page of errors, a part of it as follows:=20 =20 ............ sqlclient.a(ctype-simple.o) __udivdi3 0xb68 = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __udivdi3 0xe74 = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __umoddi3 0x8f8 = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) __umoddi3 0xb8c = /usr/local/mysql/lib/mysql/libmysqlclient.a(ctype-simple.o) ld: fatal: relocations remain against allocatable but non-writable = sections collect2: ld returned 1 exit status libtool: install: error: relink `libquickfix_jni.la' with the above = command before installing it make[2]: *** [install-libLTLIBRARIES] Error 1 make[2]: Leaving directory `/usr/local/src/quickfix/src/java' make[1]: *** [install-am] Error 2 make[1]: Leaving directory `/usr/local/src/quickfix/src/java' make: *** [install-recursive] Error 1 =20 Please advice. =20 Thanks a lot! Steven |
From: Radhika S. <Rad...@Pi...> - 2005-01-03 16:17:33
|
Hi, I have been able to analyze my session problems to the way I start and stop socketInitiator(). The first time the app starts - socketInitiator is started and when I logoff a session, socketInitiator is stopped. When I start socketInitiator and try to logon, onLogon is not called, and the session never logs on. I am not exiting my application when I logoff a session and stop the SocketInitiator. I see a few emails about this question. Is anyone starting, stopping, and starting socketInitiator for every session? Thanks, Radhika |
From: Radhika S. <Rad...@Pi...> - 2004-12-31 18:20:18
|
Hi, My client application calls logon() and logout() when I want to start and end a session. before I explain a little, my question is how is calling reset() different from logout(). logon for very first time is successful. isLoggedOn =3D true, sentLogon =3D true, isEnabled =3D true. After logging out and re-logging on,=20 isEnabled =3D true (so logon() does set m_enabled =3D true) sentLogon =3D false isLoggedOn =3D false. Here is the interesting behvavior -=20 if I use the session.reset() function, the problem described above does not occur. Looking into the code I see that all logon() and logoff() is doing is setting the m_enabled flag. reset() calls disconnect(). What does this mean? ie. what is happening differently when I call reset() as opposed to logout(). Also, when the session is started I issue a socketInitiator.stop() to stop the fix engine and restart with start(). I do not know if this has an effect on anything. Thanks in advance. Radhika |
From: Max K. <ma...@vi...> - 2004-12-29 19:50:18
|
Hi Oren, I am using Quickfix 1.7.1 with Java. I am calling the logon() method on my session object, however no logon is ever sent, i.e. onLogon() is never called and isLoggedOn() returns false. Can you point me in the right direction? Thanks, Max -- ------------------------------------------------------------------------ The information contained herein, including attachments, is intended only for use by the addressee(s) named herein and may contain legally privileged and/or confidential information. If you are not the intended recipient of this e-mail, you are hereby notified that any dissemination, distribution or copying of this e-mail, and any attachments thereto, is strictly prohibited. If you have received this e-mail in error, please immediately notify me and permanently delete the original and any copy of any e-mail and any printout thereof. E-mail transmission cannot be guaranteed to be secure or error-free. The sender therefore does not accept liability for any errors or omissions in the contents of this message which arise as a result of e-mail transmission. ViewTrade may, at its discretion, monitor and review the content of all e-mail communications. ********************************************************************** This email message has been swept by MIMEsweeper for the presence of any viruses. www.mimesweeper.com ********************************************************************** |
From: Oren M. <or...@qu...> - 2004-12-28 15:10:09
|
Yeah, those are stored in the FileStore if you are passing in a FileStoreFactory. The documentation talks a little about the naming and format of these files here: http://www.quickfixengine.org/quickfix/doc/html/ class_f_i_x_1_1_file_store.html#_details The file you are interested in is the seqnums file, which contains the next sender and target seqnum to be sent. These are only read at startup however, changing them while the engine is running will have no effect. Otherwise, resetOnLogout and resetOnDisconnect should be setting your sequence numbers back to 1 for both of those events. I can't really say what is going on with your connection issues. Complete message logs (for both sides if possible) would be more helpful in diagnosing the problem. --oren On Dec 28, 2004, at 7:31 AM, Radhika Sambamurti wrote: > QuickFIX Documentation: > http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX FAQ: > http://www.quickfixengine.org/wikifix/index.php?QuickFixFAQ > QuickFIX Support: http://www.quickfixengine.org/services.html > > Hi, > I am a relative FIX/QuickFix newbie, so pl. bear with me. > I am working on a fix client. > I am having session re-connect problems. > When Quickfix starts up, how does it decide which sequence number to > send a message to the server with? > My question is: does it look at the log files? > In the quickfix mail archives I read that the quickfix engine uses the > filestore, to get the last sequence number used? > > The way my QF engine is set the session object is created on a per > session basis. I logout issuing the session.logout() command and login > with session.login() But attempts to re-login are creating sequence > number mismatchs, which I cannot understand. > > From looking at the logs, the Server is definitely sending 1. > The client is starting at 1, but sends about 2 logon messages before > the > server acknowledges it, by which time the sequence number it is > expecting is > 1, whereas the server is sending back only 1. > In total there are 5 logon messages, before a request for resend > occurs. > > What I am hoping is someone can explain to me how the communication > happens between the client and the server. > Whether the log files are controlling what the next sequence number is > (in which case I should be able to remove all log files before > initiating another session) and it should work. > > both resetOnLogout and resetOnDisconnec are set to Y. > > Any ideas, how I can go about this would be helpful. > > Thanks, > Radhika > > > 18 17:14:43.728 0828 0027 {594:MainForm::cmdLogon_Click} Session > selected is: AAAA > 18 17:14:44.384 0828 0027 {MainForm::CacheMessage} Msg is: > 8=FIX.4.09=5935=A34=149=AAAA52=20041227-22:14:4456=BBBBB=0108=3010=119 > 18 17:14:44.384 0828 0027 {MainForm::CacheMessage} Msg is: > 8=FIX.4.09=5935=A34=149=AAAA52=20041227-22:14:4556=AAAA=0108=3010=120 > 04 17:14:44.400 0828 0050 {MainForm::OnSessionLogon} Session Logged On: > AAAA > 18 17:14:44.665 0828 0027 {MainForm::CacheMessage} Msg is: > 8=FIX.4.09=5935=A34=149=AAAA52=20041227-22:14:4456=BBBB98=0108=3010=119 > 04 17:14:44.665 0828 0066 {MainForm::OnSessionLogout} NOW!!!!!!! > Session > Logged Out: AAAA > 18 17:14:49.665 0828 0027 {MainForm::CacheMessage} Msg is: > 8=FIX.4.09=5935=A34=249=AAAA52=20041227-22:14:4956=BBBB98=0108=3010=125 > 18 17:14:49.681 0828 0027 {MainForm::CacheMessage} Msg is: > 8=FIX.4.09=5935=A34=149=AAAA52=20041227-22:14:5156=AAAA98=0108=3010=117 > 04 17:14:49.681 0828 0066 {MainForm::OnSessionLogon} Session Logged On: > AAAA > > event logs: > > 20041227-22:35:13 : Initiated logon request > 20041227-22:35:13 : Initiated logon request > 20041227-22:35:13 : MsgSeqNum too low, expecting 4 but received 1 > 20041227-22:35:13 : Disconnecting > 20041227-22:35:13 : Dropped Connection > 20041227-22:35:14 : Connecting to qablks02 on port 9100 > 20041227-22:35:14 : Connection succeeded > 20041227-22:35:14 : Initiated logon request > 20041227-22:35:14 : MsgSeqNum too low, expecting 4 but received 1 > 20041227-22:35:14 : Disconnecting > > > Radhika Sambamurti > Pipeline Trading Systems > Rad...@pi... > 212-370-8343 > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real > users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers > |
From: Radhika S. <Rad...@Pi...> - 2004-12-28 13:31:09
|
Hi, I am a relative FIX/QuickFix newbie, so pl. bear with me. I am working on a fix client. I am having session re-connect problems. When Quickfix starts up, how does it decide which sequence number to send a message to the server with? My question is: does it look at the log files? In the quickfix mail archives I read that the quickfix engine uses the filestore, to get the last sequence number used? The way my QF engine is set the session object is created on a per session basis. I logout issuing the session.logout() command and login with session.login() But attempts to re-login are creating sequence number mismatchs, which I cannot understand. From looking at the logs, the Server is definitely sending 1. The client is starting at 1, but sends about 2 logon messages before the server acknowledges it, by which time the sequence number it is expecting is > 1, whereas the server is sending back only 1. In total there are 5 logon messages, before a request for resend occurs. What I am hoping is someone can explain to me how the communication happens between the client and the server. Whether the log files are controlling what the next sequence number is (in which case I should be able to remove all log files before initiating another session) and it should work. both resetOnLogout and resetOnDisconnec are set to Y. Any ideas, how I can go about this would be helpful. Thanks, Radhika 18 17:14:43.728 0828 0027 {594:MainForm::cmdLogon_Click} Session selected is: AAAA 18 17:14:44.384 0828 0027 {MainForm::CacheMessage} Msg is: 8=3DFIX.4.09=3D5935=3DA34=3D149=3DAAAA52=3D20041227-22:14:4456=3DBBBBB=3D= 0108=3D3010=3D119 18 17:14:44.384 0828 0027 {MainForm::CacheMessage} Msg is: 8=3DFIX.4.09=3D5935=3DA34=3D149=3DAAAA52=3D20041227-22:14:4556=3DAAAA=3D0= 108=3D3010=3D120 04 17:14:44.400 0828 0050 {MainForm::OnSessionLogon} Session Logged On: AAAA 18 17:14:44.665 0828 0027 {MainForm::CacheMessage} Msg is: 8=3DFIX.4.09=3D5935=3DA34=3D149=3DAAAA52=3D20041227-22:14:4456=3DBBBB98=3D= 0108=3D3010=3D119 04 17:14:44.665 0828 0066 {MainForm::OnSessionLogout} NOW!!!!!!! Session Logged Out: AAAA 18 17:14:49.665 0828 0027 {MainForm::CacheMessage} Msg is: 8=3DFIX.4.09=3D5935=3DA34=3D249=3DAAAA52=3D20041227-22:14:4956=3DBBBB98=3D= 0108=3D3010=3D125 18 17:14:49.681 0828 0027 {MainForm::CacheMessage} Msg is: 8=3DFIX.4.09=3D5935=3DA34=3D149=3DAAAA52=3D20041227-22:14:5156=3DAAAA98=3D= 0108=3D3010=3D117 04 17:14:49.681 0828 0066 {MainForm::OnSessionLogon} Session Logged On: AAAA event logs: 20041227-22:35:13 : Initiated logon request 20041227-22:35:13 : Initiated logon request 20041227-22:35:13 : MsgSeqNum too low, expecting 4 but received 1 20041227-22:35:13 : Disconnecting 20041227-22:35:13 : Dropped Connection 20041227-22:35:14 : Connecting to qablks02 on port 9100 20041227-22:35:14 : Connection succeeded 20041227-22:35:14 : Initiated logon request 20041227-22:35:14 : MsgSeqNum too low, expecting 4 but received 1 20041227-22:35:14 : Disconnecting Radhika Sambamurti Pipeline Trading Systems Rad...@pi... 212-370-8343 |
From: Emil V. <que...@ho...> - 2004-12-16 21:29:09
|
Hi Oren, We also got one unhandled exception in a similar situation - we received logon message with 'fields out of order', which caused Session::generateReject to be called, then it in turn did throw std::logic_error( "Tried to send a reject while not logged on" ); which ended up unhandled and caused the initiator thread to end unhappily :) Of course, adding the ValidateFieldsOutOfOrder setting stopped it from happening. Best regards, Emil >From: "Oren Miller" <or...@qu...> >To: "Michael Raykh" <mr...@li...> >CC: <qui...@li...> >Subject: Re: [Quickfix-developers] empty sequence number on sequence reset >message >Date: Thu, 16 Dec 2004 12:30:38 -0600 >MIME-Version: 1.0 >Received: from sc8-sf-uberspam1.sourceforge.net ([66.35.250.206]) by >mc10-f8.hotmail.com with Microsoft SMTPSVC(6.0.3790.211); Thu, 16 Dec 2004 >09:37:49 -0800 >Received: from projects.sourceforge.net (sc8-sf-list1-b.sourceforge.net >[10.3.1.7])by sc8-sf-uberspam1.sourceforge.net (Postfix) with ESMTPid >EB52A1D0BE6; Thu, 16 Dec 2004 10:31:07 -0800 (PST) >Received: from sc8-sf-mx1-b.sourceforge.net ([10.3.1.11] >helo=sc8-sf-mx1.sourceforge.net)by sc8-sf-list1.sourceforge.net with esmtp >(Exim 4.30)id 1Cf0Of-0004Lx-K6for >qui...@li...; Thu, 16 Dec 2004 10:30:41 -0800 >Received: from smtpout01-04.mesa1.secureserver.net ([64.202.165.79])by >sc8-sf-mx1.sourceforge.net with smtp (Exim 4.41)id 1Cf0Oe-0007bH-K6for >qui...@li...; Thu, 16 Dec 2004 10:30:41 -0800 >Received: (qmail 26867 invoked from network); 16 Dec 2004 18:30:38 -0000 >Received: from unknown (66.134.230.34) by >smtpout01-04.mesa1.secureserver.net (64.202.165.79) with ESMTP; 16 Dec 2004 >18:30:38 -0000 >X-Message-Info: QIy1oIULmHfVuDhxoPgxuVAam7DgymU7Gs9OZr7ESxI= >References: ><4B6...@ex...> >X-MSMail-Priority: Normal >X-Mailer: Microsoft Outlook Express 6.00.2900.2180 >X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 >X-Spam-Score: -4.7 (----) >X-Spam-Report: Spam Filtering performed by sourceforge.net.See >http://spamassassin.org/tag/ for more details.Report problems to >http://sf.net/tracker/?func=add&group_id=1&atid=2000010.1 >HTML_FONTCOLOR_BLUE BODY: HTML font color is blue0.1 HTML_MESSAGE > BODY: HTML included in message-4.9 BAYES_00 BODY: >Bayesian spam probability is 0 to 1%[score: 0.0000]0.0 AWL > AWL: Auto-whitelist adjustment >Errors-To: qui...@li... >X-BeenThere: qui...@li... >X-Mailman-Version: 2.0.9-sf.net >Precedence: bulk >List-Unsubscribe: ><https://lists.sourceforge.net/lists/listinfo/quickfix-developers>,<mailto:qui...@li...?subject=unsubscribe> >List-Id: <quickfix-developers.lists.sourceforge.net> >List-Post: <mailto:qui...@li...> >List-Help: ><mailto:qui...@li...?subject=help> >List-Subscribe: ><https://lists.sourceforge.net/lists/listinfo/quickfix-developers>,<mailto:qui...@li...?subject=subscribe> >List-Archive: ><http://sourceforge.net/mailarchive/forum.php?forum=quickfix-developers> >X-Original-Date: Thu, 16 Dec 2004 12:30:38 -0600 >Return-Path: qui...@li... >X-OriginalArrivalTime: 16 Dec 2004 17:37:49.0750 (UTC) >FILETIME=[F671C560:01C4E395] > >RE: [Quickfix-developers] empty sequence number on sequence reset messageIn >general these should be caught in the Session::next method, which is what >delegates all the calls such as resend requests and such. You'll see that >a whole list of exceptions are being caught and handled in various ways. >What isn't there currently is a catch block for std::exception which should >log the text of the exception. Having this should prevent your app from >crashing and may give you a better indication of what it was not able to >handle. > >--oren > ----- Original Message ----- > From: Michael Raykh > To: 'Oren Miller' > Cc: qui...@li... > Sent: Wednesday, December 15, 2004 3:52 PM > Subject: RE: [Quickfix-developers] empty sequence number on sequence >reset message > > > Generally speaking, to avoid exceptions like these "crashing" my app, >where > these should be caught? > -----Original Message----- > From: Oren Miller [mailto:or...@qu...] > Sent: Wednesday, December 15, 2004 11:41 AM > To: Michael Raykh > Cc: qui...@li... > Subject: Re: [Quickfix-developers] empty sequence number on sequence >reset message > > > Serves me right for not writing a proper functional test for this. >I'll reopen this issue and do it right this time :( > > --oren > ----- Original Message ----- > From: Michael Raykh > To: 'Oren Miller' ; Michael Raykh > Cc: 'qui...@li...' > Sent: Wednesday, December 15, 2004 10:34 AM > Subject: RE: [Quickfix-developers] empty sequence number on sequence >reset message > > > Reported this issue a while back, there was a fix (Session.cpp - >version 1.54-->1.55), > but issue is still there: > > message.getHeader().getField( msgType ); > if( message.getHeader().isSetField( msgSeqNum ) ) > message.getHeader().getField( msgSeqNum ); > if ( message.getHeader().isSetField( possDupFlag ) ) > message.getHeader().getField( possDupFlag ); > > reject.setField( RefSeqNum( msgSeqNum ) ); > > Instead of line message.getHeader().getField( msgSeqNum ) as >originally, > now exception is thrown in reject.setField( RefSeqNum( msgSeqNum ) >); > > -----Original Message----- > From: Oren Miller [mailto:or...@qu...] > Sent: Thursday, November 04, 2004 10:54 AM > To: Michael Raykh > Cc: 'qui...@li...' > Subject: Re: [Quickfix-developers] empty sequence number on sequence > reset message > > > > Well, when a sequence reset is sent in reset mode (123=N) the spec >says > that you should ignore the MsgSeqNum. I guess Appia took this to >mean > that they can choose to just not send it, even though it is listed >as a > required field (not conditionally required) in the standard header. > > First thing that we should do is have QF gracefully handle rejecting >a > message without a sequence number. This should be accomplished >easily > enough by replacing that line with this: > > if( message.getHeader().isSetField( msgSeqNum ) ) > message.getHeader().getField( msgSeqNum ); > > This will essentially cause the reject message to say it is >rejecting > the message with sequence number 0, which I think is a reasonable >thing > to say if there is no sequence number. > > Now the question is do we want to make an exception for this message > type and process the message that doesn't contain this required >field. > I would say since it is our job to "ignore" it, than yes, we should > probably allow it. To accomplish this we will need to allow the > nextSequenceReset method to specify that the validate method should > ignore sequence numbers. We can probably do this by rewriting the > method like so: > > bool Session::verify( const Message& msg, bool checkTooHigh, > bool checkTooLow, bool checkSequenceNumber ) > { QF_STACK_PUSH(Session::verify) > > SenderCompID senderCompID; > TargetCompID targetCompID; > SendingTime sendingTime; > MsgType msgType; > MsgSeqNum msgSeqNum; > > try > { > const Header& header = msg.getHeader(); > header.getField( senderCompID ); > header.getField( targetCompID ); > header.getField( sendingTime ); > header.getField( msgType ); > if( checkSequenceNumber ) > header.getField( msgSeqNum ); > > if ( !validLogonState( msgType ) ) > throw std::logic_error( "Logon state is not valid for >message" ); > > if ( !isGoodTime( sendingTime ) ) > { > doBadTime( msg ); > return false; > } > if ( !isCorrectCompID( senderCompID, targetCompID ) ) > { > doBadCompID( msg ); > return false; > } > if ( checkSequenceNumber && checkTooHigh && isTargetTooHigh( > msgSeqNum ) ) > { > doTargetTooHigh( msg ); > return false; > } > else if ( checkSequenceNumber && checkTooLow && isTargetTooLow( > msgSeqNum ) ) > { > doTargetTooLow( msg ); > return false; > } > > UtcTimeStamp now; > m_state.lastReceivedTime( now ); > m_state.testRequest( 0 ); > } > catch ( std::exception& e ) > { > m_state.onEvent( e.what() ); > disconnect(); > return false; > } > > fromCallback( msgType, msg, m_sessionID ); > return true; > > QF_STACK_POP > } > > On Nov 4, 2004, at 8:33 AM, Michael Raykh wrote: > > > In our test of quickFix against Appia fix engine the following >happens: > > > > - Appia sends sequence reset request msg > > - for some reason sequence number field is not populated on this >reset > > request > > - quickFix decides to reject this > > - crashes in generateReject in > > message.getHeader().getField( msgSeqNum ); > > 'cause message seq number is not set... > > > > > > > > Is this proper behaviour? Any suggestions how to handle this? > > This email and any files transmitted with it are confidential and > > intended solely for the use of the individual or entity to whom >they > > are addressed. If you have received this email in error please >notify > > the system manager. This message contains confidential information >and > > is intended only for the individual named. If you are not the >named > > addressee you should not disseminate, distribute or copy this >e-mail. > > This email and any files transmitted with it are confidential and >intended solely for the use of the individual or entity to whom they are >addressed. If you have received this email in error please notify the >system manager. This message contains confidential information and is >intended only for the individual named. If you are not the named addressee >you should not disseminate, distribute or copy this e-mail. > This email and any files transmitted with it are confidential and >intended solely for the use of the individual or entity to whom they are >addressed. If you have received this email in error please notify the >system manager. This message contains confidential information and is >intended only for the individual named. If you are not the named addressee >you should not disseminate, distribute or copy this e-mail. _________________________________________________________________ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/ |
From: Oren M. <or...@qu...> - 2004-12-16 18:30:43
|
RE: [Quickfix-developers] empty sequence number on sequence reset = messageIn general these should be caught in the Session::next method, = which is what delegates all the calls such as resend requests and such. = You'll see that a whole list of exceptions are being caught and handled = in various ways. What isn't there currently is a catch block for = std::exception which should log the text of the exception. Having this = should prevent your app from crashing and may give you a better = indication of what it was not able to handle. --oren ----- Original Message -----=20 From: Michael Raykh=20 To: 'Oren Miller'=20 Cc: qui...@li...=20 Sent: Wednesday, December 15, 2004 3:52 PM Subject: RE: [Quickfix-developers] empty sequence number on sequence = reset message Generally speaking, to avoid exceptions like these "crashing" my app, = where these should be caught? -----Original Message----- From: Oren Miller [mailto:or...@qu...] Sent: Wednesday, December 15, 2004 11:41 AM To: Michael Raykh Cc: qui...@li... Subject: Re: [Quickfix-developers] empty sequence number on sequence = reset message Serves me right for not writing a proper functional test for this. = I'll reopen this issue and do it right this time :( --oren ----- Original Message -----=20 From: Michael Raykh=20 To: 'Oren Miller' ; Michael Raykh=20 Cc: 'qui...@li...'=20 Sent: Wednesday, December 15, 2004 10:34 AM Subject: RE: [Quickfix-developers] empty sequence number on = sequence reset message Reported this issue a while back, there was a fix (Session.cpp - = version 1.54-->1.55),=20 but issue is still there:=20 message.getHeader().getField( msgType );=20 if( message.getHeader().isSetField( msgSeqNum ) )=20 message.getHeader().getField( msgSeqNum );=20 if ( message.getHeader().isSetField( possDupFlag ) )=20 message.getHeader().getField( possDupFlag );=20 reject.setField( RefSeqNum( msgSeqNum ) );=20 Instead of line message.getHeader().getField( msgSeqNum ) as = originally,=20 now exception is thrown in reject.setField( RefSeqNum( msgSeqNum ) = );=20 -----Original Message-----=20 From: Oren Miller [mailto:or...@qu...]=20 Sent: Thursday, November 04, 2004 10:54 AM=20 To: Michael Raykh=20 Cc: 'qui...@li...'=20 Subject: Re: [Quickfix-developers] empty sequence number on = sequence=20 reset message=20 Well, when a sequence reset is sent in reset mode (123=3DN) the = spec says=20 that you should ignore the MsgSeqNum. I guess Appia took this to = mean=20 that they can choose to just not send it, even though it is listed = as a=20 required field (not conditionally required) in the standard = header.=20 First thing that we should do is have QF gracefully handle = rejecting a=20 message without a sequence number. This should be accomplished = easily=20 enough by replacing that line with this:=20 if( message.getHeader().isSetField( msgSeqNum ) )=20 message.getHeader().getField( msgSeqNum );=20 This will essentially cause the reject message to say it is = rejecting=20 the message with sequence number 0, which I think is a reasonable = thing=20 to say if there is no sequence number.=20 Now the question is do we want to make an exception for this = message=20 type and process the message that doesn't contain this required = field. =20 I would say since it is our job to "ignore" it, than yes, we = should=20 probably allow it. To accomplish this we will need to allow the=20 nextSequenceReset method to specify that the validate method = should=20 ignore sequence numbers. We can probably do this by rewriting the = method like so:=20 bool Session::verify( const Message& msg, bool checkTooHigh,=20 bool checkTooLow, bool checkSequenceNumber = )=20 { QF_STACK_PUSH(Session::verify)=20 SenderCompID senderCompID;=20 TargetCompID targetCompID;=20 SendingTime sendingTime;=20 MsgType msgType;=20 MsgSeqNum msgSeqNum;=20 try=20 {=20 const Header& header =3D msg.getHeader();=20 header.getField( senderCompID );=20 header.getField( targetCompID );=20 header.getField( sendingTime );=20 header.getField( msgType );=20 if( checkSequenceNumber )=20 header.getField( msgSeqNum );=20 if ( !validLogonState( msgType ) )=20 throw std::logic_error( "Logon state is not valid for = message" );=20 if ( !isGoodTime( sendingTime ) )=20 {=20 doBadTime( msg );=20 return false;=20 }=20 if ( !isCorrectCompID( senderCompID, targetCompID ) )=20 {=20 doBadCompID( msg );=20 return false;=20 }=20 if ( checkSequenceNumber && checkTooHigh && isTargetTooHigh(=20 msgSeqNum ) )=20 {=20 doTargetTooHigh( msg );=20 return false;=20 }=20 else if ( checkSequenceNumber && checkTooLow && = isTargetTooLow(=20 msgSeqNum ) )=20 {=20 doTargetTooLow( msg );=20 return false;=20 }=20 UtcTimeStamp now;=20 m_state.lastReceivedTime( now );=20 m_state.testRequest( 0 );=20 }=20 catch ( std::exception& e )=20 {=20 m_state.onEvent( e.what() );=20 disconnect();=20 return false;=20 }=20 fromCallback( msgType, msg, m_sessionID );=20 return true;=20 QF_STACK_POP=20 }=20 On Nov 4, 2004, at 8:33 AM, Michael Raykh wrote:=20 > In our test of quickFix against Appia fix engine the following = happens:=20 >=20 > - Appia sends sequence reset request msg=20 > - for some reason sequence number field is not populated on this = reset=20 > request=20 > - quickFix decides to reject this=20 > - crashes in generateReject in=20 > message.getHeader().getField( msgSeqNum );=20 > 'cause message seq number is not set...=20 >=20 >=20 >=20 > Is this proper behaviour? Any suggestions how to handle this?=20 > This email and any files transmitted with it are confidential = and=20 > intended solely for the use of the individual or entity to whom = they=20 > are addressed. If you have received this email in error please = notify=20 > the system manager. This message contains confidential = information and=20 > is intended only for the individual named. If you are not the = named=20 > addressee you should not disseminate, distribute or copy this = e-mail.=20 This email and any files transmitted with it are confidential and = intended solely for the use of the individual or entity to whom they are = addressed. If you have received this email in error please notify the = system manager. This message contains confidential information and is = intended only for the individual named. If you are not the named = addressee you should not disseminate, distribute or copy this e-mail.=20 This email and any files transmitted with it are confidential and = intended solely for the use of the individual or entity to whom they are = addressed. If you have received this email in error please notify the = system manager. This message contains confidential information and is = intended only for the individual named. If you are not the named = addressee you should not disseminate, distribute or copy this e-mail. |
From: Oren M. <or...@qu...> - 2004-12-16 18:26:14
|
Yeah, I guess we didn't ever visualize anyone would care what particular acceptor a session might come from. But I suppose it makes sense if you are categorizing different session types in this manner. So yeah this isn't supported right now, but it certainly makes sense to have. --oren ----- Original Message ----- From: "Andrew Munn" <an...@nm...> To: <qui...@li...> Sent: Wednesday, December 15, 2004 8:27 PM Subject: [Quickfix-developers] starting/stopping a session? > QuickFIX Documentation: > http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX FAQ: http://www.quickfixengine.org/wikifix/index.php?QuickFixFAQ > QuickFIX Support: http://www.quickfixengine.org/services.html > > I have a java application which does the required > System.loadLibrary("quickfix_jni"), then creates several > ThreadedSocketInitiator and ThreadedSocketAcceptor objects. In the config > files for these initiators and acceptors I specify multiple [SESSION] > blocks with unique SenderCompID and targetCompID. > > I can do this... > > quickfix.Session s = Session.lookupSession(id); > > but it would be nice if I could do this... > > quickfix.Session s = Session.lookupSession(id); > quickfix.SessionID sid = s.getSessionID(); > > and this... > > quickfix.Session[] sessions = Session.getSessions(); > > and this... > > acceptor = new ThreadedSocketAcceptor( > application, > messageStoreFactory, > settings, > logFactory, > messageFactory); > > quickfix.Session[] sessions = acceptor.getSessions(); > sessions[0].stop(); > > it would also be nice if the Session(static) and Session(specific to one > FIX Session) objects returned an iterator over all the unique sessions > they control. > > Currently, I can only get a reference to the individual FIX session > objects which have been instantiated if I create a SessionID equal to that > session's, then pass that SessionID into the lookupSession method. I > have to parse the config files to get those strings. I have > multiple acceptors and initiators and I have no way of knowing which > sessions belong to which acceptor/initiator without refering to the > config files. Is that right? > > -Andrew > > > > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers > |
From: Oren M. <or...@qu...> - 2004-12-16 18:05:50
|
There isn't a ready made way to do this right now. Unfortunately you will have to modify quickfix right now in order to do this. Let me know if you need some pointers on how to go about doing this. I'll add this as a feature request for the next release. --oren ----- Original Message ----- From: "Schultz, Tom" <TSc...@li...> To: <qui...@li...> Sent: Wednesday, December 15, 2004 7:17 PM Subject: [Quickfix-developers] Using an established connection > QuickFIX Documentation: > http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX FAQ: http://www.quickfixengine.org/wikifix/index.php?QuickFixFAQ > QuickFIX Support: http://www.quickfixengine.org/services.html > > Hi, > > This there an easy way to get quickfix to accept an already established > socket connection? We use a general program launcher (somewhat like > inetd) > to start a server that handles just the one connection. We want to embed > quickfix inside a transport object and hand the already active connection > to > it. I can modify quickfix, but prefer to not do so. Any help is much > appreciated. > > Tom > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers > |
From: Michael R. <mr...@li...> - 2004-12-16 17:35:43
|
There is this if(FAILED(CoInitialize(NULL))) throw ConfigError("Could not initialize COM"); in MSXML_DOMDocument ctor quickFix being a multithreaded app, it seems this should have been CoInitializeEx(NULL, COINIT_MULTITHREADED)... Reason I am asking - have a multithreaded COM app and this throws an exception :( Michael -----Original Message----- From: Andrew Munn [mailto:an...@nm...] Sent: Wednesday, December 15, 2004 9:27 PM To: qui...@li... Subject: [Quickfix-developers] starting/stopping a session? QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/index.html QuickFIX FAQ: http://www.quickfixengine.org/wikifix/index.php?QuickFixFAQ QuickFIX Support: http://www.quickfixengine.org/services.html I have a java application which does the required System.loadLibrary("quickfix_jni"), then creates several ThreadedSocketInitiator and ThreadedSocketAcceptor objects. In the config files for these initiators and acceptors I specify multiple [SESSION] blocks with unique SenderCompID and targetCompID. I can do this... quickfix.Session s = Session.lookupSession(id); but it would be nice if I could do this... quickfix.Session s = Session.lookupSession(id); quickfix.SessionID sid = s.getSessionID(); and this... quickfix.Session[] sessions = Session.getSessions(); and this... acceptor = new ThreadedSocketAcceptor( application, messageStoreFactory, settings, logFactory, messageFactory); quickfix.Session[] sessions = acceptor.getSessions(); sessions[0].stop(); it would also be nice if the Session(static) and Session(specific to one FIX Session) objects returned an iterator over all the unique sessions they control. Currently, I can only get a reference to the individual FIX session objects which have been instantiated if I create a SessionID equal to that session's, then pass that SessionID into the lookupSession method. I have to parse the config files to get those strings. I have multiple acceptors and initiators and I have no way of knowing which sessions belong to which acceptor/initiator without refering to the config files. Is that right? -Andrew ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://productguide.itmanagersjournal.com/ _______________________________________________ Quickfix-developers mailing list Qui...@li... https://lists.sourceforge.net/lists/listinfo/quickfix-developers This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. |
From: Andrew M. <an...@nm...> - 2004-12-16 02:27:56
|
I have a java application which does the required System.loadLibrary("quickfix_jni"), then creates several ThreadedSocketInitiator and ThreadedSocketAcceptor objects. In the config files for these initiators and acceptors I specify multiple [SESSION] blocks with unique SenderCompID and targetCompID. I can do this... quickfix.Session s = Session.lookupSession(id); but it would be nice if I could do this... quickfix.Session s = Session.lookupSession(id); quickfix.SessionID sid = s.getSessionID(); and this... quickfix.Session[] sessions = Session.getSessions(); and this... acceptor = new ThreadedSocketAcceptor( application, messageStoreFactory, settings, logFactory, messageFactory); quickfix.Session[] sessions = acceptor.getSessions(); sessions[0].stop(); it would also be nice if the Session(static) and Session(specific to one FIX Session) objects returned an iterator over all the unique sessions they control. Currently, I can only get a reference to the individual FIX session objects which have been instantiated if I create a SessionID equal to that session's, then pass that SessionID into the lookupSession method. I have to parse the config files to get those strings. I have multiple acceptors and initiators and I have no way of knowing which sessions belong to which acceptor/initiator without refering to the config files. Is that right? -Andrew |
From: Schultz, T. <TSc...@li...> - 2004-12-16 01:17:56
|
Hi, This there an easy way to get quickfix to accept an already established socket connection? We use a general program launcher (somewhat like inetd) to start a server that handles just the one connection. We want to embed quickfix inside a transport object and hand the already active connection to it. I can modify quickfix, but prefer to not do so. Any help is much appreciated. Tom |
From: Michael R. <mr...@li...> - 2004-12-15 21:52:16
|
Generally speaking, to avoid exceptions like these "crashing" my app, where these should be caught? -----Original Message----- From: Oren Miller [mailto:or...@qu...] Sent: Wednesday, December 15, 2004 11:41 AM To: Michael Raykh Cc: qui...@li... Subject: Re: [Quickfix-developers] empty sequence number on sequence reset message Serves me right for not writing a proper functional test for this. I'll reopen this issue and do it right this time :( --oren ----- Original Message ----- From: Michael <mailto:mr...@li...> Raykh To: 'Oren Miller' <mailto:or...@qu...> ; Michael <mailto:mr...@li...> Raykh Cc: 'qui...@li...' <mailto:'qui...@li...'> Sent: Wednesday, December 15, 2004 10:34 AM Subject: RE: [Quickfix-developers] empty sequence number on sequence reset message Reported this issue a while back, there was a fix (Session.cpp - version 1.54-->1.55), but issue is still there: message.getHeader().getField( msgType ); if( message.getHeader().isSetField( msgSeqNum ) ) message.getHeader().getField( msgSeqNum ); if ( message.getHeader().isSetField( possDupFlag ) ) message.getHeader().getField( possDupFlag ); reject.setField( RefSeqNum( msgSeqNum ) ); Instead of line message.getHeader().getField( msgSeqNum ) as originally, now exception is thrown in reject.setField( RefSeqNum( msgSeqNum ) ); -----Original Message----- From: Oren Miller [ mailto:or...@qu... <mailto:or...@qu...> ] Sent: Thursday, November 04, 2004 10:54 AM To: Michael Raykh Cc: 'qui...@li...' Subject: Re: [Quickfix-developers] empty sequence number on sequence reset message Well, when a sequence reset is sent in reset mode (123=N) the spec says that you should ignore the MsgSeqNum. I guess Appia took this to mean that they can choose to just not send it, even though it is listed as a required field (not conditionally required) in the standard header. First thing that we should do is have QF gracefully handle rejecting a message without a sequence number. This should be accomplished easily enough by replacing that line with this: if( message.getHeader().isSetField( msgSeqNum ) ) message.getHeader().getField( msgSeqNum ); This will essentially cause the reject message to say it is rejecting the message with sequence number 0, which I think is a reasonable thing to say if there is no sequence number. Now the question is do we want to make an exception for this message type and process the message that doesn't contain this required field. I would say since it is our job to "ignore" it, than yes, we should probably allow it. To accomplish this we will need to allow the nextSequenceReset method to specify that the validate method should ignore sequence numbers. We can probably do this by rewriting the method like so: bool Session::verify( const Message& msg, bool checkTooHigh, bool checkTooLow, bool checkSequenceNumber ) { QF_STACK_PUSH(Session::verify) SenderCompID senderCompID; TargetCompID targetCompID; SendingTime sendingTime; MsgType msgType; MsgSeqNum msgSeqNum; try { const Header& header = msg.getHeader(); header.getField( senderCompID ); header.getField( targetCompID ); header.getField( sendingTime ); header.getField( msgType ); if( checkSequenceNumber ) header.getField( msgSeqNum ); if ( !validLogonState( msgType ) ) throw std::logic_error( "Logon state is not valid for message" ); if ( !isGoodTime( sendingTime ) ) { doBadTime( msg ); return false; } if ( !isCorrectCompID( senderCompID, targetCompID ) ) { doBadCompID( msg ); return false; } if ( checkSequenceNumber && checkTooHigh && isTargetTooHigh( msgSeqNum ) ) { doTargetTooHigh( msg ); return false; } else if ( checkSequenceNumber && checkTooLow && isTargetTooLow( msgSeqNum ) ) { doTargetTooLow( msg ); return false; } UtcTimeStamp now; m_state.lastReceivedTime( now ); m_state.testRequest( 0 ); } catch ( std::exception& e ) { m_state.onEvent( e.what() ); disconnect(); return false; } fromCallback( msgType, msg, m_sessionID ); return true; QF_STACK_POP } On Nov 4, 2004, at 8:33 AM, Michael Raykh wrote: > In our test of quickFix against Appia fix engine the following happens: > > - Appia sends sequence reset request msg > - for some reason sequence number field is not populated on this reset > request > - quickFix decides to reject this > - crashes in generateReject in > message.getHeader().getField( msgSeqNum ); > 'cause message seq number is not set... > > > > Is this proper behaviour? Any suggestions how to handle this? > This email and any files transmitted with it are confidential and > intended solely for the use of the individual or entity to whom they > are addressed. If you have received this email in error please notify > the system manager. This message contains confidential information and > is intended only for the individual named. If you are not the named > addressee you should not disseminate, distribute or copy this e-mail. This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. |
From: Oren M. <or...@qu...> - 2004-12-15 16:41:12
|
RE: [Quickfix-developers] empty sequence number on sequence reset = messageServes me right for not writing a proper functional test for = this. I'll reopen this issue and do it right this time :( --oren ----- Original Message -----=20 From: Michael Raykh=20 To: 'Oren Miller' ; Michael Raykh=20 Cc: 'qui...@li...'=20 Sent: Wednesday, December 15, 2004 10:34 AM Subject: RE: [Quickfix-developers] empty sequence number on sequence = reset message Reported this issue a while back, there was a fix (Session.cpp - = version 1.54-->1.55),=20 but issue is still there:=20 message.getHeader().getField( msgType );=20 if( message.getHeader().isSetField( msgSeqNum ) )=20 message.getHeader().getField( msgSeqNum );=20 if ( message.getHeader().isSetField( possDupFlag ) )=20 message.getHeader().getField( possDupFlag );=20 reject.setField( RefSeqNum( msgSeqNum ) );=20 Instead of line message.getHeader().getField( msgSeqNum ) as = originally,=20 now exception is thrown in reject.setField( RefSeqNum( msgSeqNum ) );=20 -----Original Message-----=20 From: Oren Miller [mailto:or...@qu...]=20 Sent: Thursday, November 04, 2004 10:54 AM=20 To: Michael Raykh=20 Cc: 'qui...@li...'=20 Subject: Re: [Quickfix-developers] empty sequence number on sequence=20 reset message=20 Well, when a sequence reset is sent in reset mode (123=3DN) the spec = says=20 that you should ignore the MsgSeqNum. I guess Appia took this to mean = that they can choose to just not send it, even though it is listed as = a=20 required field (not conditionally required) in the standard header.=20 First thing that we should do is have QF gracefully handle rejecting a = message without a sequence number. This should be accomplished easily = enough by replacing that line with this:=20 if( message.getHeader().isSetField( msgSeqNum ) )=20 message.getHeader().getField( msgSeqNum );=20 This will essentially cause the reject message to say it is rejecting=20 the message with sequence number 0, which I think is a reasonable = thing=20 to say if there is no sequence number.=20 Now the question is do we want to make an exception for this message=20 type and process the message that doesn't contain this required field. = =20 I would say since it is our job to "ignore" it, than yes, we should=20 probably allow it. To accomplish this we will need to allow the=20 nextSequenceReset method to specify that the validate method should=20 ignore sequence numbers. We can probably do this by rewriting the=20 method like so:=20 bool Session::verify( const Message& msg, bool checkTooHigh,=20 bool checkTooLow, bool checkSequenceNumber )=20 { QF_STACK_PUSH(Session::verify)=20 SenderCompID senderCompID;=20 TargetCompID targetCompID;=20 SendingTime sendingTime;=20 MsgType msgType;=20 MsgSeqNum msgSeqNum;=20 try=20 {=20 const Header& header =3D msg.getHeader();=20 header.getField( senderCompID );=20 header.getField( targetCompID );=20 header.getField( sendingTime );=20 header.getField( msgType );=20 if( checkSequenceNumber )=20 header.getField( msgSeqNum );=20 if ( !validLogonState( msgType ) )=20 throw std::logic_error( "Logon state is not valid for message" = );=20 if ( !isGoodTime( sendingTime ) )=20 {=20 doBadTime( msg );=20 return false;=20 }=20 if ( !isCorrectCompID( senderCompID, targetCompID ) )=20 {=20 doBadCompID( msg );=20 return false;=20 }=20 if ( checkSequenceNumber && checkTooHigh && isTargetTooHigh(=20 msgSeqNum ) )=20 {=20 doTargetTooHigh( msg );=20 return false;=20 }=20 else if ( checkSequenceNumber && checkTooLow && isTargetTooLow(=20 msgSeqNum ) )=20 {=20 doTargetTooLow( msg );=20 return false;=20 }=20 UtcTimeStamp now;=20 m_state.lastReceivedTime( now );=20 m_state.testRequest( 0 );=20 }=20 catch ( std::exception& e )=20 {=20 m_state.onEvent( e.what() );=20 disconnect();=20 return false;=20 }=20 fromCallback( msgType, msg, m_sessionID );=20 return true;=20 QF_STACK_POP=20 }=20 On Nov 4, 2004, at 8:33 AM, Michael Raykh wrote:=20 > In our test of quickFix against Appia fix engine the following = happens:=20 >=20 > - Appia sends sequence reset request msg=20 > - for some reason sequence number field is not populated on this = reset=20 > request=20 > - quickFix decides to reject this=20 > - crashes in generateReject in=20 > message.getHeader().getField( msgSeqNum );=20 > 'cause message seq number is not set...=20 >=20 >=20 >=20 > Is this proper behaviour? Any suggestions how to handle this?=20 > This email and any files transmitted with it are confidential and=20 > intended solely for the use of the individual or entity to whom they = > are addressed. If you have received this email in error please = notify=20 > the system manager. This message contains confidential information = and=20 > is intended only for the individual named. If you are not the named=20 > addressee you should not disseminate, distribute or copy this = e-mail.=20 This email and any files transmitted with it are confidential and = intended solely for the use of the individual or entity to whom they are = addressed. If you have received this email in error please notify the = system manager. This message contains confidential information and is = intended only for the individual named. If you are not the named = addressee you should not disseminate, distribute or copy this e-mail. |
From: Michael R. <mr...@li...> - 2004-12-15 16:34:58
|
Reported this issue a while back, there was a fix (Session.cpp - version 1.54-->1.55), but issue is still there: message.getHeader().getField( msgType ); if( message.getHeader().isSetField( msgSeqNum ) ) message.getHeader().getField( msgSeqNum ); if ( message.getHeader().isSetField( possDupFlag ) ) message.getHeader().getField( possDupFlag ); reject.setField( RefSeqNum( msgSeqNum ) ); Instead of line message.getHeader().getField( msgSeqNum ) as originally, now exception is thrown in reject.setField( RefSeqNum( msgSeqNum ) ); -----Original Message----- From: Oren Miller [mailto:or...@qu...] Sent: Thursday, November 04, 2004 10:54 AM To: Michael Raykh Cc: 'qui...@li...' Subject: Re: [Quickfix-developers] empty sequence number on sequence reset message Well, when a sequence reset is sent in reset mode (123=3DN) the spec says= =20 that you should ignore the MsgSeqNum. I guess Appia took this to mean=20 that they can choose to just not send it, even though it is listed as a=20 required field (not conditionally required) in the standard header. First thing that we should do is have QF gracefully handle rejecting a=20 message without a sequence number. This should be accomplished easily=20 enough by replacing that line with this: if( message.getHeader().isSetField( msgSeqNum ) ) message.getHeader().getField( msgSeqNum ); This will essentially cause the reject message to say it is rejecting=20 the message with sequence number 0, which I think is a reasonable thing=20 to say if there is no sequence number. Now the question is do we want to make an exception for this message=20 type and process the message that doesn't contain this required field. =20 I would say since it is our job to "ignore" it, than yes, we should=20 probably allow it. To accomplish this we will need to allow the=20 nextSequenceReset method to specify that the validate method should=20 ignore sequence numbers. We can probably do this by rewriting the=20 method like so: bool Session::verify( const Message& msg, bool checkTooHigh, bool checkTooLow, bool checkSequenceNumber ) { QF_STACK_PUSH(Session::verify) SenderCompID senderCompID; TargetCompID targetCompID; SendingTime sendingTime; MsgType msgType; MsgSeqNum msgSeqNum; try { const Header& header =3D msg.getHeader(); header.getField( senderCompID ); header.getField( targetCompID ); header.getField( sendingTime ); header.getField( msgType ); if( checkSequenceNumber ) header.getField( msgSeqNum ); if ( !validLogonState( msgType ) ) throw std::logic_error( "Logon state is not valid for message" ); if ( !isGoodTime( sendingTime ) ) { doBadTime( msg ); return false; } if ( !isCorrectCompID( senderCompID, targetCompID ) ) { doBadCompID( msg ); return false; } if ( checkSequenceNumber && checkTooHigh && isTargetTooHigh(=20 msgSeqNum ) ) { doTargetTooHigh( msg ); return false; } else if ( checkSequenceNumber && checkTooLow && isTargetTooLow(=20 msgSeqNum ) ) { doTargetTooLow( msg ); return false; } UtcTimeStamp now; m_state.lastReceivedTime( now ); m_state.testRequest( 0 ); } catch ( std::exception& e ) { m_state.onEvent( e.what() ); disconnect(); return false; } fromCallback( msgType, msg, m_sessionID ); return true; QF_STACK_POP } On Nov 4, 2004, at 8:33 AM, Michael Raykh wrote: > In our test of quickFix against Appia fix engine the following happens: > > - Appia sends sequence reset request msg > - for some reason sequence number field is not populated on this reset=20 > request > - quickFix decides to reject this > - crashes in generateReject in > =A0=A0=A0=A0=A0=A0=A0 =A0 message.getHeader().getField( msgSeqNum ); > =A0=A0 'cause message seq number is not set... > > > > Is this proper behaviour? Any suggestions how to handle this? > This email and any files transmitted with it are confidential and=20 > intended solely for the use of the individual or entity to whom they=20 > are addressed. If you have received this email in error please notify=20 > the system manager. This message contains confidential information and=20 > is intended only for the individual named. If you are not the named=20 > addressee you should not disseminate, distribute or copy this e-mail.=20 This email and any files transmitted with it are confidential and intende= d solely for the use of the individual or entity to whom they are address= ed. If you have received this email in error please notify the system man= ager. This message contains confidential information and is intended only= for the individual named. If you are not the named addressee you should = not disseminate, distribute or copy this e-mail. |
From: <que...@bn...> - 2004-12-15 10:36:56
|
Hello all, To improve performances, I had to add the TCP_NODELAY socket option. What do yo think of addng a parameter tcp_nodelay in the config file ? Regards, Quentin. This message and any attachments (the "message") is intended solely for the addressees and is confidential. If you receive this message in error, please delete it and immediately notify the sender. Any use not in accord with its purpose, any dissemination or disclosure, either whole or partial, is prohibited except formal approval. The internet can not guarantee the integrity of this message. BNP PARIBAS (and its subsidiaries) shall (will) not therefore be liable for the message if modified. --------------------------------------------- Ce message et toutes les pieces jointes (ci-apres le "message") sont etablis a l'intention exclusive de ses destinataires et sont confidentiels. Si vous recevez ce message par erreur, merci de le detruire et d'en avertir immediatement l'expediteur. Toute utilisation de ce message non conforme a sa destination, toute diffusion ou toute publication, totale ou partielle, est interdite, sauf autorisation expresse. L'internet ne permettant pas d'assurer l'integrite de ce message, BNP PARIBAS (et ses filiales) decline(nt) toute responsabilite au titre de ce message, dans l'hypothese ou il aurait ete modifie. |
From: Oren M. <or...@qu...> - 2004-12-14 17:41:43
|
You'll notice in the News box on the QuickFIX site, we have a little "Now Hiring" link. If you know a smart developer who is looking to break into this industry, send them our way. This is a great opportunity for them. The job listing is available here: http://www.quickfixengine.org/careers.html --oren |