/** Binds cLuaTCPLink::StartTLSClient */ static int tolua_cTCPLink_StartTLSClient(lua_State * L) { // Function signature: // LinkInstance:StartTLSClient(OwnCert, OwnPrivKey, OwnPrivKeyPassword) -> [true] or [nil, ErrMsg] // Get the link: cLuaState S(L); if (!S.CheckParamSelf("cTCPLink")) { return 0; } auto Link = *static_cast<cLuaTCPLink **>(lua_touserdata(L, 1)); ASSERT(Link != nullptr); // Checked by CheckParamSelf() // Read the (optional) params: AString OwnCert, OwnPrivKey, OwnPrivKeyPassword; S.GetStackValues(2, OwnCert, OwnPrivKey, OwnPrivKeyPassword); // Start the TLS handshake: AString res = Link->StartTLSClient(OwnCert, OwnPrivKey, OwnPrivKeyPassword); if (!res.empty()) { S.Push(cLuaState::Nil, Printf("Cannot start TLS on link to %s:%d: %s", Link->GetRemoteIP().c_str(), Link->GetRemotePort(), res.c_str())); return 2; } return 1; }
AString cLuaTCPLink::StartTLSClient( const AString & a_OwnCertData, const AString & a_OwnPrivKeyData, const AString & a_OwnPrivKeyPassword ) { auto link = m_Link; if (link != nullptr) { cX509CertPtr ownCert; if (!a_OwnCertData.empty()) { ownCert = std::make_shared<cX509Cert>(); auto res = ownCert->Parse(a_OwnCertData.data(), a_OwnCertData.size()); if (res != 0) { return Printf("Cannot parse client certificate: -0x%x", res); } } cCryptoKeyPtr ownPrivKey; if (!a_OwnPrivKeyData.empty()) { ownPrivKey = std::make_shared<cCryptoKey>(); auto res = ownPrivKey->ParsePrivate(a_OwnPrivKeyData.data(), a_OwnPrivKeyData.size(), a_OwnPrivKeyPassword); if (res != 0) { return Printf("Cannot parse client private key: -0x%x", res); } } return link->StartTLSClient(ownCert, ownPrivKey); } return ""; }
/** Binds cLuaTCPLink::StartTLSClient */ static int tolua_cTCPLink_StartTLSClient(lua_State * L) { // Function signature: // LinkInstance:StartTLSClient(OwnCert, OwnPrivKey, OwnPrivKeyPassword) -> [true] or [nil, ErrMsg] // Get the link: cLuaState S(L); if (lua_isnil(L, 1)) { LOGWARNING("cTCPLink:StartTLSClient(): invalid link object. Stack trace:"); S.LogStackTrace(); return 0; } auto Link = *static_cast<cLuaTCPLink **>(lua_touserdata(L, 1)); // Read the params: AString OwnCert, OwnPrivKey, OwnPrivKeyPassword; S.GetStackValues(2, OwnCert, OwnPrivKey, OwnPrivKeyPassword); // Start the TLS handshake: AString res = Link->StartTLSClient(OwnCert, OwnPrivKey, OwnPrivKeyPassword); if (!res.empty()) { S.PushNil(); S.Push(Printf("Cannot start TLS on link to %s:%d: %s", Link->GetRemoteIP().c_str(), Link->GetRemotePort(), res.c_str())); return 2; } return 1; }