api_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 #include "eyedb/base.h"
00027 #include "eyedb/Error.h"
00028 #include "eyedb/Exception.h"
00029 #include "eyedb/TransactionParams.h"
00030 #include "api_lib.h"
00031 #include "eyedblib/xdr.h"
00032 #include <eyedbsm/xdr.h>
00033 
00034 namespace eyedb {
00035 
00036   static rpc_Client *client;
00037 
00038   rpc_ClientFunction
00039   *DBMCREATE_RPC,
00040     *DBMUPDATE_RPC,
00041 
00042     *DBCREATE_RPC,
00043     *DBDELETE_RPC,
00044 
00045     *DBINFO_RPC,
00046     *DBMOVE_RPC,
00047     *DBCOPY_RPC,
00048     *DBRENAME_RPC,
00049 
00050     *USER_ADD_RPC,
00051     *USER_DELETE_RPC,
00052     *USER_PASSWD_SET_RPC,
00053     *PASSWD_SET_RPC,
00054 
00055     *DEFAULT_DBACCESS_SET_RPC,
00056     *USER_DBACCESS_SET_RPC,
00057     *USER_SYSACCESS_SET_RPC,
00058 
00059     *BACKEND_INTERRUPT_RPC,
00060 
00061     *TRANSACTION_BEGIN_RPC,
00062     *TRANSACTION_ABORT_RPC,
00063     *TRANSACTION_COMMIT_RPC,
00064 
00065     *TRANSACTION_PARAMS_SET_RPC,
00066     *TRANSACTION_PARAMS_GET_RPC,
00067 
00068     *DBOPEN_RPC,
00069     *DBOPENLOCAL_RPC,
00070     *DBCLOSE_RPC,
00071 
00072     *OBJECT_CREATE_RPC,
00073     *OBJECT_READ_RPC,
00074     *OBJECT_WRITE_RPC,
00075     *OBJECT_DELETE_RPC,
00076     *OBJECT_HEADER_READ_RPC,
00077     *OBJECT_SIZE_MODIFY_RPC,
00078     *OBJECT_PROTECTION_SET_RPC,
00079     *OBJECT_PROTECTION_GET_RPC,
00080     *OBJECT_CHECK_RPC,
00081 
00082     *OID_MAKE_RPC,
00083 
00084     *DATA_CREATE_RPC,
00085     *DATA_READ_RPC,
00086     *DATA_WRITE_RPC,
00087     *DATA_DELETE_RPC,
00088     *DATA_SIZE_GET_RPC,
00089     *DATA_SIZE_MODIFY_RPC,
00090 
00091     *VDDATA_CREATE_RPC,
00092     *VDDATA_WRITE_RPC,
00093     *VDDATA_DELETE_RPC,
00094 
00095     *SCHEMA_COMPLETE_RPC,
00096 
00097     *ATTRIBUTE_INDEX_CREATE_RPC,
00098     *ATTRIBUTE_INDEX_REMOVE_RPC,
00099 
00100     *INDEX_CREATE_RPC,
00101     *INDEX_REMOVE_RPC,
00102 
00103     *CONSTRAINT_CREATE_RPC,
00104     *CONSTRAINT_DELETE_RPC,
00105 
00106     *COLLECTION_GET_BY_IND_RPC,
00107     *COLLECTION_GET_BY_VALUE_RPC,
00108 
00109     *SET_OBJECT_LOCK_RPC,
00110     *GET_OBJECT_LOCK_RPC,
00111 
00112     *QUERY_LANG_CREATE_RPC,
00113     *QUERY_DATABASE_CREATE_RPC,
00114     *QUERY_CLASS_CREATE_RPC,
00115     *QUERY_COLLECTION_CREATE_RPC,
00116     *QUERY_ATTRIBUTE_CREATE_RPC,
00117     *QUERY_DELETE_RPC,
00118     *QUERY_SCAN_NEXT_RPC,
00119 
00120     *EXECUTABLE_CHECK_RPC,
00121     *EXECUTABLE_EXECUTE_RPC,
00122     *EXECUTABLE_SET_EXTREF_PATH_RPC,
00123     *EXECUTABLE_GET_EXTREF_PATH_RPC,
00124 
00125     *OQL_CREATE_RPC,
00126     *OQL_DELETE_RPC,
00127     *OQL_GETRESULT_RPC,
00128 
00129     *SET_CONN_INFO_RPC,
00130     *CHECK_AUTH_RPC,
00131 
00132     *SET_LOG_MASK_RPC,
00133 
00134     *INDEX_GET_COUNT_RPC,
00135     *INDEX_GET_STATS_RPC,
00136     *INDEX_SIMUL_STATS_RPC,
00137     *COLLECTION_GET_IMPLSTATS_RPC,
00138     *COLLECTION_SIMUL_IMPLSTATS_RPC,
00139     *INDEX_GET_IMPL_RPC,
00140     *COLLECTION_GET_IMPL_RPC,
00141 
00142     *GET_DEFAULT_DATASPACE_RPC,
00143     *SET_DEFAULT_DATASPACE_RPC,
00144 
00145     *DATASPACE_SET_CURRENT_DATAFILE_RPC,
00146     *DATASPACE_GET_CURRENT_DATAFILE_RPC,
00147 
00148     *GET_DEFAULT_INDEX_DATASPACE_RPC,
00149     *SET_DEFAULT_INDEX_DATASPACE_RPC,
00150     *GET_INDEX_LOCATIONS_RPC,
00151     *MOVE_INDEX_RPC,
00152     *GET_INSTANCE_CLASS_LOCATIONS_RPC,
00153     *MOVE_INSTANCE_CLASS_RPC,
00154     *GET_OBJECTS_LOCATIONS_RPC,
00155     *MOVE_OBJECTS_RPC,
00156     *GET_ATTRIBUTE_LOCATIONS_RPC,
00157     *MOVE_ATTRIBUTE_RPC,
00158 
00159     *CREATE_DATAFILE_RPC,
00160     *DELETE_DATAFILE_RPC,
00161     *MOVE_DATAFILE_RPC,
00162     *DEFRAGMENT_DATAFILE_RPC,
00163     *RESIZE_DATAFILE_RPC,
00164     *GET_DATAFILEI_NFO_RPC,
00165     *RENAME_DATAFILE_RPC,
00166     *CREATE_DATASPACE_RPC,
00167     *UPDATE_DATASPACE_RPC,
00168     *DELETE_DATASPACE_RPC,
00169     *RENAME_DATASPACE_RPC,
00170     *GET_SERVER_OUTOFBAND_DATA_RPC;
00171 
00172   rpc_ArgType
00173   rpcDB_LocalDBContextType,
00174     OidType,
00175     /*  BoolType,*/
00176     RPCStatusType;
00177 
00178   static void status_ua_client(rpc_Arg *, char **, void *,
00179                                rpc_SendRcv, rpc_FromTo);
00180 
00181   static void oid_ua_client(rpc_Arg *, char **, void *,
00182                             rpc_SendRcv, rpc_FromTo);
00183 
00184   /*#define STATUS_VARIABLE*/
00185 
00186   static int STATUS_SZ;
00187 
00188   rpc_Client *
00189   rpcFeInit()
00190   {
00191     /* make client */
00192     client = rpc_clientCreate();
00193 
00194     /* make types */
00195 
00196     STATUS_SZ = getenv("STATUS_SZ") ? atoi(getenv("STATUS_SZ")) :
00197       sizeof(RPCStatusRec);
00198 
00199     /*printf("STATUS_SZ client is %d\n", STATUS_SZ);*/
00200     rpcDB_LocalDBContextType = rpc_makeClientUserType(client, sizeof(rpcDB_LocalDBContext), 0, rpc_False);
00201     /*  BoolType = rpc_makeClientUserType(client, sizeof(Bool), 0, 0); */
00202     OidType = rpc_makeClientUserType(client, sizeof(eyedbsm::Oid), oid_ua_client, rpc_False);
00203 
00204 #ifdef STATUS_VARIABLE
00205     RPCStatusType = rpc_makeClientUserType(client, rpc_SizeVariable, status_ua_client, rpc_False);
00206 #else
00207     RPCStatusType = rpc_makeClientUserType(client, STATUS_SZ+4, status_ua_client, rpc_False);
00208 #endif
00209 
00210     /* make functions */
00211 
00212     DBMCREATE_RPC =
00213       rpc_makeUserClientFunction(client, makeDBMCREATE());
00214 
00215     DBMUPDATE_RPC =
00216       rpc_makeUserClientFunction(client, makeDBMUPDATE());
00217 
00218     DBCREATE_RPC =
00219       rpc_makeUserClientFunction(client, makeDBCREATE());
00220 
00221     DBDELETE_RPC =
00222       rpc_makeUserClientFunction(client, makeDBDELETE());
00223 
00224     DBINFO_RPC =
00225       rpc_makeUserClientFunction(client, makeDBINFO());
00226 
00227     DBMOVE_RPC =
00228       rpc_makeUserClientFunction(client, makeDBMOVE());
00229 
00230     DBCOPY_RPC =
00231       rpc_makeUserClientFunction(client, makeDBCOPY());
00232 
00233     USER_ADD_RPC =
00234       rpc_makeUserClientFunction(client, makeUSER_ADD());
00235 
00236     USER_DELETE_RPC =
00237       rpc_makeUserClientFunction(client, makeUSER_DELETE());
00238 
00239     USER_PASSWD_SET_RPC =
00240       rpc_makeUserClientFunction(client, makeUSER_PASSWD_SET());
00241 
00242     PASSWD_SET_RPC =
00243       rpc_makeUserClientFunction(client, makePASSWD_SET());
00244 
00245     DEFAULT_DBACCESS_SET_RPC =
00246       rpc_makeUserClientFunction(client, makeDEFAULT_DBACCESS_SET());
00247 
00248     USER_DBACCESS_SET_RPC =
00249       rpc_makeUserClientFunction(client, makeUSER_DBACCESS_SET());
00250 
00251     USER_SYSACCESS_SET_RPC =
00252       rpc_makeUserClientFunction(client, makeUSER_SYSACCESS_SET());
00253 
00254     DBRENAME_RPC =
00255       rpc_makeUserClientFunction(client, makeDBRENAME());
00256 
00257     BACKEND_INTERRUPT_RPC =
00258       rpc_makeUserClientFunction(client, makeBACKEND_INTERRUPT());
00259 
00260     TRANSACTION_BEGIN_RPC =
00261       rpc_makeUserClientFunction(client, makeTRANSACTION_BEGIN());
00262 
00263     TRANSACTION_COMMIT_RPC =
00264       rpc_makeUserClientFunction(client, makeTRANSACTION_COMMIT());
00265 
00266     TRANSACTION_ABORT_RPC =
00267       rpc_makeUserClientFunction(client, makeTRANSACTION_ABORT());
00268 
00269     TRANSACTION_PARAMS_SET_RPC =
00270       rpc_makeUserClientFunction(client, makeTRANSACTION_PARAMS_SET());
00271 
00272     TRANSACTION_PARAMS_GET_RPC =
00273       rpc_makeUserClientFunction(client, makeTRANSACTION_PARAMS_GET());
00274 
00275     DBOPEN_RPC =
00276       rpc_makeUserClientFunction(client, makeDBOPEN());
00277 
00278     DBOPENLOCAL_RPC =
00279       rpc_makeUserClientFunction(client, makeDBOPENLOCAL());
00280 
00281     DBCLOSE_RPC =
00282       rpc_makeUserClientFunction(client, makeDBCLOSE());
00283 
00284     /*
00285       SCHEMA_CREATE_RPC =
00286       rpc_makeUserClientFunction(client, makeSCHEMA_CREATE());
00287 
00288       CLASS_CREATE_RPC =
00289       rpc_makeUserClientFunction(client, makeCLASS_CREATE());
00290 
00291     */
00292 
00293     OBJECT_CREATE_RPC =
00294       rpc_makeUserClientFunction(client, makeOBJECT_CREATE());
00295 
00296     OBJECT_WRITE_RPC =
00297       rpc_makeUserClientFunction(client, makeOBJECT_WRITE());
00298 
00299     OBJECT_READ_RPC =
00300       rpc_makeUserClientFunction(client, makeOBJECT_READ());
00301 
00302     OBJECT_DELETE_RPC =
00303       rpc_makeUserClientFunction(client, makeOBJECT_DELETE());
00304 
00305     OBJECT_HEADER_READ_RPC =
00306       rpc_makeUserClientFunction(client, makeOBJECT_HEADER_READ());
00307 
00308     OBJECT_SIZE_MODIFY_RPC =
00309       rpc_makeUserClientFunction(client, makeOBJECT_SIZE_MODIFY());
00310 
00311     OBJECT_CHECK_RPC =
00312       rpc_makeUserClientFunction(client, makeOBJECT_CHECK());
00313 
00314     OBJECT_PROTECTION_SET_RPC =
00315       rpc_makeUserClientFunction(client, makeOBJECT_PROTECTION_SET());
00316 
00317     OBJECT_PROTECTION_GET_RPC =
00318       rpc_makeUserClientFunction(client, makeOBJECT_PROTECTION_GET());
00319 
00320     OID_MAKE_RPC =
00321       rpc_makeUserClientFunction(client, makeOID_MAKE());
00322 
00323     DATA_CREATE_RPC =
00324       rpc_makeUserClientFunction(client, makeDATA_CREATE());
00325 
00326     DATA_WRITE_RPC =
00327       rpc_makeUserClientFunction(client, makeDATA_WRITE());
00328 
00329     DATA_READ_RPC =
00330       rpc_makeUserClientFunction(client, makeDATA_READ());
00331 
00332     DATA_DELETE_RPC =
00333       rpc_makeUserClientFunction(client, makeDATA_DELETE());
00334 
00335     DATA_SIZE_GET_RPC =
00336       rpc_makeUserClientFunction(client, makeDATA_SIZE_GET());
00337 
00338     DATA_SIZE_MODIFY_RPC =
00339       rpc_makeUserClientFunction(client, makeDATA_SIZE_MODIFY());
00340 
00341     VDDATA_CREATE_RPC =
00342       rpc_makeUserClientFunction(client, makeVDDATA_CREATE());
00343 
00344     VDDATA_WRITE_RPC =
00345       rpc_makeUserClientFunction(client, makeVDDATA_WRITE());
00346 
00347     VDDATA_DELETE_RPC =
00348       rpc_makeUserClientFunction(client, makeVDDATA_DELETE());
00349 
00350     SCHEMA_COMPLETE_RPC =
00351       rpc_makeUserClientFunction(client, makeSCHEMA_COMPLETE());
00352 
00353     ATTRIBUTE_INDEX_CREATE_RPC =
00354       rpc_makeUserClientFunction(client, makeATTRIBUTE_INDEX_CREATE());
00355 
00356     ATTRIBUTE_INDEX_REMOVE_RPC =
00357       rpc_makeUserClientFunction(client, makeATTRIBUTE_INDEX_REMOVE());
00358 
00359     INDEX_CREATE_RPC =
00360       rpc_makeUserClientFunction(client, makeINDEX_CREATE());
00361 
00362     INDEX_REMOVE_RPC =
00363       rpc_makeUserClientFunction(client, makeINDEX_REMOVE());
00364 
00365     CONSTRAINT_CREATE_RPC =
00366       rpc_makeUserClientFunction(client, makeCONSTRAINT_CREATE());
00367 
00368     CONSTRAINT_DELETE_RPC =
00369       rpc_makeUserClientFunction(client, makeCONSTRAINT_DELETE());
00370 
00371     COLLECTION_GET_BY_IND_RPC =
00372       rpc_makeUserClientFunction(client, makeCOLLECTION_GET_BY_IND());
00373 
00374     COLLECTION_GET_BY_VALUE_RPC =
00375       rpc_makeUserClientFunction(client, makeCOLLECTION_GET_BY_VALUE());
00376 
00377     SET_OBJECT_LOCK_RPC =
00378       rpc_makeUserClientFunction(client, makeSET_OBJECT_LOCK());
00379 
00380     GET_OBJECT_LOCK_RPC =
00381       rpc_makeUserClientFunction(client, makeGET_OBJECT_LOCK());
00382 
00383     QUERY_LANG_CREATE_RPC =
00384       rpc_makeUserClientFunction(client, makeQUERY_LANG_CREATE());
00385 
00386     QUERY_DATABASE_CREATE_RPC =
00387       rpc_makeUserClientFunction(client, makeQUERY_DATABASE_CREATE());
00388 
00389     QUERY_CLASS_CREATE_RPC =
00390       rpc_makeUserClientFunction(client, makeQUERY_CLASS_CREATE());
00391 
00392     QUERY_COLLECTION_CREATE_RPC =
00393       rpc_makeUserClientFunction(client, makeQUERY_COLLECTION_CREATE());
00394 
00395     QUERY_ATTRIBUTE_CREATE_RPC =
00396       rpc_makeUserClientFunction(client, makeQUERY_ATTRIBUTE_CREATE());
00397 
00398     QUERY_DELETE_RPC =
00399       rpc_makeUserClientFunction(client, makeQUERY_DELETE());
00400 
00401     QUERY_SCAN_NEXT_RPC =
00402       rpc_makeUserClientFunction(client, makeQUERY_SCAN_NEXT());
00403 
00404     EXECUTABLE_CHECK_RPC = 
00405       rpc_makeUserClientFunction(client, makeEXECUTABLE_CHECK());
00406 
00407     EXECUTABLE_EXECUTE_RPC = 
00408       rpc_makeUserClientFunction(client, makeEXECUTABLE_EXECUTE());
00409 
00410     EXECUTABLE_SET_EXTREF_PATH_RPC = 
00411       rpc_makeUserClientFunction(client,
00412                                  makeEXECUTABLE_SET_EXTREF_PATH());
00413 
00414     EXECUTABLE_GET_EXTREF_PATH_RPC = 
00415       rpc_makeUserClientFunction(client,
00416                                  makeEXECUTABLE_GET_EXTREF_PATH());
00417 
00418     OQL_CREATE_RPC =
00419       rpc_makeUserClientFunction(client, makeOQL_CREATE());
00420 
00421     OQL_DELETE_RPC =
00422       rpc_makeUserClientFunction(client, makeOQL_DELETE());
00423 
00424     OQL_GETRESULT_RPC =
00425       rpc_makeUserClientFunction(client, makeOQL_GETRESULT());
00426 
00427     SET_CONN_INFO_RPC = 
00428       rpc_makeUserClientFunction(client, makeSET_CONN_INFO());
00429 
00430     CHECK_AUTH_RPC =
00431       rpc_makeUserClientFunction(client, makeCHECK_AUTH());
00432 
00433     SET_LOG_MASK_RPC =
00434       rpc_makeUserClientFunction(client, makeSET_LOG_MASK());
00435 
00436     INDEX_GET_COUNT_RPC =
00437       rpc_makeUserClientFunction(client, makeINDEX_GET_COUNT());
00438 
00439     INDEX_GET_STATS_RPC =
00440       rpc_makeUserClientFunction(client, makeINDEX_GET_STATS());
00441 
00442     INDEX_SIMUL_STATS_RPC =
00443       rpc_makeUserClientFunction(client, makeINDEX_SIMUL_STATS());
00444 
00445     COLLECTION_GET_IMPLSTATS_RPC =
00446       rpc_makeUserClientFunction(client, makeCOLLECTION_GET_IMPLSTATS());
00447 
00448     COLLECTION_SIMUL_IMPLSTATS_RPC =
00449       rpc_makeUserClientFunction(client, makeCOLLECTION_SIMUL_IMPLSTATS());
00450 
00451     INDEX_GET_IMPL_RPC =
00452       rpc_makeUserClientFunction(client, makeINDEX_GET_IMPL());
00453 
00454     COLLECTION_GET_IMPL_RPC =
00455       rpc_makeUserClientFunction(client, makeCOLLECTION_GET_IMPL());
00456 
00457     GET_DEFAULT_DATASPACE_RPC =
00458       rpc_makeUserClientFunction(client, makeGET_DEFAULT_DATASPACE());
00459 
00460     SET_DEFAULT_DATASPACE_RPC =
00461       rpc_makeUserClientFunction(client, makeSET_DEFAULT_DATASPACE());
00462 
00463     DATASPACE_SET_CURRENT_DATAFILE_RPC =
00464       rpc_makeUserClientFunction(client, makeDATASPACE_SET_CURRENT_DATAFILE());
00465 
00466     DATASPACE_GET_CURRENT_DATAFILE_RPC =
00467       rpc_makeUserClientFunction(client, makeDATASPACE_GET_CURRENT_DATAFILE());
00468 
00469     GET_DEFAULT_INDEX_DATASPACE_RPC =
00470       rpc_makeUserClientFunction(client, makeGET_DEFAULT_INDEX_DATASPACE());
00471 
00472     SET_DEFAULT_INDEX_DATASPACE_RPC =
00473       rpc_makeUserClientFunction(client, makeSET_DEFAULT_INDEX_DATASPACE());
00474 
00475     GET_INDEX_LOCATIONS_RPC =
00476       rpc_makeUserClientFunction(client, makeGET_INDEX_LOCATIONS());
00477 
00478     MOVE_INDEX_RPC =
00479       rpc_makeUserClientFunction(client, makeMOVE_INDEX());
00480 
00481     GET_INSTANCE_CLASS_LOCATIONS_RPC =
00482       rpc_makeUserClientFunction(client, makeGET_INSTANCE_CLASS_LOCATIONS());
00483 
00484     MOVE_INSTANCE_CLASS_RPC =
00485       rpc_makeUserClientFunction(client, makeMOVE_INSTANCE_CLASS());
00486 
00487     GET_OBJECTS_LOCATIONS_RPC =
00488       rpc_makeUserClientFunction(client, makeGET_OBJECTS_LOCATIONS());
00489 
00490     MOVE_OBJECTS_RPC =
00491       rpc_makeUserClientFunction(client, makeMOVE_OBJECTS());
00492 
00493     GET_ATTRIBUTE_LOCATIONS_RPC =
00494       rpc_makeUserClientFunction(client, makeGET_ATTRIBUTE_LOCATIONS());
00495 
00496     MOVE_ATTRIBUTE_RPC =
00497       rpc_makeUserClientFunction(client, makeMOVE_ATTRIBUTE());
00498 
00499     CREATE_DATAFILE_RPC =
00500       rpc_makeUserClientFunction(client, makeCREATE_DATAFILE());
00501 
00502     DELETE_DATAFILE_RPC =
00503       rpc_makeUserClientFunction(client, makeDELETE_DATAFILE());
00504 
00505     MOVE_DATAFILE_RPC =
00506       rpc_makeUserClientFunction(client, makeMOVE_DATAFILE());
00507 
00508     DEFRAGMENT_DATAFILE_RPC =
00509       rpc_makeUserClientFunction(client, makeDEFRAGMENT_DATAFILE());
00510 
00511     RESIZE_DATAFILE_RPC =
00512       rpc_makeUserClientFunction(client, makeRESIZE_DATAFILE());
00513 
00514     GET_DATAFILEI_NFO_RPC =
00515       rpc_makeUserClientFunction(client, makeGET_DATAFILEI_NFO());
00516 
00517     RENAME_DATAFILE_RPC =
00518       rpc_makeUserClientFunction(client, makeRENAME_DATAFILE());
00519 
00520     CREATE_DATASPACE_RPC =
00521       rpc_makeUserClientFunction(client, makeCREATE_DATASPACE());
00522 
00523     UPDATE_DATASPACE_RPC =
00524       rpc_makeUserClientFunction(client, makeUPDATE_DATASPACE());
00525 
00526     DELETE_DATASPACE_RPC =
00527       rpc_makeUserClientFunction(client, makeDELETE_DATASPACE());
00528 
00529     RENAME_DATASPACE_RPC =
00530       rpc_makeUserClientFunction(client, makeRENAME_DATASPACE());
00531 
00532     GET_SERVER_OUTOFBAND_DATA_RPC =
00533       rpc_makeUserClientFunction(client, makeGET_SERVER_OUTOFBAND_DATA());
00534 
00535     /* declare arg size */
00536     rpc_setClientArgSize(client, sizeof(ClientArg));
00537 
00538     return client;
00539   }
00540 
00541   void
00542   rpcFeRelease()
00543   {
00544   }
00545 
00546   rpc_Client *
00547   getRpcClient()
00548   {
00549     return client;
00550   }
00551 
00552   /*
00553   void
00554   eyedb_init()
00555   {
00556     eyedbsm::init();
00557     rpcFeInit();
00558   }
00559   */
00560 
00561 #include "eyedblib/rpc_lib.h"
00562 
00563 #define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
00564 
00565   static void
00566   status_ua_client(rpc_Arg *arg, char **pbuff, void *pua,
00567                    rpc_SendRcv send_rcv, rpc_FromTo fromto)
00568   {
00569     RPCStatusRec *s = (RPCStatusRec *)pua;
00570     char *buff = *pbuff;
00571 
00572     rpc_copy_fast_xdr(arg, buff, &s->err, sizeof(eyedblib::int32), send_rcv, fromto,
00573                       x2h_32_cpy, h2x_32_cpy);
00574     if ((arg->send_rcv & rpc_Send))
00575       assert(0);
00576     else if ((arg->send_rcv & rpc_Rcv) && fromto == rpc_From)
00577       {
00578 #ifdef STATUS_VARIABLE
00579         strcpy(s->err_msg, buff);
00580         printf("receiving status '%s'\n", buff);
00581         *pbuff += sizeof(eyedblib::int32)+strlen(buff)+1;
00582 #else
00583         strncpy(s->err_msg, buff, STATUS_SZ-4);
00584         s->err_msg[MIN(STATUS_SZ-4, strlen(buff))] = 0;
00585         *pbuff += STATUS_SZ;
00586 #endif
00587       }
00588   }
00589 
00590   static void
00591   oid_ua_client(rpc_Arg *arg, char **pbuff, void *pua,
00592                 rpc_SendRcv send_rcv, rpc_FromTo fromto)
00593   {
00594     eyedbsm::Oid oid;
00595     
00596     if (send_rcv & arg->send_rcv) {
00597       if (fromto == rpc_To) {
00598         memcpy(&oid, pua, sizeof(oid));
00599         eyedbsm::h2x_oid(&oid, &oid);
00600         memcpy(*pbuff, &oid, sizeof(oid));
00601       }
00602       else {
00603         memcpy(&oid, *pbuff, sizeof(oid));
00604         eyedbsm::x2h_oid(&oid, &oid);
00605         memcpy(pua, &oid, sizeof(oid));
00606       }
00607       *pbuff += sizeof(eyedbsm::Oid);
00608     }
00609   }
00610 }

Generated on Mon Dec 22 18:15:47 2008 for eyedb by  doxygen 1.5.3