X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FTermlib%2FTelnetTerminal.cc;h=5e08938e99af4d45606ac7f57765658454b85e9e;hb=bee68a71b651ff8385e6aa2ff89bc361fd61e785;hp=6b28a4f466be0164dd046ec13d3c0e81704b3ad6;hpb=844c117cb04bc73a5b920c2c49efbf14515da3e2;p=senf.git diff --git a/Utils/Termlib/TelnetTerminal.cc b/Utils/Termlib/TelnetTerminal.cc index 6b28a4f..5e08938 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,23 @@ prefix_ void senf::term::TelnetTerminal::write(char ch) prefix_ void senf::term::TelnetTerminal::v_setupComplete() { - callbacks_->cb_init(); + if (setupFailed_) + v_setupFailed(); + else if (! (width() > 0 + && ! terminalType().empty() + && localOption(telnetopt::SUPPRESS_GO_AHEAD) + && peerOption(telnetopt::SUPPRESS_GO_AHEAD) + && localOption(telnetopt::ECHO) + && callbacks_->cb_init())) { + 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(); + } } prefix_ void senf::term::TelnetTerminal::v_charReceived(char ch)