INT32 _pmdController::loadForeignModule() { INT32 rc = SDB_OK ; const CHAR *MONGO_MODULE_NAME = "fapmongo" ; const CHAR *MONGO_MODULE_PATH = "./bin/fap/" ; _fapMongo = SDB_OSS_NEW pmdModuleLoader() ; if ( NULL == _fapMongo ) { PD_LOG( PDERROR, "Failed to alloc foreign access protocol module" ) ; rc = SDB_OOM ; goto error ; } rc = _fapMongo->load( MONGO_MODULE_NAME, MONGO_MODULE_PATH ) ; PD_RC_CHECK( rc, PDERROR, "Failed to load module: %s, path: %s" " rc: %d", MONGO_MODULE_NAME, MONGO_MODULE_PATH, rc ) ; rc = _fapMongo->create( _protocol ) ; PD_RC_CHECK( rc, PDERROR, "Failed to create protocol service" ) ; rc = _protocol->init( pmdGetKRCB() ) ; PD_RC_CHECK( rc, PDERROR, "Failed to init protocol" ) ; done: return rc ; error: goto done ; }
INT32 _pmdController::initForeignModule( const CHAR *moduleName ) { INT32 rc = SDB_OK ; UINT16 protocolPort = 0 ; CHAR rootPath[ OSS_MAX_PATHSIZE + 1 ] = { 0 } ; CHAR path[ OSS_MAX_PATHSIZE + 1 ] = { 0 } ; if ( NULL == moduleName || '\0' == moduleName[ 0 ] ) { goto done ; } _fapMongo = SDB_OSS_NEW pmdModuleLoader() ; if ( NULL == _fapMongo ) { PD_LOG( PDERROR, "Failed to alloc foreign access protocol module" ) ; rc = SDB_OOM ; goto error ; } rc = ossGetEWD( rootPath, OSS_MAX_PATHSIZE ) ; if ( rc ) { ossPrintf ( "Failed to get excutable file's working " "directory"OSS_NEWLINE ) ; goto error ; } rc = utilBuildFullPath( rootPath, FAP_MODULE_PATH, OSS_MAX_PATHSIZE, path ); if ( rc ) { ossPrintf( "Failed to build module path: %d"OSS_NEWLINE, rc ) ; goto error ; } rc = _fapMongo->load( moduleName, path ) ; PD_RC_CHECK( rc, PDERROR, "Failed to load module: %s, path: %s" " rc: %d", moduleName, FAP_MODULE_PATH, rc ) ; rc = _fapMongo->create( _protocol ) ; PD_RC_CHECK( rc, PDERROR, "Failed to create protocol service" ) ; SDB_ASSERT( _protocol, "Foreign access protocol can not be NULL" ) ; rc = _protocol->init( pmdGetKRCB() ) ; PD_RC_CHECK( rc, PDERROR, "Failed to init protocol" ) ; // memory will be freed in fini protocolPort = ossAtoi( _protocol->getServiceName() ) ; _pMongoListener = SDB_OSS_NEW ossSocket( protocolPort ) ; if ( !_pMongoListener ) { PD_LOG( PDERROR, "Failed to alloc socket" ) ; rc = SDB_OOM ; goto error ; } rc = _pMongoListener->initSocket() ; PD_RC_CHECK( rc, PDERROR, "Failed to init FAP listener socket[%d], " "rc: %d", protocolPort, rc ) ; rc = _pMongoListener->bind_listen() ; PD_RC_CHECK( rc, PDERROR, "Failed to bind FAP listener socket[%d], " "rc: %d", protocolPort, rc ) ; PD_LOG( PDEVENT, "Listerning on port[%d]", protocolPort ) ; done: return rc ; error: goto done ; }