00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <assert.h>
00026
00027 #include "serv_lib.h"
00028 namespace eyedb {
00029 class ObjectHeader;
00030 }
00031
00032 #include "eyedb/base.h"
00033 #include "eyedb/Error.h"
00034 #include "eyedb/Exception.h"
00035 #include "eyedb/TransactionParams.h"
00036 #include "kernel.h"
00037 #include <eyedblib/xdr.h>
00038 #include <eyedbsm/xdr.h>
00039 #include "eyedbsm/transaction.h"
00040
00041 namespace eyedb {
00042
00043 rpc_ServerFunction
00044 *DBMCREATE_SERV_RPC,
00045 *DBMUPDATE_SERV_RPC,
00046
00047 *DBCREATE_SERV_RPC,
00048 *DBDELETE_SERV_RPC,
00049
00050 *DBINFO_SERV_RPC,
00051 *DBMOVE_SERV_RPC,
00052 *DBCOPY_SERV_RPC,
00053 *DBRENAME_SERV_RPC,
00054
00055 *USER_ADD_SERV_RPC,
00056 *USER_DELETE_SERV_RPC,
00057 *USER_PASSWD_SET_SERV_RPC,
00058 *PASSWD_SET_SERV_RPC,
00059
00060 *DEFAULT_DBACCESS_SET_SERV_RPC,
00061 *USER_DBACCESS_SET_SERV_RPC,
00062 *USER_SYSACCESS_SET_SERV_RPC,
00063
00064 *BACKEND_INTERRUPT_SERV_RPC,
00065
00066 *TRANSACTION_BEGIN_SERV_RPC,
00067 *TRANSACTION_ABORT_SERV_RPC,
00068 *TRANSACTION_COMMIT_SERV_RPC,
00069
00070 *TRANSACTION_PARAMS_SET_SERV_RPC,
00071 *TRANSACTION_PARAMS_GET_SERV_RPC,
00072
00073 *DBOPEN_SERV_RPC,
00074 *DBOPENLOCAL_SERV_RPC,
00075 *DBCLOSE_SERV_RPC,
00076
00077 *OBJECT_CREATE_SERV_RPC,
00078 *OBJECT_READ_SERV_RPC,
00079 *OBJECT_WRITE_SERV_RPC,
00080 *OBJECT_DELETE_SERV_RPC,
00081 *OBJECT_HEADER_READ_SERV_RPC,
00082 *OBJECT_SIZE_MODIFY_SERV_RPC,
00083 *OBJECT_PROTECTION_SET_SERV_RPC,
00084 *OBJECT_PROTECTION_GET_SERV_RPC,
00085 *OBJECT_CHECK_SERV_RPC,
00086
00087 *OID_MAKE_SERV_RPC,
00088
00089 *DATA_CREATE_SERV_RPC,
00090 *DATA_READ_SERV_RPC,
00091 *DATA_WRITE_SERV_RPC,
00092 *DATA_DELETE_SERV_RPC,
00093 *DATA_SIZE_GET_SERV_RPC,
00094 *DATA_SIZE_MODIFY_SERV_RPC,
00095
00096 *VDDATA_CREATE_SERV_RPC,
00097 *VDDATA_WRITE_SERV_RPC,
00098 *VDDATA_DELETE_SERV_RPC,
00099
00100 *SCHEMA_COMPLETE_SERV_RPC,
00101
00102 *ATTRIBUTE_INDEX_CREATE_SERV_RPC,
00103 *ATTRIBUTE_INDEX_REMOVE_SERV_RPC,
00104
00105 *INDEX_CREATE_SERV_RPC,
00106 *INDEX_REMOVE_SERV_RPC,
00107
00108 *CONSTRAINT_CREATE_SERV_RPC,
00109 *CONSTRAINT_DELETE_SERV_RPC,
00110
00111 *COLLECTION_GET_BY_IND_SERV_RPC,
00112 *COLLECTION_GET_BY_VALUE_SERV_RPC,
00113
00114 *SET_OBJECT_LOCK_SERV_RPC,
00115 *GET_OBJECT_LOCK_SERV_RPC,
00116
00117
00118
00119
00120 *QUERY_COLLECTION_CREATE_SERV_RPC,
00121 *QUERY_ATTRIBUTE_CREATE_SERV_RPC,
00122 *QUERY_DELETE_SERV_RPC,
00123 *QUERY_SCAN_NEXT_SERV_RPC,
00124
00125 *EXECUTABLE_CHECK_SERV_RPC,
00126 *EXECUTABLE_EXECUTE_SERV_RPC,
00127 *EXECUTABLE_SET_EXTREF_PATH_SERV_RPC,
00128 *EXECUTABLE_GET_EXTREF_PATH_SERV_RPC,
00129
00130 *OQL_CREATE_SERV_RPC,
00131 *OQL_DELETE_SERV_RPC,
00132 *OQL_GETRESULT_SERV_RPC,
00133
00134 *SET_CONN_INFO_SERV_RPC,
00135 *CHECK_AUTH_SERV_RPC,
00136
00137 *SET_LOG_MASK_SERV_RPC,
00138
00139 *INDEX_GET_COUNT_SERV_RPC,
00140 *INDEX_GET_STATS_SERV_RPC,
00141 *INDEX_SIMUL_STATS_SERV_RPC,
00142 *COLLECTION_GET_IMPLSTATS_SERV_RPC,
00143 *COLLECTION_SIMUL_IMPLSTATS_SERV_RPC,
00144 *INDEX_GET_IMPL_SERV_RPC,
00145 *COLLECTION_GET_IMPL_SERV_RPC,
00146
00147 *GET_DEFAULT_DATASPACE_SERV_RPC,
00148 *SET_DEFAULT_DATASPACE_SERV_RPC,
00149 *DATASPACE_SET_CURRENT_DATAFILE_SERV_RPC,
00150 *DATASPACE_GET_CURRENT_DATAFILE_SERV_RPC,
00151 *GET_DEFAULT_INDEX_DATASPACE_SERV_RPC,
00152 *SET_DEFAULT_INDEX_DATASPACE_SERV_RPC,
00153 *GET_INDEX_LOCATIONS_SERV_RPC,
00154 *MOVE_INDEX_SERV_RPC,
00155 *GET_INSTANCE_CLASS_LOCATIONS_SERV_RPC,
00156 *MOVE_INSTANCE_CLASS_SERV_RPC,
00157 *GET_OBJECTS_LOCATIONS_SERV_RPC,
00158 *MOVE_OBJECTS_SERV_RPC,
00159 *GET_ATTRIBUTE_LOCATIONS_SERV_RPC,
00160 *MOVE_ATTRIBUTE_SERV_RPC,
00161
00162 *CREATE_DATAFILE_SERV_RPC,
00163 *DELETE_DATAFILE_SERV_RPC,
00164 *MOVE_DATAFILE_SERV_RPC,
00165 *DEFRAGMENT_DATAFILE_SERV_RPC,
00166 *RESIZE_DATAFILE_SERV_RPC,
00167 *GET_DATAFILEI_NFO_SERV_RPC,
00168 *RENAME_DATAFILE_SERV_RPC,
00169 *CREATE_DATASPACE_SERV_RPC,
00170 *UPDATE_DATASPACE_SERV_RPC,
00171 *DELETE_DATASPACE_SERV_RPC,
00172 *RENAME_DATASPACE_SERV_RPC,
00173 *GET_SERVER_OUTOFBAND_DATA_SERV_RPC;
00174
00175 static rpc_Server *server;
00176
00177 #ifdef MTHREADS
00178 #include <synch.h>
00179 static mutex_t mp_sem;
00180 #endif
00181
00182 rpc_ArgType
00183 rpcDB_LocalDBContextType,
00184 OidType,
00185
00186 RPCStatusType;
00187
00188 static void status_ua_server(rpc_Arg *, char **, void *,
00189 rpc_SendRcv, rpc_FromTo);
00190 static void oid_ua_server(rpc_Arg *, char **, void *,
00191 rpc_SendRcv, rpc_FromTo);
00192
00193
00194
00195
00196 static int STATUS_SZ;
00197
00198 extern Bool edb_is_back_end;
00199
00200 extern void setConnInfo(rpc_ConnInfo *ci);
00201
00202 static void
00203 b_init(int *fd, int fd_cnt, rpc_ConnInfo *ci)
00204 {
00205 extern void config_init();
00206
00207 config_init();
00208
00209 setConnInfo(ci);
00210 eyedbsm::mutexes_init();
00211 }
00212
00213 static void
00214 b_release(rpc_ConnInfo *ci)
00215 {
00216 eyedbsm::mutexes_release();
00217 }
00218
00219 static void
00220 begin(int which, void *data)
00221 {
00222 if (!which)
00223 IDB_backendInterruptReset();
00224 }
00225
00226 rpc_Server *
00227 rpcBeInit()
00228 {
00229 rpc_ServerMode mode;
00230
00231 edb_is_back_end = True;
00232
00233 if (getenv("EYEDBDBX"))
00234 mode = rpc_MonoProc;
00235 else
00236 mode = rpc_MultiProcs;
00237
00238 server = rpc_serverCreate(mode, RPC_PROTOCOL_MAGIC,
00239 CONN_COUNT, 0, b_init,
00240 b_release, begin, 0, 0);
00241
00242 STATUS_SZ = getenv("STATUS_SZ") ? atoi(getenv("STATUS_SZ")) :
00243 sizeof(RPCStatusRec);
00244
00245
00246
00247
00248 rpcDB_LocalDBContextType = rpc_makeServerUserType(server, sizeof(rpcDB_LocalDBContext), 0);
00249
00250 OidType = rpc_makeServerUserType(server, sizeof(eyedbsm::Oid), oid_ua_server);
00251 #ifdef STATUS_VARIABLE
00252 RPCStatusType = rpc_makeServerUserType(server, rpc_SizeVariable, status_ua_server);
00253 #else
00254 RPCStatusType = rpc_makeServerUserType(server, STATUS_SZ, status_ua_server);
00255 #endif
00256
00257
00258
00259 DBCREATE_SERV_RPC =
00260 rpc_makeUserServerFunction(server, makeDBCREATE(), DBCREATE_realize);
00261
00262 DBDELETE_SERV_RPC =
00263 rpc_makeUserServerFunction(server, makeDBDELETE(), DBDELETE_realize);
00264
00265 DBINFO_SERV_RPC =
00266 rpc_makeUserServerFunction(server, makeDBINFO(), DBINFO_realize);
00267
00268 DBMOVE_SERV_RPC =
00269 rpc_makeUserServerFunction(server, makeDBMOVE(), DBMOVE_realize);
00270
00271 DBCOPY_SERV_RPC =
00272 rpc_makeUserServerFunction(server, makeDBCOPY(), DBCOPY_realize);
00273
00274 DBRENAME_SERV_RPC =
00275 rpc_makeUserServerFunction(server, makeDBRENAME(), DBRENAME_realize);
00276
00277 DBMCREATE_SERV_RPC =
00278 rpc_makeUserServerFunction(server, makeDBMCREATE(), DBMCREATE_realize);
00279
00280 DBMUPDATE_SERV_RPC =
00281 rpc_makeUserServerFunction(server, makeDBMUPDATE(), DBMUPDATE_realize);
00282
00283 USER_ADD_SERV_RPC =
00284 rpc_makeUserServerFunction(server, makeUSER_ADD(), USER_ADD_realize);
00285
00286 USER_DELETE_SERV_RPC =
00287 rpc_makeUserServerFunction(server, makeUSER_DELETE(), USER_DELETE_realize);
00288
00289 USER_PASSWD_SET_SERV_RPC =
00290 rpc_makeUserServerFunction(server, makeUSER_PASSWD_SET(), USER_PASSWD_SET_realize);
00291
00292 PASSWD_SET_SERV_RPC =
00293 rpc_makeUserServerFunction(server, makePASSWD_SET(), PASSWD_SET_realize);
00294
00295 DEFAULT_DBACCESS_SET_SERV_RPC =
00296 rpc_makeUserServerFunction(server, makeDEFAULT_DBACCESS_SET(), DEFAULT_DBACCESS_SET_realize);
00297
00298 USER_DBACCESS_SET_SERV_RPC =
00299 rpc_makeUserServerFunction(server, makeUSER_DBACCESS_SET(), USER_DBACCESS_SET_realize);
00300
00301 USER_SYSACCESS_SET_SERV_RPC =
00302 rpc_makeUserServerFunction(server, makeUSER_SYSACCESS_SET(), USER_SYSACCESS_SET_realize);
00303
00304 BACKEND_INTERRUPT_SERV_RPC =
00305 rpc_makeUserServerFunction(server, makeBACKEND_INTERRUPT(), BACKEND_INTERRUPT_realize);
00306
00307 TRANSACTION_BEGIN_SERV_RPC =
00308 rpc_makeUserServerFunction(server, makeTRANSACTION_BEGIN(),
00309 TRANSACTION_BEGIN_realize);
00310
00311 TRANSACTION_COMMIT_SERV_RPC =
00312 rpc_makeUserServerFunction(server, makeTRANSACTION_COMMIT(),
00313 TRANSACTION_COMMIT_realize);
00314
00315 TRANSACTION_ABORT_SERV_RPC =
00316 rpc_makeUserServerFunction(server, makeTRANSACTION_ABORT(),
00317 TRANSACTION_ABORT_realize);
00318
00319 TRANSACTION_PARAMS_SET_SERV_RPC =
00320 rpc_makeUserServerFunction(server, makeTRANSACTION_PARAMS_SET(),
00321 TRANSACTION_PARAMS_SET_realize);
00322
00323 TRANSACTION_PARAMS_GET_SERV_RPC =
00324 rpc_makeUserServerFunction(server, makeTRANSACTION_PARAMS_GET(),
00325 TRANSACTION_PARAMS_GET_realize);
00326
00327 DBOPEN_SERV_RPC =
00328 rpc_makeUserServerFunction(server, makeDBOPEN(), DBOPEN_realize);
00329
00330 DBOPENLOCAL_SERV_RPC =
00331 rpc_makeUserServerFunction(server, makeDBOPENLOCAL(), DBOPENLOCAL_realize);
00332
00333 DBCLOSE_SERV_RPC =
00334 rpc_makeUserServerFunction(server, makeDBCLOSE(), DBCLOSE_realize);
00335
00336 OBJECT_CREATE_SERV_RPC =
00337 rpc_makeUserServerFunction(server, makeOBJECT_CREATE(),
00338 OBJECT_CREATE_realize);
00339
00340 OBJECT_WRITE_SERV_RPC =
00341 rpc_makeUserServerFunction(server, makeOBJECT_WRITE(),
00342 OBJECT_WRITE_realize);
00343
00344 OBJECT_READ_SERV_RPC =
00345 rpc_makeUserServerFunction(server, makeOBJECT_READ(),
00346 OBJECT_READ_realize);
00347
00348 OBJECT_DELETE_SERV_RPC =
00349 rpc_makeUserServerFunction(server, makeOBJECT_DELETE(),
00350 OBJECT_DELETE_realize);
00351
00352 OBJECT_HEADER_READ_SERV_RPC =
00353 rpc_makeUserServerFunction(server, makeOBJECT_HEADER_READ(),
00354 OBJECT_HEADER_READ_realize);
00355
00356 OBJECT_SIZE_MODIFY_SERV_RPC =
00357 rpc_makeUserServerFunction(server, makeOBJECT_SIZE_MODIFY(),
00358 OBJECT_SIZE_MODIFY_realize);
00359
00360 OBJECT_CHECK_SERV_RPC =
00361 rpc_makeUserServerFunction(server, makeOBJECT_CHECK(),
00362 OBJECT_CHECK_realize);
00363
00364 OBJECT_PROTECTION_SET_SERV_RPC =
00365 rpc_makeUserServerFunction(server, makeOBJECT_PROTECTION_SET(),
00366 OBJECT_PROTECTION_SET_realize);
00367
00368 OBJECT_PROTECTION_GET_SERV_RPC =
00369 rpc_makeUserServerFunction(server, makeOBJECT_PROTECTION_GET(),
00370 OBJECT_PROTECTION_GET_realize);
00371
00372 OID_MAKE_SERV_RPC =
00373 rpc_makeUserServerFunction(server, makeOID_MAKE(),
00374 OID_MAKE_realize);
00375
00376 DATA_CREATE_SERV_RPC =
00377 rpc_makeUserServerFunction(server, makeDATA_CREATE(),
00378 DATA_CREATE_realize);
00379
00380 DATA_WRITE_SERV_RPC =
00381 rpc_makeUserServerFunction(server, makeDATA_WRITE(),
00382 DATA_WRITE_realize);
00383
00384 DATA_READ_SERV_RPC =
00385 rpc_makeUserServerFunction(server, makeDATA_READ(),
00386 DATA_READ_realize);
00387
00388 DATA_DELETE_SERV_RPC =
00389 rpc_makeUserServerFunction(server, makeDATA_DELETE(),
00390 DATA_DELETE_realize);
00391
00392 DATA_SIZE_GET_SERV_RPC =
00393 rpc_makeUserServerFunction(server, makeDATA_SIZE_GET(),
00394 DATA_SIZE_GET_realize);
00395
00396 DATA_SIZE_MODIFY_SERV_RPC =
00397 rpc_makeUserServerFunction(server, makeDATA_SIZE_MODIFY(),
00398 DATA_SIZE_MODIFY_realize);
00399
00400 VDDATA_CREATE_SERV_RPC =
00401 rpc_makeUserServerFunction(server, makeVDDATA_CREATE(),
00402 VDDATA_CREATE_realize);
00403
00404 VDDATA_WRITE_SERV_RPC =
00405 rpc_makeUserServerFunction(server, makeVDDATA_WRITE(),
00406 VDDATA_WRITE_realize);
00407
00408 VDDATA_DELETE_SERV_RPC =
00409 rpc_makeUserServerFunction(server, makeVDDATA_DELETE(),
00410 VDDATA_DELETE_realize);
00411
00412 SCHEMA_COMPLETE_SERV_RPC =
00413 rpc_makeUserServerFunction(server, makeSCHEMA_COMPLETE(),
00414 SCHEMA_COMPLETE_realize);
00415
00416 ATTRIBUTE_INDEX_CREATE_SERV_RPC =
00417 rpc_makeUserServerFunction(server, makeATTRIBUTE_INDEX_CREATE(),
00418 ATTRIBUTE_INDEX_CREATE_realize);
00419
00420 ATTRIBUTE_INDEX_REMOVE_SERV_RPC =
00421 rpc_makeUserServerFunction(server, makeATTRIBUTE_INDEX_REMOVE(),
00422 ATTRIBUTE_INDEX_REMOVE_realize);
00423
00424 INDEX_CREATE_SERV_RPC =
00425 rpc_makeUserServerFunction(server, makeINDEX_CREATE(), INDEX_CREATE_realize);
00426
00427 INDEX_REMOVE_SERV_RPC =
00428 rpc_makeUserServerFunction(server, makeINDEX_REMOVE(), INDEX_REMOVE_realize);
00429
00430 CONSTRAINT_CREATE_SERV_RPC =
00431 rpc_makeUserServerFunction(server, makeCONSTRAINT_CREATE(), CONSTRAINT_CREATE_realize);
00432
00433 CONSTRAINT_DELETE_SERV_RPC =
00434 rpc_makeUserServerFunction(server, makeCONSTRAINT_DELETE(), CONSTRAINT_DELETE_realize);
00435
00436 COLLECTION_GET_BY_IND_SERV_RPC =
00437 rpc_makeUserServerFunction(server, makeCOLLECTION_GET_BY_IND(),
00438 COLLECTION_GET_BY_IND_realize);
00439
00440 COLLECTION_GET_BY_VALUE_SERV_RPC =
00441 rpc_makeUserServerFunction(server, makeCOLLECTION_GET_BY_VALUE(),
00442 COLLECTION_GET_BY_VALUE_realize);
00443
00444 SET_OBJECT_LOCK_SERV_RPC =
00445 rpc_makeUserServerFunction(server, makeSET_OBJECT_LOCK(), SET_OBJECT_LOCK_realize);
00446
00447 GET_OBJECT_LOCK_SERV_RPC =
00448 rpc_makeUserServerFunction(server, makeGET_OBJECT_LOCK(), GET_OBJECT_LOCK_realize);
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464 QUERY_COLLECTION_CREATE_SERV_RPC =
00465 rpc_makeUserServerFunction(server, makeQUERY_COLLECTION_CREATE(),
00466 QUERY_COLLECTION_CREATE_realize);
00467
00468 QUERY_ATTRIBUTE_CREATE_SERV_RPC =
00469 rpc_makeUserServerFunction(server, makeQUERY_ATTRIBUTE_CREATE(),
00470 QUERY_ATTRIBUTE_CREATE_realize);
00471
00472 QUERY_DELETE_SERV_RPC =
00473 rpc_makeUserServerFunction(server, makeQUERY_DELETE(),
00474 QUERY_DELETE_realize);
00475
00476 QUERY_SCAN_NEXT_SERV_RPC =
00477 rpc_makeUserServerFunction(server, makeQUERY_SCAN_NEXT(),
00478 QUERY_SCAN_NEXT_realize);
00479
00480 EXECUTABLE_CHECK_SERV_RPC =
00481 rpc_makeUserServerFunction(server, makeEXECUTABLE_CHECK(),
00482 EXECUTABLE_CHECK_realize);
00483
00484 EXECUTABLE_EXECUTE_SERV_RPC =
00485 rpc_makeUserServerFunction(server, makeEXECUTABLE_EXECUTE(),
00486 EXECUTABLE_EXECUTE_realize);
00487
00488 EXECUTABLE_SET_EXTREF_PATH_SERV_RPC =
00489 rpc_makeUserServerFunction(server,
00490 makeEXECUTABLE_SET_EXTREF_PATH(),
00491 EXECUTABLE_SET_EXTREF_PATH_realize);
00492
00493 EXECUTABLE_GET_EXTREF_PATH_SERV_RPC =
00494 rpc_makeUserServerFunction(server,
00495 makeEXECUTABLE_GET_EXTREF_PATH(),
00496 EXECUTABLE_GET_EXTREF_PATH_realize);
00497
00498 OQL_CREATE_SERV_RPC =
00499 rpc_makeUserServerFunction(server, makeOQL_CREATE(), OQL_CREATE_realize);
00500
00501 OQL_DELETE_SERV_RPC =
00502 rpc_makeUserServerFunction(server, makeOQL_DELETE(), OQL_DELETE_realize);
00503
00504 OQL_GETRESULT_SERV_RPC =
00505 rpc_makeUserServerFunction(server, makeOQL_GETRESULT(), OQL_GETRESULT_realize);
00506
00507 SET_CONN_INFO_SERV_RPC =
00508 rpc_makeUserServerFunction(server, makeSET_CONN_INFO(),
00509 SET_CONN_INFO_realize);
00510
00511 CHECK_AUTH_SERV_RPC =
00512 rpc_makeUserServerFunction(server, makeCHECK_AUTH(), CHECK_AUTH_realize);
00513
00514 SET_LOG_MASK_SERV_RPC =
00515 rpc_makeUserServerFunction(server, makeSET_LOG_MASK(), SET_LOG_MASK_realize);
00516
00517 INDEX_GET_COUNT_SERV_RPC =
00518 rpc_makeUserServerFunction(server, makeINDEX_GET_COUNT(), INDEX_GET_COUNT_realize);
00519
00520 INDEX_GET_STATS_SERV_RPC =
00521 rpc_makeUserServerFunction(server, makeINDEX_GET_STATS(), INDEX_GET_STATS_realize);
00522
00523 INDEX_SIMUL_STATS_SERV_RPC =
00524 rpc_makeUserServerFunction(server, makeINDEX_SIMUL_STATS(), INDEX_SIMUL_STATS_realize);
00525
00526 COLLECTION_GET_IMPLSTATS_SERV_RPC =
00527 rpc_makeUserServerFunction(server, makeCOLLECTION_GET_IMPLSTATS(), COLLECTION_GET_IMPLSTATS_realize);
00528
00529 COLLECTION_SIMUL_IMPLSTATS_SERV_RPC =
00530 rpc_makeUserServerFunction(server, makeCOLLECTION_SIMUL_IMPLSTATS(), COLLECTION_SIMUL_IMPLSTATS_realize);
00531
00532 INDEX_GET_IMPL_SERV_RPC =
00533 rpc_makeUserServerFunction(server, makeINDEX_GET_IMPL(), INDEX_GET_IMPL_realize);
00534
00535 COLLECTION_GET_IMPL_SERV_RPC =
00536 rpc_makeUserServerFunction(server, makeCOLLECTION_GET_IMPL(), COLLECTION_GET_IMPL_realize);
00537
00538 GET_DEFAULT_DATASPACE_SERV_RPC =
00539 rpc_makeUserServerFunction(server, makeGET_DEFAULT_DATASPACE(), GET_DEFAULT_DATASPACE_realize);
00540
00541 SET_DEFAULT_DATASPACE_SERV_RPC =
00542 rpc_makeUserServerFunction(server, makeSET_DEFAULT_DATASPACE(), SET_DEFAULT_DATASPACE_realize);
00543
00544 DATASPACE_SET_CURRENT_DATAFILE_SERV_RPC =
00545 rpc_makeUserServerFunction(server, makeDATASPACE_SET_CURRENT_DATAFILE(), DATASPACE_SET_CURRENT_DATAFILE_realize);
00546
00547 DATASPACE_GET_CURRENT_DATAFILE_SERV_RPC =
00548 rpc_makeUserServerFunction(server, makeDATASPACE_GET_CURRENT_DATAFILE(), DATASPACE_GET_CURRENT_DATAFILE_realize);
00549
00550 GET_DEFAULT_INDEX_DATASPACE_SERV_RPC =
00551 rpc_makeUserServerFunction(server, makeGET_DEFAULT_INDEX_DATASPACE(), GET_DEFAULT_INDEX_DATASPACE_realize);
00552
00553 SET_DEFAULT_INDEX_DATASPACE_SERV_RPC =
00554 rpc_makeUserServerFunction(server, makeSET_DEFAULT_INDEX_DATASPACE(), SET_DEFAULT_INDEX_DATASPACE_realize);
00555
00556 GET_INDEX_LOCATIONS_SERV_RPC =
00557 rpc_makeUserServerFunction(server, makeGET_INDEX_LOCATIONS(), GET_INDEX_LOCATIONS_realize);
00558
00559 MOVE_INDEX_SERV_RPC =
00560 rpc_makeUserServerFunction(server, makeMOVE_INDEX(), MOVE_INDEX_realize);
00561
00562 GET_INSTANCE_CLASS_LOCATIONS_SERV_RPC =
00563 rpc_makeUserServerFunction(server, makeGET_INSTANCE_CLASS_LOCATIONS(), GET_INSTANCE_CLASS_LOCATIONS_realize);
00564
00565 MOVE_INSTANCE_CLASS_SERV_RPC =
00566 rpc_makeUserServerFunction(server, makeMOVE_INSTANCE_CLASS(), MOVE_INSTANCE_CLASS_realize);
00567
00568 GET_OBJECTS_LOCATIONS_SERV_RPC =
00569 rpc_makeUserServerFunction(server, makeGET_OBJECTS_LOCATIONS(), GET_OBJECTS_LOCATIONS_realize);
00570
00571 MOVE_OBJECTS_SERV_RPC =
00572 rpc_makeUserServerFunction(server, makeMOVE_OBJECTS(), MOVE_OBJECTS_realize);
00573
00574 GET_ATTRIBUTE_LOCATIONS_SERV_RPC =
00575 rpc_makeUserServerFunction(server, makeGET_ATTRIBUTE_LOCATIONS(), GET_ATTRIBUTE_LOCATIONS_realize);
00576
00577 MOVE_ATTRIBUTE_SERV_RPC =
00578 rpc_makeUserServerFunction(server, makeMOVE_ATTRIBUTE(), MOVE_ATTRIBUTE_realize);
00579
00580 CREATE_DATAFILE_SERV_RPC =
00581 rpc_makeUserServerFunction(server, makeCREATE_DATAFILE(), CREATE_DATAFILE_realize);
00582
00583 DELETE_DATAFILE_SERV_RPC =
00584 rpc_makeUserServerFunction(server, makeDELETE_DATAFILE(), DELETE_DATAFILE_realize);
00585
00586 MOVE_DATAFILE_SERV_RPC =
00587 rpc_makeUserServerFunction(server, makeMOVE_DATAFILE(), MOVE_DATAFILE_realize);
00588
00589 DEFRAGMENT_DATAFILE_SERV_RPC =
00590 rpc_makeUserServerFunction(server, makeDEFRAGMENT_DATAFILE(), DEFRAGMENT_DATAFILE_realize);
00591
00592 RESIZE_DATAFILE_SERV_RPC =
00593 rpc_makeUserServerFunction(server, makeRESIZE_DATAFILE(), RESIZE_DATAFILE_realize);
00594
00595 GET_DATAFILEI_NFO_SERV_RPC =
00596 rpc_makeUserServerFunction(server, makeGET_DATAFILEI_NFO(), GET_DATAFILEI_NFO_realize);
00597
00598 RENAME_DATAFILE_SERV_RPC =
00599 rpc_makeUserServerFunction(server, makeRENAME_DATAFILE(), RENAME_DATAFILE_realize);
00600
00601 CREATE_DATASPACE_SERV_RPC =
00602 rpc_makeUserServerFunction(server, makeCREATE_DATASPACE(), CREATE_DATASPACE_realize);
00603
00604 UPDATE_DATASPACE_SERV_RPC =
00605 rpc_makeUserServerFunction(server, makeUPDATE_DATASPACE(), UPDATE_DATASPACE_realize);
00606
00607 DELETE_DATASPACE_SERV_RPC =
00608 rpc_makeUserServerFunction(server, makeDELETE_DATASPACE(), DELETE_DATASPACE_realize);
00609
00610 RENAME_DATASPACE_SERV_RPC =
00611 rpc_makeUserServerFunction(server, makeRENAME_DATASPACE(), RENAME_DATASPACE_realize);
00612
00613 GET_SERVER_OUTOFBAND_DATA_SERV_RPC =
00614 rpc_makeUserServerFunction(server, makeGET_SERVER_OUTOFBAND_DATA(), GET_SERVER_OUTOFBAND_DATA_realize);
00615
00616
00617 rpc_setServerArgSize(server, sizeof(ServerArg));
00618
00619
00620 (void)rpc_setConnectionHandler(server, connection_handler);
00621
00622 #ifdef MTHREADS
00623 rpcDB_mutexInit();
00624 mutex_init(&mp_sem, USYNC_PROCESS, 0);
00625 #endif
00626 eyedbsm::init();
00627 be_init();
00628 return server;
00629 }
00630
00631 rpc_Server *
00632 getRpcServer()
00633 {
00634 return server;
00635 }
00636
00637 static const char *sePort;
00638
00639 void
00640 setSePort(const char *seport)
00641 {
00642 sePort = seport;
00643 }
00644
00645 const char *
00646 getSePort(void)
00647 {
00648 return sePort;
00649 }
00650
00651 void
00652 connection_handler(rpc_Server *server, rpc_ClientId clientid, rpc_Boolean isnew)
00653 {
00654 rpcDB_ClientInfo *ci = rpcDB_clientInfoGet(clientid);
00655
00656 if (isnew)
00657 {
00658
00659
00660
00661
00662
00663 ConnHandle *idbc = rpc_new(ConnHandle);
00664
00665 ci->user_data = idbc;
00666 }
00667 else
00668 {
00669 int i;
00670 RPCStatus status;
00671 register rpcDB_ClientInfo *ci = rpcDB_clientInfoGet(clientid);
00672 rpcDB_DbHandleClientInfo *dbhclientinfo;
00673 extern void idbRelease(void);
00674
00675
00676
00677 #if 1
00678 for (i = 0; i < RPCDB_MAX_DBH; i++)
00679 rpcDB_close_do(server, &ci->dbhclientinfo[i], close_realize, (void **)&status);
00680 #endif
00681
00682 idbRelease();
00683
00684
00685
00686
00687
00688 }
00689 }
00690
00691 #include "eyedblib/rpc_lib.h"
00692
00693 #define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
00694
00695 static void
00696 status_ua_server(rpc_Arg *arg, char **pbuff, void *pua,
00697 rpc_SendRcv send_rcv, rpc_FromTo fromto)
00698 {
00699 RPCStatusRec *s = (RPCStatusRec *)pua;
00700 char *buff = *pbuff;
00701
00702 rpc_copy_fast_xdr(arg, buff, &s->err, sizeof(eyedblib::int32), send_rcv, fromto,
00703 x2h_32_cpy, h2x_32_cpy);
00704
00705 if ((arg->send_rcv & rpc_Send) && fromto == rpc_From)
00706 assert(0);
00707 else if ((arg->send_rcv & rpc_Rcv) && fromto == rpc_To)
00708 {
00709 #ifdef STATUS_VARIABLE
00710 strcpy(buff, s->err_msg);
00711 printf("sending status '%s'\n", buff);
00712 *pbuff += sizeof(eyedblib::int32)+strlen(buff)+1;
00713 #else
00714 strncpy(buff, s->err_msg, STATUS_SZ-4);
00715 buff[MIN(STATUS_SZ-4, strlen(s->err_msg))] = 0;
00716 *pbuff += STATUS_SZ;
00717 #endif
00718 }
00719 }
00720
00721 static void
00722 oid_ua_server(rpc_Arg *arg, char **pbuff, void *pua,
00723 rpc_SendRcv send_rcv, rpc_FromTo fromto)
00724 {
00725 eyedbsm::Oid oid;
00726
00727 if (send_rcv & arg->send_rcv) {
00728 if (fromto == rpc_To) {
00729 memcpy(&oid, pua, sizeof(oid));
00730 eyedbsm::h2x_oid(&oid, &oid);
00731 memcpy(*pbuff, &oid, sizeof(oid));
00732 }
00733 else {
00734 memcpy(&oid, *pbuff, sizeof(oid));
00735 eyedbsm::x2h_oid(&oid, &oid);
00736 memcpy(pua, &oid, sizeof(oid));
00737 }
00738 *pbuff += sizeof(eyedbsm::Oid);
00739 }
00740 }
00741 }