serv_lib.cc

00001 /* 
00002    EyeDB Object Database Management System
00003    Copyright (C) 1994-2008 SYSRA
00004    
00005    EyeDB is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009    
00010    EyeDB is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014    
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with this library; if not, write to the Free Software
00017    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA 
00018 */
00019 
00020 /*
00021    Author: Eric Viara <viara@sysra.com>
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     //*QUERY_LANG_CREATE_SERV_RPC,
00118     //*QUERY_DATABASE_CREATE_SERV_RPC,
00119     //*QUERY_CLASS_CREATE_SERV_RPC,
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     /*  BoolType, */
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   /*#define STATUS_VARIABLE*/
00194 
00195   /*#define STATUS_SZ sizeof(RPCStatusRec)*/
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     /*printf("STATUS_SZ server is %d\n", STATUS_SZ);*/
00246 
00247     /* make types */
00248     rpcDB_LocalDBContextType = rpc_makeServerUserType(server, sizeof(rpcDB_LocalDBContext), 0);
00249     /*  BoolType = rpc_makeServerUserType(server, sizeof(Bool), 0); */
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     /* make functions */
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     QUERY_LANG_CREATE_SERV_RPC =
00452       rpc_makeUserServerFunction(server, makeQUERY_LANG_CREATE(),
00453                                  QUERY_LANG_CREATE_realize);
00454 
00455     QUERY_DATABASE_CREATE_SERV_RPC =
00456       rpc_makeUserServerFunction(server, makeQUERY_DATABASE_CREATE(),
00457                                  QUERY_DATABASE_CREATE_realize);
00458 
00459     QUERY_CLASS_CREATE_SERV_RPC =
00460       rpc_makeUserServerFunction(server, makeQUERY_CLASS_CREATE(),
00461                                  QUERY_CLASS_CREATE_realize);
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     /* declare arg size */
00617     rpc_setServerArgSize(server, sizeof(ServerArg));
00618 
00619     /* add handler */
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           rpc_Client *client = se_rpcFeInit();
00660           //se_ConnHandle *conn;
00661           eyedbsm::Status status;
00662         */
00663         ConnHandle *idbc =  rpc_new(ConnHandle);
00664         //idbc->sech = conn;
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         // disconnected 15/02/06 because of a freeze
00676         // question : these calls were really necessary !?
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           if (ci->user_data)
00686           se_connClose(((ConnHandle *)ci->user_data)->sech);
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 }

Generated on Mon Dec 22 18:16:08 2008 for eyedb by  doxygen 1.5.3