/** * Create a client connection info object. * * @param url the database URL * @param prop the connection properties */ public ConnectionInfo(String url, Properties prop) { // 用于client端,需要解析URL this.url = remapURL(url); checkURL(); readProperties(prop); readAndRemoveSettingsFromURL(); parseURL(); setUserName(removeProperty("USER", "")); convertPasswords(); if (isEmbedded() && isPersistent()) { String baseDir = SysProperties.getBaseDirSilently(); if (baseDir != null) { setBaseDir(baseDir); } } netFactoryName = removeProperty(Constants.NET_FACTORY_NAME_KEY, Constants.DEFAULT_NET_FACTORY_NAME); }
private Session createSession(Transfer transfer, int sessionId, String originalURL, String dbName, String userName) throws IOException { ConnectionInfo ci = new ConnectionInfo(originalURL, dbName); ci.setUserName(userName); ci.setUserPasswordHash(transfer.readBytes()); ci.setFilePasswordHash(transfer.readBytes()); ci.setFileEncryptionKey(transfer.readBytes()); int len = transfer.readInt(); for (int i = 0; i < len; i++) { String key = transfer.readString(); String value = transfer.readString(); ci.addProperty(key, value, true); // 一些不严谨的client driver可能会发送重复的属性名 } if (baseDir == null) { baseDir = SysProperties.getBaseDirSilently(); } // override client's requested properties with server settings if (baseDir != null) { ci.setBaseDir(baseDir); } Session session = ci.createSession(); if (session.isValid()) { addSession(sessionId, session); assignCommandHandler(sessionId); } return session; }