mirror of https://github.com/tp4a/teleport
fixed: can not auto-login with telnet protocol for Huawei network device.
parent
3db03008d6
commit
0521729c91
|
@ -537,6 +537,8 @@ sess_state TelnetSession::_do_relay(TelnetConn *conn) {
|
||||||
|
|
||||||
if (conn->is_server_side())
|
if (conn->is_server_side())
|
||||||
{
|
{
|
||||||
|
// EXLOG_BIN(m_conn_client->data().data(), m_conn_client->data().size(), "<-- client:");
|
||||||
|
|
||||||
// 收到了客户端发来的数据
|
// 收到了客户端发来的数据
|
||||||
if (_this->m_is_putty_mode && !_this->m_username_sent)
|
if (_this->m_is_putty_mode && !_this->m_username_sent)
|
||||||
{
|
{
|
||||||
|
@ -566,7 +568,9 @@ sess_state TelnetSession::_do_relay(TelnetConn *conn) {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 收到了服务端返回的数据
|
// EXLOG_BIN(m_conn_server->data().data(), m_conn_server->data().size(), "--> server:");
|
||||||
|
|
||||||
|
// 收到了服务端返回的数据
|
||||||
if (m_conn_server->data().data()[0] != TELNET_IAC)
|
if (m_conn_server->data().data()[0] != TELNET_IAC)
|
||||||
m_rec.record(TS_RECORD_TYPE_TELNET_DATA, m_conn_server->data().data(), m_conn_server->data().size());
|
m_rec.record(TS_RECORD_TYPE_TELNET_DATA, m_conn_server->data().data(), m_conn_server->data().size());
|
||||||
|
|
||||||
|
@ -603,11 +607,34 @@ sess_state TelnetSession::_do_relay(TelnetConn *conn) {
|
||||||
|
|
||||||
bool TelnetSession::_parse_find_and_send(TelnetConn* conn_recv, TelnetConn* conn_remote, const char* find, const char* send)
|
bool TelnetSession::_parse_find_and_send(TelnetConn* conn_recv, TelnetConn* conn_remote, const char* find, const char* send)
|
||||||
{
|
{
|
||||||
|
// EXLOGV("find prompt and send: [%s] => [%s]\n", find, send);
|
||||||
|
// EXLOG_BIN(conn_recv->data().data(), conn_recv->data().size(), "find prompt in data:");
|
||||||
|
|
||||||
size_t find_len = strlen(find);
|
size_t find_len = strlen(find);
|
||||||
size_t send_len = strlen(send);
|
size_t send_len = strlen(send);
|
||||||
if (0 == find_len || 0 == send_len)
|
if (0 == find_len || 0 == send_len || conn_recv->data().size() < find_len) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int find_range = conn_recv->data().size() - find_len;
|
||||||
|
for (int i = 0; i <= find_range; ++i)
|
||||||
|
{
|
||||||
|
if (0 == memcmp(conn_recv->data().data() + i, find, find_len))
|
||||||
|
{
|
||||||
|
conn_remote->send(conn_recv->data().data(), conn_recv->data().size());
|
||||||
|
conn_recv->data().empty();
|
||||||
|
|
||||||
|
MemBuffer mbuf_msg;
|
||||||
|
mbuf_msg.reserve(128);
|
||||||
|
mbuf_msg.append((ex_u8*)send, send_len);
|
||||||
|
mbuf_msg.append((ex_u8*)"\x0d\x0a", 2);
|
||||||
|
// EXLOG_BIN(mbuf_msg.data(), mbuf_msg.size(), "find prompt and send:");
|
||||||
|
conn_recv->send(mbuf_msg.data(), mbuf_msg.size());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
MemBuffer mbuf_msg;
|
MemBuffer mbuf_msg;
|
||||||
mbuf_msg.reserve(128);
|
mbuf_msg.reserve(128);
|
||||||
MemStream ms_msg(mbuf_msg);
|
MemStream ms_msg(mbuf_msg);
|
||||||
|
@ -679,6 +706,7 @@ bool TelnetSession::_parse_find_and_send(TelnetConn* conn_recv, TelnetConn* conn
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<content url="file://$MODULE_DIR$/webroot">
|
<content url="file://$MODULE_DIR$/webroot">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/webroot" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/webroot" isTestSource="false" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="jdk" jdkName="py34" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
<component name="TemplatesService">
|
<component name="TemplatesService">
|
||||||
|
|
Loading…
Reference in New Issue