ServerFunctionBase *ServerConnection::findFunction(color_ostream &out, const std::string &plugin, const std::string &name) { RPCService *svc; if (plugin.empty()) svc = core_service; else { svc = plugin_services[plugin]; if (!svc) { Plugin *plug = Core::getInstance().plug_mgr->getPluginByName(plugin); if (!plug) { out.printerr("No such plugin: %s\n", plugin.c_str()); return NULL; } svc = plug->rpc_connect(out); if (!svc) { out.printerr("Plugin %s doesn't export any RPC methods.\n", plugin.c_str()); return NULL; } svc->finalize(this, &functions); plugin_services[plugin] = svc; } } return svc->getFunction(name); }