diff --git a/src/agVstCli/agSslAgency.erl b/src/agVstCli/agSslAgency.erl index 8951708..f780d35 100644 --- a/src/agVstCli/agSslAgency.erl +++ b/src/agVstCli/agSslAgency.erl @@ -56,9 +56,31 @@ safeRegister(ServerName) -> moduleInit(Parent, Args) -> case init(Args) of - {ok, SrvState, CliState} -> - proc_lib:init_ack(Parent, {ok, self()}), - ?MODULE:loop(Parent, SrvState, CliState); + {ok, #srvState{poolName = PoolName, reConnState = ReConnState} = SrvState, CliState} -> + case ?agBeamPool:getv(PoolName) of + #dbOpts{port = Port, hostname = HostName, dbName = DbName, user = User, password = Password, vstSize = VstSize} -> + case ssl:connect(HostName, Port, ?AgDefSocketOpts, ?AgDefConnTimeout) of + {ok, Socket} -> + ssl:send(Socket, ?AgUpgradeInfo), + AuthInfo = agVstProto:authInfo(User, Password), + ssl:send(Socket, AuthInfo), + case agVstCli:receiveSslData(#recvState{}, Socket) of + {200, _BodyMap, _HeaderMap} -> + NewSrvState = SrvState#srvState{dbName = DbName, reConnState = agAgencyUtils:resetReConnState(ReConnState), socket = Socket, vstSize = VstSize}, + proc_lib:init_ack(Parent, {ok, self()}), + ?MODULE:loop(Parent, NewSrvState, CliState); + _Err -> + proc_lib:init_ack(Parent, {error, _Err}), + exit(_Err) + end; + _Err -> + proc_lib:init_ack(Parent, {error, _Err}), + exit(_Err) + end; + _Ret -> + proc_lib:init_ack(Parent, {error, _Ret}), + exit(_Ret) + end; {stop, Reason} -> proc_lib:init_ack(Parent, {error, Reason}), exit(Reason) diff --git a/src/agVstCli/agTcpAgency.erl b/src/agVstCli/agTcpAgency.erl index cf8d16f..73b9584 100644 --- a/src/agVstCli/agTcpAgency.erl +++ b/src/agVstCli/agTcpAgency.erl @@ -56,9 +56,31 @@ safeRegister(ServerName) -> moduleInit(Parent, Args) -> case init(Args) of - {ok, SrvState, CliState} -> - proc_lib:init_ack(Parent, {ok, self()}), - ?MODULE:loop(Parent, SrvState, CliState); + {ok, #srvState{poolName = PoolName, reConnState = ReConnState} = SrvState, CliState} -> + case ?agBeamPool:getv(PoolName) of + #dbOpts{port = Port, hostname = HostName, dbName = DbName, user = User, password = Password, vstSize = VstSize} -> + case gen_tcp:connect(HostName, Port, ?AgDefSocketOpts, ?AgDefConnTimeout) of + {ok, Socket} -> + agMiscUtils:syncSend(Socket, ?AgUpgradeInfo), + AuthInfo = agVstProto:authInfo(User, Password), + agMiscUtils:syncSend(Socket, AuthInfo), + case agVstCli:receiveTcpData(#recvState{}, Socket) of + {200, _BodyMap, _HeaderMap} -> + NewSrvState = SrvState#srvState{dbName = DbName, reConnState = agAgencyUtils:resetReConnState(ReConnState), socket = Socket, vstSize = VstSize}, + proc_lib:init_ack(Parent, {ok, self()}), + ?MODULE:loop(Parent, NewSrvState, CliState); + _Err -> + proc_lib:init_ack(Parent, {error, _Err}), + exit(_Err) + end; + _Err -> + proc_lib:init_ack(Parent, {error, _Err}), + exit(_Err) + end; + _Ret -> + proc_lib:init_ack(Parent, {error, _Ret}), + exit(_Ret) + end; {stop, Reason} -> proc_lib:init_ack(Parent, {error, Reason}), exit(Reason)