X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FTermlib%2FTelnetTerminal.cc;h=2699f9caf583019a48fb7b7404168b8281e4d88c;hb=8d0f36a502bf65b88b5225ffaba25e5d4488df4d;hp=6b28a4f466be0164dd046ec13d3c0e81704b3ad6;hpb=844c117cb04bc73a5b920c2c49efbf14515da3e2;p=senf.git diff --git a/Utils/Termlib/TelnetTerminal.cc b/Utils/Termlib/TelnetTerminal.cc index 6b28a4f..2699f9c 100644 --- a/Utils/Termlib/TelnetTerminal.cc +++ b/Utils/Termlib/TelnetTerminal.cc @@ -33,6 +33,7 @@ ///////////////////////////////cc.p//////////////////////////////////////// prefix_ senf::term::TelnetTerminal::TelnetTerminal() + : setupFailed_ (false) { requestPeerOption(telnetopt::SUPPRESS_GO_AHEAD); requestLocalOption(telnetopt::SUPPRESS_GO_AHEAD); @@ -66,7 +67,45 @@ prefix_ void senf::term::TelnetTerminal::write(char ch) prefix_ void senf::term::TelnetTerminal::v_setupComplete() { - callbacks_->cb_init(); + bool init (true); + + if (setupFailed_) + v_setupFailed(); + else if (! (width() > 0 + && ! terminalType().empty() + && localOption(telnetopt::SUPPRESS_GO_AHEAD) + && peerOption(telnetopt::SUPPRESS_GO_AHEAD) + && localOption(telnetopt::ECHO) + && (init = callbacks_->cb_init()))) { + + SENF_LOG_BLOCK((senf::log::NOTICE)({ + log << "TelnetTerminal setup failed:\n"; + if (width() <= 0) + log << " missing telnet client NAWS support\n"; + if (terminalType().empty()) + log << " missing telnet client TERMINAL_TYPE support\n"; + if (! localOption(telnetopt::SUPPRESS_GO_AHEAD) || + ! peerOption(telnetopt::SUPPRESS_GO_AHEAD)) + log << " missing telnet clinet SGO support\n"; + if (! localOption(telnetopt::ECHO)) + log << " missing telnet client ECHO support\n"; + if (! init) + log << " terminal initialization (cb_init) failed\n"; + })); + + setupFailed_ = true; + requestPeerOption(telnetopt::SUPPRESS_GO_AHEAD, false); + requestLocalOption(telnetopt::SUPPRESS_GO_AHEAD, false); + requestLocalOption(telnetopt::ECHO, false); + requestPeerOption(telnetopt::TERMINAL_TYPE, false); + requestPeerOption(telnetopt::NAWS, false); + if (! requestsPending()) + v_setupFailed(); + } + else + SENF_LOG((senf::log::NOTICE)( + "Initialized TelnetTerminal: TERM=" << terminalType() + << ", size=" << width() << "x" << height())); } prefix_ void senf::term::TelnetTerminal::v_charReceived(char ch)