From a586ed2c4546f36c199fa68f49461f07b4ee7646 Mon Sep 17 00:00:00 2001 From: Nick Gammon Date: Fri, 19 Feb 2010 08:34:27 +1100 Subject: [PATCH] Added plugin callback Handle_IAC_GA --- OtherTypes.h | 1 + doc.h | 1 + mushview.cpp | 8 ++++---- plugins.cpp | 1 + stdafx.h | 1 + telnet_phases.cpp | 25 +++++++++++++++++++++++++ xml/xml_load_world.cpp | 2 ++ 7 files changed, 35 insertions(+), 4 deletions(-) diff --git a/OtherTypes.h b/OtherTypes.h index 4a9e2a07..49c88701 100644 --- a/OtherTypes.h +++ b/OtherTypes.h @@ -982,6 +982,7 @@ class CPlugin :public CObject DISPID m_dispid_plugin_telnet_option; // "OnPluginTelnetOption" DISPID m_dispid_plugin_telnet_request; // "OnPluginTelnetRequest" DISPID m_dispid_plugin_telnet_subnegotiation; // "OnPluginTelnetSubnegotiation" + DISPID m_dispid_plugin_IAC_GA; // "OnPlugin_IAC_GA" DISPID m_dispid_plugin_on_world_output_resized; // "OnPluginWorldOutputResized" DISPID m_dispid_plugin_on_command_changed; // "OnPluginCommandChanged" diff --git a/doc.h b/doc.h index 89cab20e..85af44cf 100644 --- a/doc.h +++ b/doc.h @@ -1292,6 +1292,7 @@ class CMUSHclientDoc : public CDocument void Phase_COMPRESS (const unsigned char c); void Phase_COMPRESS_WILL (const unsigned char c); bool Handle_Telnet_Request (const int iNumber, const string sType); + void Handle_IAC_GA (); void Handle_TELOPT_COMPRESS2 (); void Handle_TELOPT_MUD_SPECIFIC (); diff --git a/mushview.cpp b/mushview.cpp index e5901dfa..61e33dc4 100644 --- a/mushview.cpp +++ b/mushview.cpp @@ -69,11 +69,11 @@ static char BASED_CODE THIS_FILE[] = __FILE__; TTM_SETTITLEA, TTM_SETTITLEW, TTM_POPUP, TTM_GETTITLE */ -//#define TTM_SETTITLEA (WM_USER+32) -//#define TTM_SETTITLEW (WM_USER+33) +#ifndef TTM_SETTITLEA + #define TTM_SETTITLEA (WM_USER+32) +#endif + #define TTM_SETTITLE TTM_SETTITLEA -//#define TTM_POPUP (WM_USER+34) -//#define TTM_GETTITLE (WM_USER+35) #define TTM_SETWINDOWTHEME CCM_SETWINDOWTHEME diff --git a/plugins.cpp b/plugins.cpp index be8e91e0..c370a2b2 100644 --- a/plugins.cpp +++ b/plugins.cpp @@ -55,6 +55,7 @@ CPlugin::CPlugin (CMUSHclientDoc * pDoc) m_dispid_plugin_telnet_option = DISPID_UNKNOWN; m_dispid_plugin_telnet_request = DISPID_UNKNOWN; m_dispid_plugin_telnet_subnegotiation = DISPID_UNKNOWN; + m_dispid_plugin_IAC_GA = DISPID_UNKNOWN; m_dispid_plugin_partial_line = DISPID_UNKNOWN; m_dispid_plugin_on_world_output_resized = DISPID_UNKNOWN; m_dispid_plugin_on_command_changed = DISPID_UNKNOWN; diff --git a/stdafx.h b/stdafx.h index 40e576b0..36991401 100644 --- a/stdafx.h +++ b/stdafx.h @@ -515,6 +515,7 @@ void DeleteStyle (CStyle * pStyle, const char * filename, const long linenumber) #define ON_PLUGIN_TELNET_OPTION "OnPluginTelnetOption" #define ON_PLUGIN_TELNET_REQUEST "OnPluginTelnetRequest" #define ON_PLUGIN_TELNET_SUBNEGOTIATION "OnPluginTelnetSubnegotiation" +#define ON_PLUGIN_IAC_GA "OnPlugin_IAC_GA" #define ON_PLUGIN_WORLD_OUTPUT_RESIZED "OnPluginWorldOutputResized" #define ON_PLUGIN_TICK "OnPluginTick" #define ON_PLUGIN_MOUSE_MOVED "OnPluginMouseMoved" diff --git a/telnet_phases.cpp b/telnet_phases.cpp index 45e2795d..60811264 100644 --- a/telnet_phases.cpp +++ b/telnet_phases.cpp @@ -88,6 +88,29 @@ void CMUSHclientDoc::Phase_ANSI (const unsigned char c) // IAC - we have IAC x +void CMUSHclientDoc::Handle_IAC_GA () + { + CPlugin * pSavedPlugin = m_CurrentPlugin; + + // tell each plugin what we have received + for (POSITION pluginpos = m_PluginList.GetHeadPosition(); pluginpos; ) + { + CPlugin * pPlugin = m_PluginList.GetNext (pluginpos); + + + if (!(pPlugin->m_bEnabled)) // ignore disabled plugins + continue; + + // see what the plugin makes of this, + pPlugin->ExecutePluginScript (ON_PLUGIN_IAC_GA, + pPlugin->m_dispid_plugin_IAC_GA); + + } // end of doing each plugin + + m_CurrentPlugin = pSavedPlugin; + + } // end of CMUSHclientDoc::Handle_IAC_GA + void CMUSHclientDoc::Phase_IAC (unsigned char & c) { char * p; @@ -100,12 +123,14 @@ void CMUSHclientDoc::Phase_IAC (unsigned char & c) p = "EOR"; if (m_bConvertGAtoNewline) new_c = '\n'; + Handle_IAC_GA (); break; case GO_AHEAD : m_phase = NONE; p = "GA"; if (m_bConvertGAtoNewline) new_c = '\n'; + Handle_IAC_GA (); break; case SE : m_phase = NONE; p = "SE"; break; diff --git a/xml/xml_load_world.cpp b/xml/xml_load_world.cpp index e81d63c7..655c7e5b 100644 --- a/xml/xml_load_world.cpp +++ b/xml/xml_load_world.cpp @@ -474,6 +474,8 @@ LONGLONG iCounterFrequency = large_int_frequency.QuadPart; = m_CurrentPlugin->GetPluginDispid (ON_PLUGIN_TELNET_REQUEST); m_CurrentPlugin->m_dispid_plugin_telnet_subnegotiation = m_CurrentPlugin->GetPluginDispid (ON_PLUGIN_TELNET_SUBNEGOTIATION); + m_CurrentPlugin->m_dispid_plugin_IAC_GA + = m_CurrentPlugin->GetPluginDispid (ON_PLUGIN_IAC_GA); m_CurrentPlugin->m_dispid_plugin_on_world_output_resized = m_CurrentPlugin->GetPluginDispid (ON_PLUGIN_WORLD_OUTPUT_RESIZED); m_CurrentPlugin->m_dispid_plugin_on_command_changed