From 3b55a62fdcb1f8222de3c2c8fbed530792c419a0 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Fri, 12 Oct 2012 14:53:57 +0000 Subject: GTalkExt, ICQ, IRC, Jabber: folders restructurization git-svn-id: http://svn.miranda-ng.org/main/trunk@1890 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/IRCG/src/irc.h | 725 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 725 insertions(+) create mode 100644 protocols/IRCG/src/irc.h (limited to 'protocols/IRCG/src/irc.h') diff --git a/protocols/IRCG/src/irc.h b/protocols/IRCG/src/irc.h new file mode 100644 index 0000000000..9fe6584d87 --- /dev/null +++ b/protocols/IRCG/src/irc.h @@ -0,0 +1,725 @@ +/* +IRC plugin for Miranda IM + +Copyright (C) 2003-05 Jurgen Persson +Copyright (C) 2007-09 George Hazan + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#ifndef _IRCWIN_H_ +#define _IRCWIN_H_ + +#define MIRANDA_VER 0x0A00 +#define _WIN32_WINNT 0x0501 +#define _WIN32_IE 0x0501 + +#include "m_stdhdr.h" + +#define _CRT_SECURE_NO_WARNINGS + +#define WIN32_LEAN_AND_MEAN +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "newpluginapi.h" +#include "m_system.h" +#include "m_system_cpp.h" +#include "m_protocols.h" +#include "m_protomod.h" +#include "m_protosvc.h" +#include "m_protoint.h" +#include "m_clist.h" +#include "m_options.h" +#include "m_database.h" +#include "m_utils.h" +#include "m_skin.h" +#include "m_netlib.h" +#include "m_clui.h" +#include "m_langpack.h" +#include "m_message.h" +#include "m_userinfo.h" +#include "m_addcontact.h" +#include "m_button.h" +#include "m_genmenu.h" +#include "m_file.h" +#include "m_ignore.h" +#include "m_chat.h" +#include "m_icolib.h" +#include "m_ircscript.h" +#include "win2k.h" + +#include "resource.h" + +#define IRC_QUICKCONNECT "/QuickConnectMenu" +#define IRC_JOINCHANNEL "/JoinChannelMenu" +#define IRC_CHANGENICK "/ChangeNickMenu" +#define IRC_SHOWLIST "/ShowListMenu" +#define IRC_SHOWSERVER "/ShowServerMenu" +#define IRC_UM_CHANSETTINGS "/UMenuChanSettings" +#define IRC_UM_WHOIS "/UMenuWhois" +#define IRC_UM_DISCONNECT "/UMenuDisconnect" +#define IRC_UM_IGNORE "/UMenuIgnore" + +#define STR_QUITMESSAGE "\002Miranda NG!\002 Smaller, Faster, Easier. http://miranda-ng.org/" +#define STR_USERINFO "I'm a happy Miranda NG user! Get it here: http://miranda-ng.org/" +#define STR_AWAYMESSAGE "I'm away from the computer." // Default away +#define DCCSTRING " (DCC)" +#define SERVERSMODULE "IRC Servers" +#define SERVERWINDOW _T("Network log") + +#define DCC_CHAT 1 +#define DCC_SEND 2 + +#define FILERESUME_CANCEL 11 + +struct CIrcProto; + +#include "mstring.h" +typedef CMStringA String; + +// special service for tweaking performance, implemented in chat.dll +#define MS_GC_GETEVENTPTR "GChat/GetNewEventPtr" +typedef int (*GETEVENTFUNC)(WPARAM wParam, LPARAM lParam); +typedef struct { + GETEVENTFUNC pfnAddEvent; +} + GCPTRS; + +#define IP_AUTO 1 +#define IP_MANUAL 2 + +struct IPRESOLVE // Contains info about the channels +{ + IPRESOLVE( const char* _addr, int _type ) : + sAddr( _addr ), + iType( _type ) + {} + + ~IPRESOLVE() + {} + + String sAddr; + int iType; +}; + +struct CHANNELINFO // Contains info about the channels +{ + TCHAR* pszTopic; + TCHAR* pszMode; + TCHAR* pszPassword; + TCHAR* pszLimit; + BYTE OwnMode; /* own mode on the channel. Bitmask: + 0: voice + 1: halfop + 2: op + 3: admin + 4: owner */ + int codepage; +}; + +struct SERVER_INFO // Contains info about different servers +{ + ~SERVER_INFO(); + + char *m_name, *m_address, *m_group; + int m_portStart, m_portEnd, m_iSSL; +}; + +struct PERFORM_INFO // Contains 'm_perform buffer' for different networks +{ + PERFORM_INFO( const char* szSetting, const TCHAR* value ) : + mSetting( szSetting ), + mText( value ) + {} + + ~PERFORM_INFO() + {} + + String mSetting; + CMString mText; +}; + +struct CONTACT // Contains info about users +{ + TCHAR* name; + TCHAR* user; + TCHAR* host; + bool ExactOnly; + bool ExactWCOnly; + bool ExactNick; +}; + +struct TDbSetting +{ + int offset; + char* name; + int type; + size_t size; + union + { + int defValue; + TCHAR* defStr; + }; +}; + +#include "irclib.h" +using namespace irc; + +#include "irc_dlg.h" + +///////////////////////////////////////////////////////////////////////////////////////// + +struct CIrcProto; +typedef void ( __cdecl CIrcProto::*IrcThreadFunc )( void* param ); +typedef int ( __cdecl CIrcProto::*IrcEventFunc )( WPARAM, LPARAM ); +typedef INT_PTR ( __cdecl CIrcProto::*IrcServiceFunc )( WPARAM, LPARAM ); +typedef INT_PTR ( __cdecl CIrcProto::*IrcServiceFuncParam )( WPARAM, LPARAM, LPARAM ); + +typedef bool (CIrcProto::*PfnIrcMessageHandler)(const CIrcMessage* pmsg); + +struct CIrcHandler +{ + CIrcHandler( const TCHAR* _name, PfnIrcMessageHandler _handler ) : + m_name( _name ), + m_handler( _handler ) + {} + + const TCHAR* m_name; + PfnIrcMessageHandler m_handler; +}; + +struct CIrcProto : public PROTO_INTERFACE, public MZeroedObject +{ + CIrcProto( const char*, const TCHAR* ); + ~CIrcProto(); + + // Protocol interface + + virtual HANDLE __cdecl AddToList( int flags, PROTOSEARCHRESULT* psr ); + virtual HANDLE __cdecl AddToListByEvent( int flags, int iContact, HANDLE hDbEvent ); + + virtual int __cdecl Authorize( HANDLE hContact ); + virtual int __cdecl AuthDeny( HANDLE hContact, const TCHAR* szReason ); + virtual int __cdecl AuthRecv( HANDLE hContact, PROTORECVEVENT* ); + virtual int __cdecl AuthRequest( HANDLE hContact, const TCHAR* szMessage ); + + virtual HANDLE __cdecl ChangeInfo( int iInfoType, void* pInfoData ); + + virtual HANDLE __cdecl FileAllow( HANDLE hContact, HANDLE hTransfer, const TCHAR* szPath ); + virtual int __cdecl FileCancel( HANDLE hContact, HANDLE hTransfer ); + virtual int __cdecl FileDeny( HANDLE hContact, HANDLE hTransfer, const TCHAR* szReason ); + virtual int __cdecl FileResume( HANDLE hTransfer, int* action, const TCHAR** szFilename ); + + virtual DWORD_PTR __cdecl GetCaps( int type, HANDLE hContact = NULL ); + virtual HICON __cdecl GetIcon( int iconIndex ); + virtual int __cdecl GetInfo( HANDLE hContact, int infoType ); + + virtual HANDLE __cdecl SearchBasic( const PROTOCHAR* id ); + virtual HANDLE __cdecl SearchByEmail( const PROTOCHAR* email ); + virtual HANDLE __cdecl SearchByName( const PROTOCHAR* nick, const PROTOCHAR* firstName, const PROTOCHAR* lastName ); + virtual HWND __cdecl SearchAdvanced( HWND owner ); + virtual HWND __cdecl CreateExtendedSearchUI( HWND owner ); + + virtual int __cdecl RecvContacts( HANDLE hContact, PROTORECVEVENT* ); + virtual int __cdecl RecvFile( HANDLE hContact, PROTORECVFILET* ); + virtual int __cdecl RecvMsg( HANDLE hContact, PROTORECVEVENT* ); + virtual int __cdecl RecvUrl( HANDLE hContact, PROTORECVEVENT* ); + + virtual int __cdecl SendContacts( HANDLE hContact, int flags, int nContacts, HANDLE* hContactsList ); + virtual HANDLE __cdecl SendFile( HANDLE hContact, const TCHAR* szDescription, TCHAR** ppszFiles ); + virtual int __cdecl SendMsg( HANDLE hContact, int flags, const char* msg ); + virtual int __cdecl SendUrl( HANDLE hContact, int flags, const char* url ); + + virtual int __cdecl SetApparentMode( HANDLE hContact, int mode ); + virtual int __cdecl SetStatus( int iNewStatus ); + + virtual HANDLE __cdecl GetAwayMsg( HANDLE hContact ); + virtual int __cdecl RecvAwayMsg( HANDLE hContact, int mode, PROTORECVEVENT* evt ); + virtual int __cdecl SendAwayMsg( HANDLE hContact, HANDLE hProcess, const char* msg ); + virtual int __cdecl SetAwayMsg( int m_iStatus, const TCHAR* msg ); + + virtual int __cdecl UserIsTyping( HANDLE hContact, int type ); + + virtual int __cdecl OnEvent( PROTOEVENTTYPE eventType, WPARAM wParam, LPARAM lParam ); + + // Services + INT_PTR __cdecl SvcCreateAccMgrUI( WPARAM, LPARAM ); + INT_PTR __cdecl GetMyAwayMsg( WPARAM, LPARAM ); + + INT_PTR __cdecl OnChangeNickMenuCommand( WPARAM, LPARAM ); + INT_PTR __cdecl OnDoubleclicked( WPARAM, LPARAM ); + INT_PTR __cdecl OnJoinChat( WPARAM, LPARAM ); + INT_PTR __cdecl OnJoinMenuCommand( WPARAM, LPARAM ); + INT_PTR __cdecl OnLeaveChat( WPARAM, LPARAM ); + INT_PTR __cdecl OnMenuChanSettings( WPARAM, LPARAM ); + INT_PTR __cdecl OnMenuDisconnect( WPARAM , LPARAM ); + INT_PTR __cdecl OnMenuIgnore( WPARAM, LPARAM ); + INT_PTR __cdecl OnMenuWhois( WPARAM, LPARAM ); + INT_PTR __cdecl OnQuickConnectMenuCommand(WPARAM, LPARAM ); + INT_PTR __cdecl OnShowListMenuCommand( WPARAM, LPARAM ); + INT_PTR __cdecl OnShowServerMenuCommand( WPARAM, LPARAM ); + + // Events + int __cdecl OnContactDeleted( WPARAM, LPARAM ); + int __cdecl OnInitOptionsPages( WPARAM, LPARAM ); + int __cdecl OnInitUserInfo( WPARAM, LPARAM ); + int __cdecl OnModulesLoaded( WPARAM, LPARAM ); + int __cdecl OnMenuPreBuild( WPARAM, LPARAM ); + int __cdecl OnPreShutdown( WPARAM, LPARAM ); + int __cdecl OnDbSettingChanged( WPARAM, LPARAM ); + + int __cdecl GCEventHook( WPARAM, LPARAM ); + int __cdecl GCMenuHook( WPARAM, LPARAM ); + + // Data + + char m_serverName[100]; + char m_password [500]; + TCHAR m_identSystem[10]; + char m_network[30]; + char m_portStart[10]; + char m_portEnd[10]; + int m_iSSL; + TCHAR m_identPort[10]; + TCHAR m_retryWait[10]; + TCHAR m_retryCount[10]; + TCHAR m_nick[30], m_pNick[30]; + TCHAR m_alternativeNick[30]; + TCHAR m_name[200]; + TCHAR m_userID[200]; + TCHAR m_quitMessage[400]; + TCHAR m_userInfo[500]; + char m_myHost[50]; + char m_mySpecifiedHost[500]; + char m_mySpecifiedHostIP[50]; + char m_myLocalHost[50]; + WORD m_myLocalPort; + TCHAR* m_alias; + int m_serverComboSelection; + int m_quickComboSelection; + int m_onlineNotificationTime; + int m_onlineNotificationLimit; + BYTE m_scriptingEnabled; + BYTE m_IPFromServer; + BYTE m_showAddresses; + BYTE m_disconnectDCCChats; + BYTE m_disableErrorPopups; + BYTE m_rejoinChannels; + BYTE m_rejoinIfKicked; + BYTE m_hideServerWindow; + BYTE m_ident; + BYTE m_identTimer; + BYTE m_retry; + BYTE m_disableDefaultServer; + BYTE m_autoOnlineNotification; + BYTE m_sendKeepAlive; + BYTE m_joinOnInvite; + BYTE m_perform; + BYTE m_forceVisible; + BYTE m_ignore; + BYTE m_ignoreChannelDefault; + BYTE m_useServer; + BYTE m_DCCFileEnabled; + BYTE m_DCCChatEnabled; + BYTE m_DCCChatAccept; + BYTE m_DCCChatIgnore; + BYTE m_DCCPassive; + BYTE m_DCCMode; + WORD m_DCCPacketSize; + BYTE m_manualHost; + BYTE m_oldStyleModes; + BYTE m_channelAwayNotification; + BYTE m_sendNotice; + BYTE m_utfAutodetect; + int m_codepage; + COLORREF colors[16]; + HICON hIcon[13]; + + OBJLIST vUserhostReasons; + OBJLIST vWhoInProgress; + + CRITICAL_SECTION cs; + CRITICAL_SECTION m_gchook; + CRITICAL_SECTION m_resolve; + HANDLE m_evWndCreate; + + CMString m_statusMessage; + bool m_bMbotInstalled; + int m_iTempCheckTime; + + CIrcSessionInfo si; + + int m_iRetryCount; + int m_portCount; + DWORD m_bConnectRequested; + DWORD m_bConnectThreadRunning; + + HGENMENU hMenuRoot, hMenuQuick, hMenuServer, hMenuJoin, hMenuNick, hMenuList; + HANDLE hNetlib, hNetlibDCC; + + bool bTempDisableCheck, bTempForceCheck, bEcho; + bool nickflag; + + bool bPerformDone; + + CJoinDlg* m_joinDlg; + CListDlg* m_listDlg; + CManagerDlg* m_managerDlg; + CNickDlg* m_nickDlg; + CWhoisDlg* m_whoisDlg; + CQuickDlg* m_quickDlg; + CIgnorePrefsDlg* m_ignoreDlg; + + int m_noOfChannels, m_manualWhoisCount; + String sChannelModes, sUserModes; + CMString sChannelPrefixes, sUserModePrefixes, WhoisAwayReply; + + CDlgBase::CreateParam OptCreateAccount, OptCreateConn, OptCreateIgnore, OptCreateOther; + + //clist.cpp + HANDLE CList_AddContact(struct CONTACT * user, bool InList, bool SetOnline); + bool CList_SetAllOffline(BYTE ChatsToo); + HANDLE CList_SetOffline(struct CONTACT * user); + + bool CList_AddEvent(struct CONTACT * user, HICON Icon, HANDLE event, const char * tooltip, int type ) ; + HANDLE CList_FindContact (struct CONTACT * user); + BOOL CList_AddDCCChat(const CMString& name, const CMString& hostmask, unsigned long adr, int port) ; + + //commandmonitor.cpp + UINT_PTR IdentTimer, InitTimer, KeepAliveTimer, OnlineNotifTimer, OnlineNotifTimer3; + + int AddOutgoingMessageToDB(HANDLE hContact, TCHAR* msg); + bool DoOnConnect(const CIrcMessage *pmsg); + int DoPerform(const char* event); + void __cdecl ResolveIPThread( void* di ); + + bool AddIgnore(const TCHAR* mask, const TCHAR* mode, const TCHAR* network) ; + int IsIgnored(const CMString& nick, const CMString& address, const CMString& host, char type) ; + int IsIgnored(CMString user, char type); + bool RemoveIgnore(const TCHAR* mask) ; + + //input.cpp + CMString DoAlias( const TCHAR *text, TCHAR *window); + BOOL DoHardcodedCommand( CMString text, TCHAR* window, HANDLE hContact ); + CMString DoIdentifiers( CMString text, const TCHAR* window ); + void FormatMsg(CMString& text); + bool PostIrcMessageWnd(TCHAR* pszWindow, HANDLE hContact,const TCHAR* szBuf); + bool PostIrcMessage( const TCHAR* fmt, ...); + + // irclib.cpp + UINT_PTR DCCTimer; + void SendIrcMessage( const TCHAR*, bool bNotify = true, int codepage = -1 ); + + // ircproto.cpp + void __cdecl AckBasicSearch( void* param ); + void __cdecl AckMessageFail( void* info ); + void __cdecl AckMessageFailDcc( void* info ); + void __cdecl AckMessageSuccess( void* info ); + + int SetStatusInternal( int iNewStatus, bool bIsInternal ); + + //options.cpp + HWND m_hwndConnect; + + OBJLIST m_ignoreItems; + + int m_channelNumber; + CMString m_whoReply; + CMString sNamesList; + CMString sTopic; + CMString sTopicName; + CMString sTopicTime; + CMString m_namesToWho; + CMString m_channelsToWho; + CMString m_namesToUserhost; + + void InitPrefs(void); + void InitIgnore(void); + + void ReadSettings( TDbSetting* sets, int count ); + void RewriteIgnoreSettings( void ); + void WriteSettings( TDbSetting* sets, int count ); + + //output + BOOL ShowMessage (const CIrcMessage* pmsg); + + //scripting.cpp + INT_PTR __cdecl Scripting_InsertRawIn(WPARAM wParam,LPARAM lParam); + INT_PTR __cdecl Scripting_InsertRawOut(WPARAM wParam,LPARAM lParam); + INT_PTR __cdecl Scripting_InsertGuiIn(WPARAM wParam,LPARAM lParam); + INT_PTR __cdecl Scripting_InsertGuiOut(WPARAM wParam,LPARAM lParam); + INT_PTR __cdecl Scripting_GetIrcData(WPARAM wparam, LPARAM lparam); + BOOL Scripting_TriggerMSPRawIn(char ** pszRaw); + BOOL Scripting_TriggerMSPRawOut(char ** pszRaw); + BOOL Scripting_TriggerMSPGuiIn(WPARAM * wparam, GCEVENT * gce); + BOOL Scripting_TriggerMSPGuiOut(GCHOOK * gch); + + // services.cpp + void ConnectToServer(void); + void DisconnectFromServer(void); + void DoNetlibLog( const char* fmt, ... ); + void IrcHookEvent( const char*, IrcEventFunc ); + void InitMainMenus(void); + + void ircFork( IrcThreadFunc, void* arg ); + HANDLE ircForkEx( IrcThreadFunc, void* arg ); + + UINT_PTR RetryTimer; + + void __cdecl ConnectServerThread( void* ); + void __cdecl DisconnectServerThread( void* ); + + //tools.cpp + void AddToJTemp(TCHAR op, CMString& sCommand); + bool AddWindowItemData(CMString window, const TCHAR* pszLimit, const TCHAR* pszMode, const TCHAR* pszPassword, const TCHAR* pszTopic); + INT_PTR CallChatEvent(WPARAM wParam, LPARAM lParam); + void CreateProtoService( const char* serviceName, IrcServiceFunc pFunc ); + INT_PTR DoEvent(int iEvent, const TCHAR* pszWindow, const TCHAR* pszNick, const TCHAR* pszText, const TCHAR* pszStatus, const TCHAR* pszUserInfo, DWORD_PTR dwItemData, bool bAddToLog, bool bIsMe,time_t timestamp = 1); + void FindLocalIP(HANDLE con); + bool FreeWindowItemData(CMString window, CHANNELINFO* wis); + bool IsChannel(const char* sName); + bool IsChannel(const TCHAR* sName); + void KillChatTimer(UINT_PTR &nIDEvent); + CMString MakeWndID(const TCHAR* sWindow); + CMString ModeToStatus(int sMode); + CMString PrefixToStatus(int cPrefix); + int SetChannelSBText(CMString sWindow, CHANNELINFO * wi); + void SetChatTimer(UINT_PTR &nIDEvent,UINT uElapse, TIMERPROC lpTimerFunc); + + void ClearUserhostReasons(int type); + void DoUserhostWithReason(int type, CMString reason, bool bSendCommand, CMString userhostparams, ...); + CMString GetNextUserhostReason(int type); + CMString PeekAtReasons(int type); + + int getByte( const char* name, BYTE defaultValue ); + int getByte( HANDLE hContact, const char* name, BYTE defaultValue ); + int getDword( const char* name, DWORD defaultValue ); + int getDword( HANDLE hContact, const char* name, DWORD defaultValue ); + int getString( const char* name, DBVARIANT* ); + int getString( HANDLE hContact, const char* name, DBVARIANT* ); + int getTString( const char* name, DBVARIANT* ); + int getTString( HANDLE hContact, const char* name, DBVARIANT* ); + int getWord( const char* name, WORD defaultValue ); + int getWord( HANDLE hContact, const char* name, WORD defaultValue ); + + void setByte( const char* name, BYTE value ); + void setByte( HANDLE hContact, const char* name, BYTE value ); + void setDword( const char* name, DWORD value ); + void setDword( HANDLE hContact, const char* name, DWORD value ); + void setString( const char* name, const char* value ); + void setString( HANDLE hContact, const char* name, const char* value ); + void setTString( const char* name, const TCHAR* value ); + void setTString( HANDLE hContact, const char* name, const TCHAR* value ); + void setWord( const char* name, int value ); + void setWord( HANDLE hContact, const char* name, int value ); + + // userinfo.cpp + void __cdecl AckUserInfoSearch( void* hContact ); + + //////////////////////////////////////////////////////////////////////////////////////// + // former CIrcSession class + + void AddDCCSession(HANDLE hContact, CDccSession* dcc); + void AddDCCSession(DCCINFO* pdci, CDccSession* dcc); + void RemoveDCCSession(HANDLE hContact); + void RemoveDCCSession(DCCINFO* pdci); + + CDccSession* FindDCCSession(HANDLE hContact); + CDccSession* FindDCCSession(DCCINFO* pdci); + CDccSession* FindDCCSendByPort(int iPort); + CDccSession* FindDCCRecvByPortAndName(int iPort, const TCHAR* szName); + CDccSession* FindPassiveDCCSend(int iToken); + CDccSession* FindPassiveDCCRecv(CMString sName, CMString sToken); + + void DisconnectAllDCCSessions(bool Shutdown); + void CheckDCCTimeout(void); + + bool Connect(const CIrcSessionInfo& info); + void Disconnect(void); + void KillIdent(void); + + int NLSend(const TCHAR* fmt, ...); + int NLSend(const char* fmt, ...); + int NLSend(const unsigned char* buf, int cbBuf); + int NLSendNoScript( const unsigned char* buf, int cbBuf); + int NLReceive(unsigned char* buf, int cbBuf); + void InsertIncomingEvent(TCHAR* pszRaw); + + __inline bool IsConnected() const { return con != NULL; } + + // send-to-stream operators + int getCodepage() const; + __inline void setCodepage( int aPage ) { codepage = aPage; } + + CIrcSessionInfo m_info; + +protected : + int codepage; + HANDLE con; + HANDLE hBindPort; + void DoReceive(); + LIST m_dcc_chats; + LIST m_dcc_xfers; + +private : + CRITICAL_SECTION m_dcc; // protect the dcc objects + + void createMessageFromPchar( const char* p ); + void Notify(const CIrcMessage* pmsg); + void __cdecl ThreadProc( void *pparam ); + + //////////////////////////////////////////////////////////////////////////////////////// + // former CIrcMonitor class + + bool OnIrc_PING(const CIrcMessage* pmsg); + bool OnIrc_WELCOME(const CIrcMessage* pmsg); + bool OnIrc_YOURHOST(const CIrcMessage* pmsg); + bool OnIrc_NICK(const CIrcMessage* pmsg); + bool OnIrc_PRIVMSG(const CIrcMessage* pmsg); + bool OnIrc_JOIN(const CIrcMessage* pmsg); + bool OnIrc_QUIT(const CIrcMessage* pmsg); + bool OnIrc_PART(const CIrcMessage* pmsg); + bool OnIrc_KICK(const CIrcMessage* pmsg); + bool OnIrc_MODE(const CIrcMessage* pmsg); + bool OnIrc_USERHOST_REPLY(const CIrcMessage* pmsg); + bool OnIrc_MODEQUERY(const CIrcMessage* pmsg); + bool OnIrc_NAMES(const CIrcMessage* pmsg); + bool OnIrc_ENDNAMES(const CIrcMessage* pmsg); + bool OnIrc_INITIALTOPIC(const CIrcMessage* pmsg); + bool OnIrc_INITIALTOPICNAME(const CIrcMessage* pmsg); + bool OnIrc_TOPIC(const CIrcMessage* pmsg); + bool OnIrc_TRYAGAIN(const CIrcMessage* pmsg); + bool OnIrc_NOTICE(const CIrcMessage* pmsg); + bool OnIrc_WHOIS_NAME(const CIrcMessage* pmsg); + bool OnIrc_WHOIS_CHANNELS(const CIrcMessage* pmsg); + bool OnIrc_WHOIS_SERVER(const CIrcMessage* pmsg); + bool OnIrc_WHOIS_AWAY(const CIrcMessage* pmsg); + bool OnIrc_WHOIS_IDLE(const CIrcMessage* pmsg); + bool OnIrc_WHOIS_END(const CIrcMessage* pmsg); + bool OnIrc_WHOIS_OTHER(const CIrcMessage* pmsg); + bool OnIrc_WHOIS_AUTH(const CIrcMessage* pmsg); + bool OnIrc_WHOIS_NO_USER(const CIrcMessage* pmsg); + bool OnIrc_NICK_ERR(const CIrcMessage* pmsg); + bool OnIrc_ENDMOTD(const CIrcMessage* pmsg); + bool OnIrc_LISTSTART(const CIrcMessage* pmsg); + bool OnIrc_LIST(const CIrcMessage* pmsg); + bool OnIrc_LISTEND(const CIrcMessage* pmsg); + bool OnIrc_BANLIST(const CIrcMessage* pmsg); + bool OnIrc_BANLISTEND(const CIrcMessage* pmsg); + bool OnIrc_SUPPORT(const CIrcMessage* pmsg); + bool OnIrc_BACKFROMAWAY(const CIrcMessage* pmsg); + bool OnIrc_SETAWAY(const CIrcMessage* pmsg); + bool OnIrc_JOINERROR(const CIrcMessage* pmsg); + bool OnIrc_UNKNOWN(const CIrcMessage* pmsg); + bool OnIrc_ERROR(const CIrcMessage* pmsg); + bool OnIrc_NOOFCHANNELS(const CIrcMessage* pmsg); + bool OnIrc_PINGPONG(const CIrcMessage* pmsg); + bool OnIrc_INVITE(const CIrcMessage* pmsg); + bool OnIrc_WHO_END(const CIrcMessage* pmsg); + bool OnIrc_WHO_REPLY(const CIrcMessage* pmsg); + bool OnIrc_WHOTOOLONG(const CIrcMessage* pmsg); + + bool IsCTCP(const CIrcMessage* pmsg); + + void OnIrcDefault(const CIrcMessage* pmsg); + void OnIrcDisconnected(); + + static OBJLIST m_handlers; + + PfnIrcMessageHandler FindMethod(const TCHAR* lpszName); + + void OnIrcMessage(const CIrcMessage* pmsg); + CMString sNick4Perform; +}; + +// map actual member functions to their associated IRC command. +// put any number of this macro in the class's constructor. +#define IRC_MAP_ENTRY(name, member) \ + m_handlers.insert( new CIrcHandler( _T(name), &CIrcProto::OnIrc_##member )); + +///////////////////////////////////////////////////////////////////////////////////////// +// Functions + +//main.cpp +extern HINSTANCE hInst; + +extern LIST g_Instances; + +extern OBJLIST g_servers; + +void UpgradeCheck(void); + +CIrcProto* GetTimerOwner( UINT_PTR eventId ); + +VOID CALLBACK IdentTimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ); +VOID CALLBACK TimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ); +VOID CALLBACK KeepAliveTimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ); +VOID CALLBACK OnlineNotifTimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ); +VOID CALLBACK OnlineNotifTimerProc3( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ); +VOID CALLBACK DCCTimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ); +VOID CALLBACK RetryTimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ); + +// options.cpp + +void InitServers(void); +void RereadServers(void); + +void InitContactMenus(void); +void UninitContactMenus(void); + +void WindowSetIcon(HWND hWnd, int iconId); +void WindowFreeIcon(HWND hWnd); + +void AddIcons(void); +void UninitIcons(void); +HICON LoadIconEx(int iIndex, bool big = false); +HANDLE GetIconHandle(int iconId); +void ReleaseIconEx(HICON hIcon); + +// services.cpp + +extern BOOL bChatInstalled, m_bMbotInstalled; + +//tools.cpp +int __stdcall WCCmp(const TCHAR* wild, const TCHAR* string); +char* __stdcall IrcLoadFile(TCHAR * szPath); +CMString __stdcall GetWord(const TCHAR* text, int index); +CMString& __stdcall ReplaceString (CMString& text, const TCHAR* replaceme, const TCHAR* newword); +const TCHAR* __stdcall GetWordAddress(const TCHAR* text, int index); +void __stdcall RemoveLinebreaks( CMString& Message ); +TCHAR* __stdcall my_strstri(const TCHAR *s1, const TCHAR *s2) ; +TCHAR* __stdcall DoColorCodes (const TCHAR* text, bool bStrip, bool bReplacePercent); + +String& __stdcall ReplaceString (String& text, const char* replaceme, const char* newword); +String __stdcall GetWord(const char* text, int index); + +#pragma comment(lib,"comctl32.lib") + +#endif -- cgit v1.2.3