transactd 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/BUILD_UNIX-JA +46 -67
- data/BUILD_WIN-JA +106 -63
- data/CMakeLists.txt +40 -15
- data/README +219 -75
- data/README-JA +207 -76
- data/README_ORMSRCGEN +118 -0
- data/README_ORMSRCGEN-JA +115 -0
- data/bin/common/tdclc_32_2_0.dll +0 -0
- data/bin/common/tdclc_64_2_0.dll +0 -0
- data/build/common/check_for_link_iconv.cmake +18 -14
- data/build/common/create_symlink.cmake.in +25 -0
- data/build/common/get_boost_libs.cmake +23 -23
- data/build/common/options.cmake +0 -66
- data/build/common/smart_install.cmake +3 -3
- data/build/common/transactd.rc.in +15 -5
- data/build/common/transactd_cl_common.cmake +37 -18
- data/build/common/transactd_cl_output.cmake +55 -13
- data/build/common/transactd_common.cmake +108 -31
- data/build/swig/php/generate.cmake.in +15 -17
- data/build/swig/php/generate.cmd.in +15 -9
- data/build/swig/php/php.swg +124 -82
- data/build/swig/php/transactd.no_yield.php +4494 -0
- data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
- data/build/swig/php/transactd.no_yield.php.patch +685 -0
- data/build/swig/php/transactd.yield.php +4461 -0
- data/build/swig/php/transactd.yield.php.git.patch +652 -0
- data/build/swig/php/transactd.yield.php.patch +652 -0
- data/build/swig/referencecounter.h +79 -0
- data/build/swig/ruby/ruby.swg +226 -76
- data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
- data/build/swig/ruby/without_gvl.swg +87 -0
- data/build/swig/tdcl.i +659 -170
- data/build/swig/validatablepointer.h +91 -0
- data/build/tdclc/CMakeLists.txt +49 -34
- data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
- data/build/tdclc/tdclc.rc +0 -0
- data/build/tdclcpp/CMakeLists.txt +84 -20
- data/build/tdclcpp/tdclcpp.rc +0 -0
- data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
- data/build/tdclrb/CMakeLists.txt +84 -66
- data/build/tdclrb/bldgem/extconf.rb +28 -3
- data/build/tdclrb/gem/helper.rb +11 -1
- data/build/tdclrb/gem_output.cmake +20 -16
- data/index_ja.html +15 -0
- data/source/bzs/db/IBlobBuffer.h +15 -17
- data/source/bzs/db/blobBuffer.h +186 -140
- data/source/bzs/db/blobStructs.h +37 -37
- data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
- data/source/bzs/db/engine/mysql/bookmark.h +150 -147
- data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
- data/source/bzs/db/engine/mysql/database.h +608 -370
- data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
- data/source/bzs/db/engine/mysql/dbManager.h +115 -104
- data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
- data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
- data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
- data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
- data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
- data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
- data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
- data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
- data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
- data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
- data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
- data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
- data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
- data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
- data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
- data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
- data/source/bzs/db/protocol/tdap/client/client.h +361 -320
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
- data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
- data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
- data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
- data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
- data/source/bzs/db/protocol/tdap/client/database.h +141 -118
- data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
- data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
- data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
- data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
- data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
- data/source/bzs/db/protocol/tdap/client/export.h +35 -0
- data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
- data/source/bzs/db/protocol/tdap/client/field.h +393 -0
- data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
- data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
- data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
- data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
- data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
- data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
- data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
- data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
- data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
- data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
- data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
- data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
- data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
- data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
- data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
- data/source/bzs/db/protocol/tdap/client/request.h +227 -170
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
- data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
- data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
- data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
- data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
- data/source/bzs/db/protocol/tdap/client/table.h +413 -87
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
- data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
- data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
- data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
- data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
- data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
- data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
- data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
- data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
- data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
- data/source/bzs/db/transactd/appBuilderImple.h +21 -20
- data/source/bzs/db/transactd/appModule.cpp +350 -98
- data/source/bzs/db/transactd/appModule.h +31 -37
- data/source/bzs/db/transactd/connManager.cpp +138 -135
- data/source/bzs/db/transactd/connManager.h +28 -21
- data/source/bzs/db/transactd/connectionRecord.h +39 -39
- data/source/bzs/db/transactd/transactd.cpp +217 -203
- data/source/bzs/env/boost_bcb_link.h +131 -0
- data/source/bzs/env/compiler.h +136 -79
- data/source/bzs/env/crosscompile.cpp +57 -57
- data/source/bzs/env/crosscompile.h +130 -115
- data/source/bzs/env/fileopen.h +7 -8
- data/source/bzs/env/mbcswchrLinux.cpp +4 -9
- data/source/bzs/env/mbcswchrLinux.h +37 -34
- data/source/bzs/env/tcharMinGW.h +59 -0
- data/source/bzs/env/tstring.h +90 -95
- data/source/bzs/example/changeSchema.cpp +22 -23
- data/source/bzs/example/changeSchema_c.cpp +22 -24
- data/source/bzs/example/connection_pool_c.cpp +49 -104
- data/source/bzs/example/createDatabase.cpp +40 -47
- data/source/bzs/example/createDatabase_c.cpp +38 -43
- data/source/bzs/example/deleteRecords.cpp +10 -15
- data/source/bzs/example/deleteRecords_c.cpp +10 -14
- data/source/bzs/example/dropDatabase.cpp +3 -9
- data/source/bzs/example/dropDatabase_c.cpp +5 -6
- data/source/bzs/example/insertRecords.cpp +37 -29
- data/source/bzs/example/insertRecords_c.cpp +19 -25
- data/source/bzs/example/ormap_c.cpp +621 -0
- data/source/bzs/example/queryData.cpp +371 -0
- data/source/bzs/example/queryData.h +16 -0
- data/source/bzs/example/query_c.cpp +109 -0
- data/source/bzs/example/readRecords.cpp +27 -27
- data/source/bzs/example/readRecords_c.cpp +25 -23
- data/source/bzs/example/updateRecords.cpp +16 -21
- data/source/bzs/example/updateRecords_c.cpp +8 -12
- data/source/bzs/example/update_with_transaction.cpp +21 -24
- data/source/bzs/example/update_with_transaction_c.cpp +12 -15
- data/source/bzs/example/useORMRecord.cpp +177 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
- data/source/bzs/netsvc/client/tcpClient.h +541 -489
- data/source/bzs/netsvc/server/IAppModule.h +119 -32
- data/source/bzs/netsvc/server/iserver.h +21 -23
- data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
- data/source/bzs/netsvc/server/serverCpt.h +41 -43
- data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
- data/source/bzs/netsvc/server/serverPipe.h +44 -45
- data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
- data/source/bzs/netsvc/server/serverTpool.h +38 -43
- data/source/bzs/rtl/benchmark.cpp +91 -31
- data/source/bzs/rtl/benchmark.h +76 -22
- data/source/bzs/rtl/datetime.cpp +231 -233
- data/source/bzs/rtl/datetime.h +16 -16
- data/source/bzs/rtl/debuglog.cpp +48 -51
- data/source/bzs/rtl/debuglog.h +55 -44
- data/source/bzs/rtl/exception.h +55 -48
- data/source/bzs/rtl/stl_uty.cpp +27 -28
- data/source/bzs/rtl/stl_uty.h +28 -29
- data/source/bzs/rtl/stringBuffers.cpp +8 -6
- data/source/bzs/rtl/stringBuffers.h +16 -9
- data/source/bzs/rtl/strtrim.cpp +90 -91
- data/source/bzs/rtl/strtrim.h +14 -16
- data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
- data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
- data/source/bzs/test/tdclphp/bench.php +357 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
- data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
- data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
- data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
- data/source/bzs/test/tdclrb/prepare.rb +15 -12
- data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
- data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
- data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
- data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
- data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
- data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
- data/source/bzs/test/transactdBench/workerBase.h +88 -0
- data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
- data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
- data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
- data/source/global/ormsrcgen/confParam.h +80 -0
- data/source/global/ormsrcgen/fieldName.cpp +77 -0
- data/source/global/ormsrcgen/fieldName.h +43 -0
- data/source/global/ormsrcgen/main.cpp +196 -0
- data/source/global/ormsrcgen/srcgen.cpp +763 -0
- data/source/global/ormsrcgen/srcgen.h +72 -0
- data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
- data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
- data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
- data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
- data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
- data/source/global/ormsrcgen/template/template.cnf +38 -0
- data/source/global/querystmts/querystmts.cpp +237 -0
- data/source/global/tdclatl/ConnectParams.cpp +77 -0
- data/source/global/tdclatl/ConnectParams.h +70 -0
- data/source/global/tdclatl/Database.cpp +132 -128
- data/source/global/tdclatl/Database.h +60 -49
- data/source/global/tdclatl/DbDef.cpp +68 -64
- data/source/global/tdclatl/DbDef.h +36 -36
- data/source/global/tdclatl/Field.cpp +12 -17
- data/source/global/tdclatl/Field.h +15 -12
- data/source/global/tdclatl/FieldDef.cpp +75 -36
- data/source/global/tdclatl/FieldDef.h +38 -19
- data/source/global/tdclatl/FieldDefs.cpp +74 -0
- data/source/global/tdclatl/FieldDefs.h +56 -0
- data/source/global/tdclatl/FieldNames.cpp +99 -0
- data/source/global/tdclatl/FieldNames.h +66 -0
- data/source/global/tdclatl/Flags.cpp +75 -37
- data/source/global/tdclatl/Flags.h +13 -12
- data/source/global/tdclatl/GroupQuery.cpp +119 -0
- data/source/global/tdclatl/GroupQuery.h +65 -0
- data/source/global/tdclatl/KeyDef.cpp +15 -14
- data/source/global/tdclatl/KeyDef.h +20 -17
- data/source/global/tdclatl/KeySegment.cpp +13 -12
- data/source/global/tdclatl/PooledDbManager.cpp +223 -0
- data/source/global/tdclatl/PooledDbManager.h +76 -0
- data/source/global/tdclatl/QueryBase.cpp +206 -127
- data/source/global/tdclatl/QueryBase.h +55 -59
- data/source/global/tdclatl/Record.cpp +214 -0
- data/source/global/tdclatl/Record.h +96 -0
- data/source/global/tdclatl/Recordset.cpp +278 -0
- data/source/global/tdclatl/Recordset.h +83 -0
- data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
- data/source/global/tdclatl/RecordsetQuery.h +126 -0
- data/source/global/tdclatl/Table.cpp +57 -60
- data/source/global/tdclatl/Table.h +32 -29
- data/source/global/tdclatl/TableDef.cpp +63 -62
- data/source/global/tdclatl/TableDef.h +20 -22
- data/source/global/tdclatl/TdVersion.cpp +3 -3
- data/source/global/tdclatl/TdVersion.h +15 -11
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
- data/source/global/tdclatl/activeTable.cpp +355 -0
- data/source/global/tdclatl/activeTable.h +79 -0
- data/source/global/tdclatl/dllmain.cpp +4 -3
- data/source/global/tdclatl/dllmain.h +7 -6
- data/source/global/tdclatl/keySegment.h +22 -18
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/stdafx.h +6 -4
- data/source/global/tdclatl/targetver.h +0 -1
- data/source/global/tdclatl/tdclatl.cpp +10 -5
- data/source/global/tdclatl/tdclatl.idl +530 -14
- data/source/linux/charsetConvert.h +78 -79
- data/source/linux/linuxTypes.h +9 -12
- data/source/linux/tchar.h +168 -166
- data/transactd.gemspec +24 -16
- metadata +98 -12
- data/bin/common/tdclc_32_1_2.dll +0 -0
- data/bin/common/tdclc_64_1_2.dll +0 -0
- data/build/tdclc/tdclc_32.cbproj +0 -173
- data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
- data/build/tdclrb/GEM_VERSION +0 -3
- data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
- data/source/bzs/example/useORM.cpp +0 -585
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/* =================================================================
|
|
2
|
+
Copyright (C) 2012 2013 BizStation Corp All rights reserved.
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
This program is free software; you can redistribute it and/or
|
|
5
|
+
modify it under the terms of the GNU General Public License
|
|
6
|
+
as published by the Free Software Foundation; either version 2
|
|
7
|
+
of the License, or (at your option) any later version.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
This program is distributed in the hope that it will be useful,
|
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
GNU General Public License for more details.
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
You should have received a copy of the GNU General Public License
|
|
15
|
+
along with this program; if not, write to the Free Software
|
|
16
|
+
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
17
|
+
02111-1307, USA.
|
|
18
|
+
================================================================= */
|
|
19
19
|
|
|
20
20
|
#include <bzs/db/protocol/tdap/client/client.h>
|
|
21
21
|
#include <bzs/db/protocol/tdap/tdapcapi.h>
|
|
@@ -27,434 +27,453 @@
|
|
|
27
27
|
#include <direct.h>
|
|
28
28
|
#endif
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
30
|
using namespace bzs::db::protocol::tdap::client;
|
|
33
31
|
using namespace bzs::db::protocol::tdap;
|
|
34
32
|
using namespace bzs::netsvc::client;
|
|
35
33
|
|
|
36
|
-
#define MYSQL_VERSION_ID
|
|
34
|
+
#define MYSQL_VERSION_ID 50609
|
|
37
35
|
#define PIPENAME "Transactd"
|
|
38
36
|
|
|
39
37
|
#ifdef __BCPLUSPLUS__
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
# else
|
|
44
|
-
# pragma comment(lib, "libboost_system-bcb-mt-s-1_39.lib")
|
|
45
|
-
# pragma comment(lib, "libboost_thread-bcb-mt-s-1_39.lib")
|
|
46
|
-
# endif
|
|
38
|
+
#define BZS_LINK_BOOST_SYSTEM
|
|
39
|
+
#define BZS_LINK_BOOST_THREAD
|
|
40
|
+
#include <bzs/env/boost_bcb_link.h>
|
|
47
41
|
#endif
|
|
48
42
|
|
|
49
|
-
|
|
50
43
|
void writeErrorLog(int err, const char* msg);
|
|
51
|
-
|
|
44
|
+
dllUnloadCallback dllUnloadCallbackFunc = NULL;
|
|
52
45
|
|
|
53
46
|
#ifdef USETLS
|
|
54
47
|
tls_key g_tlsiID1;
|
|
48
|
+
tls_key g_tlsiID_SC1;
|
|
55
49
|
#else
|
|
56
50
|
__THREAD clientID __THREAD_BCB g_cid;
|
|
57
51
|
__THREAD bool __THREAD_BCB g_initCid = false;
|
|
58
52
|
#endif
|
|
59
53
|
|
|
54
|
+
#ifdef _WIN32
|
|
60
55
|
|
|
56
|
+
BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved)
|
|
57
|
+
{
|
|
58
|
+
if (reason == DLL_PROCESS_ATTACH)
|
|
59
|
+
{
|
|
60
|
+
#ifdef USETLS
|
|
61
|
+
if ((g_tlsiID = TlsAlloc()) == TLS_OUT_OF_INDEXES)
|
|
62
|
+
return FALSE;
|
|
63
|
+
if ((g_tlsiID1 = TlsAlloc()) == TLS_OUT_OF_INDEXES)
|
|
64
|
+
return FALSE;
|
|
65
|
+
if ((g_tlsiID_SC1 = TlsAlloc()) == TLS_OUT_OF_INDEXES)
|
|
66
|
+
return FALSE;
|
|
67
|
+
#endif
|
|
61
68
|
|
|
69
|
+
m_cons = new connections(PIPENAME);
|
|
70
|
+
}
|
|
71
|
+
else if (reason == DLL_THREAD_DETACH)
|
|
72
|
+
{
|
|
73
|
+
#ifdef USETLS
|
|
74
|
+
delete (bzs::db::protocol::tdap::client::client*)tls_getspecific(
|
|
75
|
+
g_tlsiID);
|
|
76
|
+
tls_setspecific(g_tlsiID1, 0);
|
|
77
|
+
#else
|
|
78
|
+
delete g_client;
|
|
79
|
+
g_client = NULL;
|
|
80
|
+
#endif
|
|
81
|
+
}
|
|
82
|
+
else if (reason == DLL_PROCESS_DETACH)
|
|
83
|
+
{
|
|
84
|
+
if (dllUnloadCallbackFunc)
|
|
85
|
+
dllUnloadCallbackFunc();
|
|
62
86
|
|
|
63
|
-
|
|
87
|
+
delete m_cons;
|
|
88
|
+
m_cons = NULL;
|
|
64
89
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if ((g_tlsiID1 = TlsAlloc()) == TLS_OUT_OF_INDEXES)
|
|
73
|
-
return FALSE;
|
|
74
|
-
#endif
|
|
75
|
-
|
|
76
|
-
m_cons = new connections(PIPENAME);
|
|
77
|
-
}else if(reason == DLL_THREAD_DETACH)
|
|
78
|
-
{
|
|
79
|
-
#ifdef USETLS
|
|
80
|
-
delete (bzs::db::protocol::tdap::client::client*)tls_getspecific(g_tlsiID);
|
|
81
|
-
#else
|
|
82
|
-
delete g_client;
|
|
83
|
-
#endif
|
|
84
|
-
}
|
|
85
|
-
else if (reason == DLL_PROCESS_DETACH)
|
|
86
|
-
{
|
|
87
|
-
delete m_cons;
|
|
88
|
-
m_cons=NULL;
|
|
89
|
-
|
|
90
|
-
#ifdef USETLS
|
|
91
|
-
TlsFree(g_tlsiID);
|
|
92
|
-
TlsFree(g_tlsiID1);
|
|
93
|
-
|
|
94
|
-
#endif
|
|
95
|
-
}
|
|
96
|
-
return TRUE;
|
|
90
|
+
#ifdef USETLS
|
|
91
|
+
TlsFree(g_tlsiID);
|
|
92
|
+
TlsFree(g_tlsiID1);
|
|
93
|
+
TlsFree(g_tlsiID_SC1);
|
|
94
|
+
#endif
|
|
95
|
+
}
|
|
96
|
+
return TRUE;
|
|
97
97
|
}
|
|
98
|
-
#else
|
|
98
|
+
#else // NOT _WIN32
|
|
99
|
+
|
|
100
|
+
void __attribute__((constructor)) onLoadLibrary(void);
|
|
101
|
+
void __attribute__((destructor)) onUnloadLibrary(void);
|
|
99
102
|
|
|
100
|
-
|
|
101
|
-
|
|
103
|
+
#if (__BCPLUSPLUS__ && defined(__APPLE__))
|
|
104
|
+
#pragma exit onUnloadLibrary
|
|
105
|
+
#pragma startup onLoadLibrary
|
|
106
|
+
#endif
|
|
102
107
|
|
|
103
108
|
void onLoadLibrary(void)
|
|
104
109
|
{
|
|
105
|
-
m_cons = new
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
110
|
+
m_cons = new connections(PIPENAME);
|
|
111
|
+
#ifdef USETLS
|
|
112
|
+
pthread_key_create(&g_tlsiID, NULL);
|
|
113
|
+
pthread_key_create(&g_tlsiID1, NULL);
|
|
114
|
+
pthread_key_create(&g_tlsiID_SC1, NULL);
|
|
115
|
+
#endif
|
|
111
116
|
}
|
|
117
|
+
|
|
112
118
|
void onUnloadLibrary(void)
|
|
113
119
|
{
|
|
120
|
+
if (dllUnloadCallbackFunc)
|
|
121
|
+
dllUnloadCallbackFunc();
|
|
114
122
|
delete m_cons;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
123
|
+
m_cons = NULL;
|
|
124
|
+
#ifdef USETLS
|
|
125
|
+
pthread_key_delete(g_tlsiID);
|
|
126
|
+
pthread_key_delete(g_tlsiID1);
|
|
127
|
+
pthread_key_delete(g_tlsiID_SC1);
|
|
121
128
|
#endif
|
|
129
|
+
}
|
|
130
|
+
#endif // NOT _WIN32
|
|
122
131
|
|
|
123
|
-
extern "C" short_td
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
char_td keyNum, clientID* cid)
|
|
132
|
+
extern "C" PACKAGE_OSX short_td __STDCALL
|
|
133
|
+
BTRCALLID(ushort_td op, posblk* pbk, void_td* data, uint_td* datalen,
|
|
134
|
+
void_td* keybuf, keylen_td keylen, char_td keyNum, clientID* cid)
|
|
127
135
|
{
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
136
|
+
bzs::db::protocol::tdap::client::client* client_t = getClientThread();
|
|
137
|
+
|
|
138
|
+
short_td ret;
|
|
139
|
+
try
|
|
140
|
+
{
|
|
141
|
+
|
|
142
|
+
if ((TD_GET_BLOB_BUF != op) && (TD_ADD_SENDBLOB != op))
|
|
143
|
+
client_t->setParam(op, pbk, data, datalen, keybuf, keylen, keyNum,
|
|
144
|
+
cid);
|
|
145
|
+
|
|
146
|
+
if (client_t->stop_if())
|
|
147
|
+
{
|
|
148
|
+
client_t->cleanup();
|
|
149
|
+
return 0;
|
|
150
|
+
}
|
|
151
|
+
if (cid == NULL)
|
|
152
|
+
return 1;
|
|
153
|
+
|
|
154
|
+
switch (op)
|
|
155
|
+
{
|
|
156
|
+
case TD_GET_BLOB_BUF:
|
|
157
|
+
return client_t->getBlobBuffer((const bzs::db::blobHeader**)data);
|
|
158
|
+
case TD_ADD_SENDBLOB:
|
|
159
|
+
return client_t->addBlob((const bzs::db::blob*)data,
|
|
160
|
+
(keyNum == TD_ASBLOB_ENDROW));
|
|
161
|
+
case TD_OPENTABLE:
|
|
162
|
+
case TD_CREATETABLE:
|
|
163
|
+
client_t->connect();
|
|
164
|
+
if (client_t->result() == 0)
|
|
165
|
+
{
|
|
166
|
+
if (op == TD_CREATETABLE)
|
|
167
|
+
{
|
|
168
|
+
if (client_t->readServerCharsetIndex())
|
|
169
|
+
client_t->create();
|
|
170
|
+
else
|
|
171
|
+
{
|
|
172
|
+
client_t->cleanup();
|
|
173
|
+
return 1;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else if (op == TD_OPENTABLE)
|
|
177
|
+
client_t->req().paramMask = P_MASK_ALL;
|
|
178
|
+
if (!client_t->buildDualChasetKeybuf())
|
|
179
|
+
{
|
|
180
|
+
client_t->cleanup();
|
|
181
|
+
return SERVER_CLIENT_NOT_COMPATIBLE;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
break;
|
|
185
|
+
case TD_CONNECT:
|
|
186
|
+
{
|
|
187
|
+
client_t->cmdConnect();
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
case TD_STASTISTICS:
|
|
191
|
+
client_t->req().paramMask =
|
|
192
|
+
P_MASK_DATALEN | P_MASK_KEYBUF | P_MASK_KEYNUM;
|
|
193
|
+
break;
|
|
194
|
+
case TD_RESET_CLIENT:
|
|
195
|
+
client_t->req().paramMask = P_MASK_KEYONLY;
|
|
196
|
+
break;
|
|
197
|
+
case TD_DROP_INDEX:
|
|
198
|
+
client_t->req().paramMask = P_MASK_POSBLK | P_MASK_KEYNUM;
|
|
199
|
+
break;
|
|
200
|
+
case TD_REC_INSERT:
|
|
201
|
+
case TD_INSERT_BULK:
|
|
202
|
+
case TD_REC_UPDATE:
|
|
203
|
+
client_t->req().paramMask = P_MASK_NOKEYBUF | P_MASK_BLOBBODY;
|
|
204
|
+
break;
|
|
205
|
+
case TD_REC_UPDATEATKEY:
|
|
206
|
+
client_t->req().paramMask = P_MASK_ALL | P_MASK_BLOBBODY;
|
|
207
|
+
break;
|
|
208
|
+
case TD_MOVE_BOOKMARK:
|
|
209
|
+
case TD_MOVE_PER:
|
|
210
|
+
case TD_BUILD_INDEX:
|
|
211
|
+
client_t->req().paramMask = P_MASK_NOKEYBUF;
|
|
212
|
+
break;
|
|
213
|
+
case TD_UNLOCK:
|
|
214
|
+
case TD_UPDATE_PART:
|
|
215
|
+
client_t->cleanup();
|
|
216
|
+
return 0;
|
|
217
|
+
case TD_REC_DELETE:
|
|
218
|
+
case TD_CLOSETABLE:
|
|
219
|
+
case TD_CLEAR_OWNERNAME:
|
|
220
|
+
case TD_AUTOMEKE_SCHEMA:
|
|
221
|
+
client_t->req().paramMask = P_MASK_POSBLK;
|
|
222
|
+
break;
|
|
223
|
+
case TD_END_TRANSACTION:
|
|
224
|
+
case TD_BEGIN_TRANSACTION:
|
|
225
|
+
case TD_ABORT_TRANSACTION:
|
|
226
|
+
case TD_BEGIN_SHAPSHOT:
|
|
227
|
+
case TD_END_SNAPSHOT:
|
|
228
|
+
client_t->req().paramMask = 0;
|
|
229
|
+
break;
|
|
230
|
+
case TD_KEY_FIRST:
|
|
231
|
+
case TD_KEY_LAST:
|
|
232
|
+
case TD_KEY_FIRST_KO:
|
|
233
|
+
case TD_KEY_LAST_KO:
|
|
234
|
+
client_t->req().paramMask = P_MASK_POS_LEN_KEY;
|
|
235
|
+
if (op > 50)
|
|
236
|
+
client_t->req().paramMask &= ~P_MASK_DATALEN;
|
|
237
|
+
break;
|
|
238
|
+
case TD_KEY_SEEK:
|
|
239
|
+
case TD_KEY_NEXT:
|
|
240
|
+
case TD_KEY_PREV:
|
|
241
|
+
case TD_KEY_AFTER:
|
|
242
|
+
case TD_KEY_OR_AFTER:
|
|
243
|
+
case TD_KEY_BEFORE:
|
|
244
|
+
case TD_KEY_OR_BEFORE:
|
|
245
|
+
case TD_KEY_NEXT_KO:
|
|
246
|
+
case TD_KEY_PREV_KO:
|
|
247
|
+
case TD_KEY_GT_KO:
|
|
248
|
+
case TD_KEY_GE_KO:
|
|
249
|
+
case TD_KEY_LT_KO:
|
|
250
|
+
case TD_KEY_LE_KO:
|
|
251
|
+
case TD_REC_DELLETEATKEY:
|
|
252
|
+
client_t->req().paramMask = P_MASK_KEYNAVI;
|
|
253
|
+
if (op > 50)
|
|
254
|
+
client_t->req().paramMask &= ~P_MASK_DATALEN;
|
|
255
|
+
break;
|
|
256
|
+
case TD_KEY_NEXT_MULTI:
|
|
257
|
+
case TD_KEY_PREV_MULTI:
|
|
258
|
+
client_t->req().paramMask = P_MASK_POSBLK | P_MASK_DATA |
|
|
259
|
+
P_MASK_DATALEN | P_MASK_EX_SENDLEN |
|
|
260
|
+
P_MASK_KEYNUM;
|
|
261
|
+
break;
|
|
262
|
+
case TD_KEY_GE_NEXT_MULTI:
|
|
263
|
+
case TD_KEY_LE_PREV_MULTI:
|
|
264
|
+
client_t->req().paramMask = P_MASK_POSBLK | P_MASK_DATA |
|
|
265
|
+
P_MASK_DATALEN | P_MASK_EX_SENDLEN |
|
|
266
|
+
P_MASK_KEYNUM | P_MASK_KEYBUF;
|
|
267
|
+
break;
|
|
268
|
+
case TD_GET_PER:
|
|
269
|
+
case TD_SET_OWNERNAME:
|
|
270
|
+
case TD_TABLE_INFO:
|
|
271
|
+
client_t->req().paramMask = P_MASK_ALL;
|
|
272
|
+
break;
|
|
273
|
+
case TD_BOOKMARK:
|
|
274
|
+
case TD_POS_FIRST:
|
|
275
|
+
case TD_POS_LAST:
|
|
276
|
+
case TD_POS_NEXT:
|
|
277
|
+
case TD_POS_PREV:
|
|
278
|
+
client_t->req().paramMask = P_MASK_POSBLK | P_MASK_DATALEN;
|
|
279
|
+
break;
|
|
280
|
+
case TD_POS_NEXT_MULTI:
|
|
281
|
+
case TD_POS_PREV_MULTI:
|
|
282
|
+
client_t->req().paramMask = P_MASK_POSBLK | P_MASK_DATA |
|
|
283
|
+
P_MASK_DATALEN | P_MASK_EX_SENDLEN;
|
|
284
|
+
break;
|
|
285
|
+
case TD_KEY_SEEK_MULTI:
|
|
286
|
+
client_t->req().paramMask = P_MASK_POSBLK | P_MASK_DATA |
|
|
287
|
+
P_MASK_KEYNUM | P_MASK_DATALEN |
|
|
288
|
+
P_MASK_EX_SENDLEN;
|
|
289
|
+
break;
|
|
290
|
+
case TD_GETDIRECTORY:
|
|
291
|
+
case TD_SETDIRECTORY:
|
|
292
|
+
break;
|
|
293
|
+
case TD_VERSION:
|
|
294
|
+
{
|
|
295
|
+
ushort_td datalen = *client_t->req().datalen;
|
|
296
|
+
if (datalen >= sizeof(btrVersion))
|
|
297
|
+
{
|
|
298
|
+
btrVersion& v = (btrVersion&)*((char*)client_t->req().data);
|
|
299
|
+
v.majorVersion = atoi(CPP_INTERFACE_VER_MAJOR);
|
|
300
|
+
v.minorVersion = atoi(CPP_INTERFACE_VER_MINOR);
|
|
301
|
+
v.type = 'N';
|
|
302
|
+
client_t->req().paramMask = P_MASK_DATA | P_MASK_DATALEN;
|
|
303
|
+
}
|
|
304
|
+
else
|
|
305
|
+
client_t->req().result = STATUS_BUFFERTOOSMALL;
|
|
306
|
+
if (datalen < sizeof(btrVersion) * 2)
|
|
307
|
+
{
|
|
308
|
+
client_t->cleanup();
|
|
309
|
+
return 0;
|
|
310
|
+
}
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
short_td ret = client_t->execute();
|
|
315
|
+
client_t->cleanup();
|
|
316
|
+
return ret;
|
|
317
|
+
}
|
|
318
|
+
catch (boost::system::system_error& e)
|
|
319
|
+
{
|
|
320
|
+
switch (e.code().value())
|
|
321
|
+
{
|
|
322
|
+
case 11004:
|
|
323
|
+
case 11001:
|
|
324
|
+
ret = ERROR_TD_HOSTNAME_NOT_FOUND;
|
|
325
|
+
break;
|
|
326
|
+
case 10061:
|
|
327
|
+
ret = ERROR_TD_CONNECTION_FAILURE;
|
|
328
|
+
break;
|
|
309
329
|
case 232:
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
330
|
+
case 109:
|
|
331
|
+
case 2:
|
|
332
|
+
case 1:
|
|
333
|
+
ret = ERROR_TD_INVALID_CLINETHOST;
|
|
334
|
+
break;
|
|
335
|
+
default:
|
|
336
|
+
ret = e.code().value() + 20000;
|
|
337
|
+
}
|
|
338
|
+
OutputDebugString(e.what());
|
|
339
|
+
writeErrorLog(ret, e.what());
|
|
340
|
+
}
|
|
341
|
+
catch (bzs::netsvc::client::exception& e)
|
|
342
|
+
{
|
|
343
|
+
OutputDebugString(e.what());
|
|
344
|
+
ret = e.error();
|
|
345
|
+
writeErrorLog(e.error(), e.what());
|
|
346
|
+
}
|
|
347
|
+
catch (std::exception& e)
|
|
348
|
+
{
|
|
349
|
+
ret = 1;
|
|
350
|
+
OutputDebugString(e.what());
|
|
351
|
+
writeErrorLog(30000, e.what());
|
|
352
|
+
}
|
|
353
|
+
return ret;
|
|
334
354
|
}
|
|
335
355
|
|
|
336
356
|
mutex g_mutex;
|
|
337
357
|
|
|
338
358
|
const char* dateTimeStr(char* buf, unsigned int bufsize)
|
|
339
359
|
{
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
360
|
+
struct tm* date;
|
|
361
|
+
time_t now;
|
|
362
|
+
time(&now);
|
|
343
363
|
#ifdef __MINGW32__
|
|
344
|
-
|
|
345
|
-
#else
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
#endif
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
364
|
+
date = localtime(&now);
|
|
365
|
+
#else // NOT __MINGW32__
|
|
366
|
+
struct tm tmp;
|
|
367
|
+
date = &tmp;
|
|
368
|
+
localtime_x(date, &now);
|
|
369
|
+
#endif // NOT __MINGW32__
|
|
370
|
+
sprintf_s(buf, bufsize, "%04d/%02d/%02d %02d:%02d:%02d",
|
|
371
|
+
date->tm_year + 1900, date->tm_mon + 1, date->tm_mday,
|
|
372
|
+
date->tm_hour, date->tm_min, date->tm_sec);
|
|
373
|
+
return buf;
|
|
354
374
|
}
|
|
355
375
|
|
|
356
376
|
void writeErrorLog(int err, const char* msg)
|
|
357
377
|
{
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
strcat_s(buf, MAX_PATH, PSEPARATOR "trnsctcl_error.log");
|
|
372
|
-
FILE* fp = fileOpen(buf, "a+");
|
|
373
|
-
if (fp)
|
|
374
|
-
{
|
|
375
|
-
fprintf(fp, "%s Error No.%d %s\n", dateTimeStr(buf2, 30), err, msg);
|
|
376
|
-
fclose(fp);
|
|
377
|
-
}
|
|
378
|
-
}
|
|
378
|
+
mutex::scoped_lock lck(g_mutex);
|
|
379
|
+
char buf[MAX_PATH];
|
|
380
|
+
char buf2[30];
|
|
381
|
+
#ifdef WIN32
|
|
382
|
+
SHGetFolderPathA(NULL, CSIDL_COMMON_APPDATA, NULL, SHGFP_TYPE_CURRENT, buf);
|
|
383
|
+
strcat_s(buf, MAX_PATH, PSEPARATOR "BizStation");
|
|
384
|
+
_mkdir(buf);
|
|
385
|
+
strcat_s(buf, MAX_PATH, PSEPARATOR "Transactd");
|
|
386
|
+
_mkdir(buf);
|
|
387
|
+
#else
|
|
388
|
+
strcpy_s(buf, MAX_PATH, "/var/log");
|
|
389
|
+
#endif
|
|
379
390
|
|
|
391
|
+
strcat_s(buf, MAX_PATH, PSEPARATOR "trnsctcl_error.log");
|
|
392
|
+
FILE* fp = fileOpen(buf, "a+");
|
|
393
|
+
if (fp)
|
|
394
|
+
{
|
|
395
|
+
fprintf(fp, "%s Error No.%d %s\n", dateTimeStr(buf2, 30), err, msg);
|
|
396
|
+
fclose(fp);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
380
399
|
|
|
381
400
|
inline clientID* getCid()
|
|
382
401
|
{
|
|
383
402
|
#ifdef USETLS
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
403
|
+
clientID* p = (clientID*)tls_getspecific(g_tlsiID1);
|
|
404
|
+
if (p == NULL)
|
|
405
|
+
{
|
|
406
|
+
clientID* p = new clientID();
|
|
407
|
+
memset(p, 0, sizeof(clientID));
|
|
408
|
+
p->id = 1;
|
|
409
|
+
p->aid[0] = 'G';
|
|
410
|
+
p->aid[1] = 'X';
|
|
411
|
+
tls_setspecific(g_tlsiID1, p);
|
|
412
|
+
}
|
|
413
|
+
return p;
|
|
395
414
|
#else
|
|
396
|
-
|
|
397
|
-
#endif
|
|
415
|
+
return &g_cid;
|
|
416
|
+
#endif
|
|
398
417
|
}
|
|
399
418
|
|
|
400
|
-
|
|
401
419
|
void initCid()
|
|
402
420
|
{
|
|
403
421
|
#ifndef USETLS
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
422
|
+
if (!g_initCid)
|
|
423
|
+
{
|
|
424
|
+
g_initCid = true;
|
|
425
|
+
memset(&g_cid, 0, sizeof(clientID));
|
|
426
|
+
g_cid.id = 1;
|
|
427
|
+
g_cid.aid[0] = 'G';
|
|
428
|
+
g_cid.aid[1] = 'X';
|
|
429
|
+
}
|
|
412
430
|
#endif
|
|
413
431
|
}
|
|
414
432
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
uint_td* datalen, void_td* keybuf, char_td keyNum, clientID* cid)
|
|
433
|
+
extern "C" PACKAGE_OSX short_td BTRVID(ushort_td op, posblk* pbk, void_td* data,
|
|
434
|
+
uint_td* datalen, void_td* keybuf,
|
|
435
|
+
char_td keyNum, clientID* cid)
|
|
419
436
|
{
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
437
|
+
// If keybuf size is less than 255 byte then it will be buffer overrun.
|
|
438
|
+
// It need know size of key buffer before call.
|
|
439
|
+
keylen_td keylen = 255;
|
|
440
|
+
return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, cid);
|
|
424
441
|
}
|
|
425
442
|
|
|
426
|
-
extern "C" short_td __STDCALL
|
|
427
|
-
|
|
428
|
-
|
|
443
|
+
extern "C" PACKAGE_OSX short_td __STDCALL BTRV(ushort_td op, posblk* pbk,
|
|
444
|
+
void_td* data, uint_td* datalen,
|
|
445
|
+
void_td* keybuf, char_td keyNum)
|
|
429
446
|
{
|
|
430
|
-
|
|
431
|
-
|
|
447
|
+
initCid();
|
|
448
|
+
return BTRVID(op, pbk, data, datalen, keybuf, keyNum, getCid());
|
|
432
449
|
}
|
|
433
450
|
|
|
434
|
-
extern "C" short_td __STDCALL
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
char_td keyNum)
|
|
451
|
+
extern "C" PACKAGE_OSX short_td __STDCALL
|
|
452
|
+
BTRCALL(ushort_td op, posblk* pbk, void_td* data, uint_td* datalen,
|
|
453
|
+
void_td* keybuf, keylen_td keylen, char_td keyNum)
|
|
438
454
|
{
|
|
439
|
-
|
|
440
|
-
|
|
455
|
+
initCid();
|
|
456
|
+
return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, getCid());
|
|
441
457
|
}
|
|
442
458
|
|
|
443
|
-
extern "C" short_td __STDCALL
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
char_td keyNum)
|
|
459
|
+
extern "C" PACKAGE_OSX short_td __STDCALL
|
|
460
|
+
BTRCALL32(ushort_td op, posblk* pbk, void_td* data, uint_td* datalen,
|
|
461
|
+
void_td* keybuf, keylen_td keylen, char_td keyNum)
|
|
447
462
|
{
|
|
448
|
-
|
|
449
|
-
|
|
463
|
+
initCid();
|
|
464
|
+
return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, getCid());
|
|
450
465
|
}
|
|
451
466
|
|
|
452
|
-
extern "C" short_td __STDCALL
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
467
|
+
extern "C" PACKAGE_OSX short_td __STDCALL
|
|
468
|
+
BTRCALLID32(ushort_td op, posblk* pbk, void_td* data, uint_td* datalen,
|
|
469
|
+
void_td* keybuf, keylen_td keylen, char_td keyNum,
|
|
470
|
+
clientID* cid)
|
|
456
471
|
{
|
|
457
|
-
|
|
472
|
+
return BTRCALLID(op, pbk, data, datalen, keybuf, keylen, keyNum, cid);
|
|
458
473
|
}
|
|
459
474
|
|
|
460
|
-
|
|
475
|
+
extern "C" PACKAGE_OSX short_td __STDCALL CallbackRegist(dllUnloadCallback func)
|
|
476
|
+
{
|
|
477
|
+
dllUnloadCallbackFunc = func;
|
|
478
|
+
return 0;
|
|
479
|
+
}
|