From 65e002b63efdb00571d0ba4ec1a73b14e1d7d3a0 Mon Sep 17 00:00:00 2001 From: Alexey Kulakov Date: Wed, 4 Jul 2012 20:10:29 +0000 Subject: Pascal headers moved to include\delphi directory (with small updates) removed deprecated m_mwclc.h file and link on it in AutoShutdown plugin git-svn-id: http://svn.miranda-ng.org/main/trunk@763 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- include/delphi/m_protosvc.inc | 1639 +++++++++++++++++++++++------------------ 1 file changed, 930 insertions(+), 709 deletions(-) (limited to 'include/delphi/m_protosvc.inc') diff --git a/include/delphi/m_protosvc.inc b/include/delphi/m_protosvc.inc index e546d5775b..2076dbc8bc 100644 --- a/include/delphi/m_protosvc.inc +++ b/include/delphi/m_protosvc.inc @@ -1,8 +1,7 @@ -(* - +{ Miranda IM: the free IM client for Microsoft* Windows* -Copyright 2000-2003 Miranda ICQ/IM project, +Copyright 2000-2009 Miranda ICQ/IM project, all portions of this codebase are copyrighted to the people listed in contributors.txt. @@ -19,12 +18,30 @@ 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 M_PROTOSVC} {$DEFINE M_PROTOSVC} +{ ***** Unicode Services note ******** +****************************************** + +Only new style protocols (Miranda 0.9+) with m_iVersion set to 2 or higher +support Unicode services documented below, all other support only ANSI. + +For all other that do not support Unicode services, Miranda core will +convert Unicode to ANSI and call the appropriate service. +} + +type +// PFNAMECHAR = ^FNAMECHAR; +//#if MIRANDA_VER >= 0x0900 + FNAMECHAR = TCHAR; +//#else +// FNAMECHAR = AnsiChar; +//#endif + TFNAMECHAR = FNAMECHAR; + {<>} const + PFLAGNUM_1 = $1; + PF1_IMSEND = $00000001; // supports IM sending + PF1_IMRECV = $00000002; // supports IM receiving + PF1_IM = (PF1_IMSEND or PF1_IMRECV); + PF1_URLSEND = $00000004; // supports separate URL sending + PF1_URLRECV = $00000008; // supports separate URL receiving + PF1_URL = (PF1_URLSEND or PF1_URLRECV); + PF1_FILESEND = $00000010; // supports file sending + PF1_FILERECV = $00000020; // supports file receiving + PF1_FILE = (PF1_FILESEND or PF1_FILERECV); + PF1_MODEMSGSEND = $00000040; // supports broadcasting away messages + PF1_MODEMSGRECV = $00000080; // supports reading others' away messages + PF1_MODEMSG = (PF1_MODEMSGSEND or PF1_MODEMSGRECV); + PF1_SERVERCLIST = $00000100; // contact lists are stored on the server, not locally. See notes below + PF1_AUTHREQ = $00000200; // will get authorisation requests for some or all contacts + PF1_ADDED = $00000400; // will get 'you were added' notifications + PF1_VISLIST = $00000800; // has an invisible list + PF1_INVISLIST = $00001000; // has a visible list for when in invisible mode + PF1_INDIVSTATUS = $00002000; // supports setting different status modes to each contact + PF1_EXTENSIBLE = $00004000; // the protocol is extensible and supports plugin-defined messages + PF1_PEER2PEER = $00008000; // supports direct (not server mediated) communication between clients + PF1_NEWUSER = $00010000; // supports creation of new user IDs + PF1_CHAT = $00020000; // has a realtime chat capability + PF1_INDIVMODEMSG = $00040000; // supports replying to a mode message request with different text depending on the contact requesting + PF1_BASICSEARCH = $00080000; // supports a basic user searching facility + PF1_EXTSEARCH = $00100000; // supports one or more protocol-specific extended search schemes + PF1_CANRENAMEFILE = $00200000; // supports renaming of incoming files as they are transferred + PF1_FILERESUME = $00400000; // can resume broken file transfers, see PS_FILERESUME below + PF1_ADDSEARCHRES = $00800000; // can add search results to the contact list + PF1_CONTACTSEND = $01000000; // can send contacts to other users + PF1_CONTACTRECV = $02000000; // can receive contacts from other users + PF1_CONTACT = (PF1_CONTACTSEND or PF1_CONTACTRECV); + PF1_CHANGEINFO = $04000000; // can change our user information stored on server + PF1_SEARCHBYEMAIL = $08000000; // supports a search by e-mail feature + PF1_USERIDISEMAIL = $10000000; // set if the uniquely identifying field of the network is the e-mail address + PF1_SEARCHBYNAME = $20000000; // supports searching by nick/first/last names + PF1_EXTSEARCHUI = $40000000; // has a dialog box to allow searching all the possible fields + PF1_NUMERICUSERID = $80000000; // the unique user IDs for this protocol are numeric + + PFLAGNUM_2 = 2; // the status modes that the protocol supports + PF2_ONLINE = $00000001; // an unadorned online mode + PF2_INVISIBLE = $00000002; + PF2_SHORTAWAY = $00000004; // Away on ICQ, BRB on MSN + PF2_LONGAWAY = $00000008; // NA on ICQ, Away on MSN + PF2_LIGHTDND = $00000010; // Occupied on ICQ, Busy on MSN + PF2_HEAVYDND = $00000020; // DND on ICQ + PF2_FREECHAT = $00000040; + PF2_OUTTOLUNCH = $00000080; + PF2_ONTHEPHONE = $00000100; + PF2_IDLE = $00000200; //added during 0.3.4 (2004/09/13) + + PFLAGNUM_3 = 3; //the status modes that the protocol supports + //away-style messages for. Uses the PF2_ flags. + + PFLAGNUM_4 = 4; // v0.3+: flag asking a protocol plugin how auths are handled + PF4_FORCEAUTH = $00000001; // protocol has to send auth's for things to work + PF4_FORCEADDED = $00000002; // protocol has to tell people that they were added (otherwise things don't work) + PF4_NOCUSTOMAUTH = $00000004; // protocol can't send a custom message while asking others for auth + PF4_SUPPORTTYPING = $00000008; // protocol supports user is typing messages v0.3.3+ + PF4_SUPPORTIDLE = $00000010; // protocol understands idle, added during v0.3.4+ (2004/09/13) + PF4_AVATARS = $00000020; // protocol has avatar support, added during v0.3.4 (2004/09/13) + PF4_OFFLINEFILES = $00000040; // protocols supports sending files to offline users (v0.5.2) + PF4_IMSENDUTF = $00000080; // protocol is able to process messages in utf-8 (v.0.7.0+) + PF4_IMSENDOFFLINE = $00000100; // protocol supports sending offline messages (v0.8.0+) + PF4_INFOSETTINGSVC = $00000200; // protocol supports user info translation services (v0.8.0+) + PF4_NOAUTHDENYREASON = $00000400; // protocol doesn't support authorization deny reason (v0.9.0+) + + PFLAG_UNIQUEIDTEXT = 100; // returns a static buffer of text describing the unique field by which this protocol identifies users (already translated), or NULL + PFLAG_MAXCONTACTSPERPACKET = 200; // v0.1.2.2+: returns the maximum number of contacts which can be sent in a single PSS_CONTACTS. lParam=(LPARAM)hContact. + PFLAG_UNIQUEIDSETTING = 300; // v0.3+: returns the DB setting name (e.g. szProto=ICQ, szSetting=UIN) that has the ID which makes this user unique on that system (0.3a ONLY), the string is statically allocated so no need to free() + PFLAG_MAXLENOFMESSAGE = 400; // v0.3.2+: return the maximum length of an instant message, lParam=(LPARAM)hContact + { + A protocol might not support this cap, it allows a protocol to say that PFLAGNUM_2 is for + statuses contacts supports, and that PFLAGNUM_5 is for statuses a protocol can SET TO ITSELF, + if this is not replied to, then PFLAGNUM_2 is alone in telling you which statuses a protocol + can set to and what statuses a contact can set to as well. + + E.g. A protocol might report 'wireless' users but a login of the protocol from Miranda can + not set itself to 'wireless' so PFLAGNUM_2 would return PF2_ONTHEPHONE and PFLAGNUM_5 would + return PF2_ONTHEPHONE as well, this means "I will get contacts who are on the phone but you can + not set on the phone" and so on. + + Do note that the reply here is a NEGATION of bitflags reported for PFLAGNUM_2, e.g. returning + PF2_ONTHEPHONE for PFLAGNUM_2 and returning the same for PFLAGNUM_5 says that you DO NOT SUPPORT + PF2_ONTHEPHONE for the user to PS_SETSTATUS to, but you will expect other contacts to have + that status, e.g. you can get onthephone for users but can't go online with onthephone. + + The same PF2_ status flags are used in the reply. + + Added during 0.3.4 (2004/09/14) + } + + PFLAGNUM_5 = 5; + + // for PS_SETSTATUS + + LOGINERR_WRONGPASSWORD = 1; + LOGINERR_NONETWORK = 2; + LOGINERR_PROXYFAILURE = 3; + LOGINERR_BADUSERID = 4; + LOGINERR_NOSERVER = 5; + LOGINERR_TIMEOUT = 6; + LOGINERR_WRONGPROTOCOL = 7; + LOGINERR_OTHERLOCATION = 8; + + // flag for PS_ADDTOLIST + + PALF_TEMPORARY = 1; // add the contact temporarily and invisibly, just to get user info or something + + // flags for PS_GETINFO + + SGIF_MINIMAL = 1; // get only the most basic information. This should + // contain at least a Nick and e-mail. + SGIF_ONOPEN = 2; // set when the User Info form is being opened + + // for PSR_MESSAGE + + PREF_CREATEREAD = 1; // create the database event with the 'read' flag set + PREF_UNICODE = 2; + PREF_RTL = 4; // 0.5+ addition: support for right-to-left messages + PREF_UTF = 8; // message is in utf-8 (0.7.0+) + + // for PS_FILERESUME + + FILERESUME_OVERWRITE = 1; + FILERESUME_RESUME = 2; + FILERESUME_RENAME = 3; + FILERESUME_SKIP = 4; - PFLAGNUM_1 = $1; - PF1_IMSEND = $00000001; // supports IM sending - PF1_IMRECV = $00000002; // supports IM receiving - PF1_IM = (PF1_IMSEND or PF1_IMRECV); - PF1_URLSEND = $00000004; // supports separate URL sending - PF1_URLRECV = $00000008; // supports separate URL receiving - PF1_URL = (PF1_URLSEND or PF1_URLRECV); - PF1_FILESEND = $00000010; // supports file sending - PF1_FILERECV = $00000020; // supports file receiving - PF1_FILE = (PF1_FILESEND or PF1_FILERECV); - PF1_MODEMSGSEND = $00000040; // supports broadcasting away messages - PF1_MODEMSGRECV = $00000080; // supports reading others' away messages - PF1_MODEMSG = (PF1_MODEMSGSEND or PF1_MODEMSGRECV); - PF1_SERVERCLIST = $00000100; // contact lists are stored on the server, not locally. See notes below - PF1_AUTHREQ = $00000200; // will get authorisation requests for some or all contacts - PF1_ADDED = $00000400; // will get 'you were added' notifications - PF1_VISLIST = $00000800; // has an invisible list - PF1_INVISLIST = $00001000; // has a visible list for when in invisible mode - PF1_INDIVSTATUS = $00002000; // supports setting different status modes to each contact - PF1_EXTENSIBLE = $00004000; // the protocol is extensible and supports plugin-defined messages - PF1_PEER2PEER = $00008000; // supports direct (not server mediated) communication between clients - PF1_NEWUSER = $00010000; // supports creation of new user IDs - PF1_CHAT = $00020000; // has a realtime chat capability - PF1_INDIVMODEMSG = $00040000; // supports replying to a mode message request with different text depending on the contact requesting - PF1_BASICSEARCH = $00080000; // supports a basic user searching facility - PF1_EXTSEARCH = $00100000; // supports one or more protocol-specific extended search schemes - PF1_CANRENAMEFILE = $00200000; // supports renaming of incoming files as they are transferred - PF1_FILERESUME = $00400000; // can resume broken file transfers, see PS_FILERESUME below - PF1_ADDSEARCHRES = $00800000; // can add search results to the contact list - PF1_CONTACTSEND = $01000000; // can send contacts to other users - PF1_CONTACTRECV = $02000000; // can receive contacts from other users - PF1_CONTACT = (PF1_CONTACTSEND or PF1_CONTACTRECV); - PF1_CHANGEINFO = $04000000; // can change our user information stored on server - PF1_SEARCHBYEMAIL = $08000000; // supports a search by e-mail feature - PF1_USERIDISEMAIL = $10000000; // set if the uniquely identifying field of the network is the e-mail address - PF1_SEARCHBYNAME = $20000000; // supports searching by nick/first/last names - PF1_EXTSEARCHUI = $40000000; // has a dialog box to allow searching all the possible fields - PF1_NUMERICUSERID = $80000000; // the unique user IDs for this protocol are numeric - - PFLAGNUM_2 = 2; // the status modes that the protocol supports - PF2_ONLINE = $00000001; // an unadorned online mode - PF2_INVISIBLE = $00000002; - PF2_SHORTAWAY = $00000004; // Away on ICQ, BRB on MSN - PF2_LONGAWAY = $00000008; // NA on ICQ, Away on MSN - PF2_LIGHTDND = $00000010; // Occupied on ICQ, Busy on MSN - PF2_HEAVYDND = $00000020; // DND on ICQ - PF2_FREECHAT = $00000040; - PF2_OUTTOLUNCH = $00000080; - PF2_ONTHEPHONE = $00000100; - - PFLAGNUM_3 = 3; //the status modes that the protocol supports - //away-style messages for. Uses the PF2_ flags. - PFLAG_UNIQUEIDTEXT = 100; //returns a static buffer of text describing the unique field by which this protocol identifies users (already translated), or NULL - - PFLAG_MAXCONTACTSPERPACKET = 200; //v0.1.2.2+: returns the maximum number of contacts which can be sent in a single PSS_CONTACTS. - - PFLAGNUM_4 = 4; // v0.3+: flag asking a protocol plugin how auths are handled - PF4_FORCEAUTH = $00000001; // protocol has to send auth's for things to work - PF4_FORCEADDED = $00000002; // protocol has to tell people that they were added (otherwise things don't work) - PF4_NOCUSTOMAUTH = $00000004; // protocol can't send a custom message while asking others for auth - PF4_SUPPORTTYPING = $00000008; // protocol supports user is typing messages v0.3.3+ - PF4_SUPPORTIDLE = $00000010; // protocol understands idle, added during v0.3.4+ (2004/09/13) - PF4_AVATARS = $00000020; // protocol has avatar support, added during v0.3.4 (2004/09/13) - PF4_OFFLINEFILES = $00000040; // protocols supports sending files to offline users (v0.5.2) - PF4_IMSENDUTF = $00000080; // protocol is able to process messages in utf-8 (v.0.7.0+) - PF4_IMSENDOFFLINE = $00000100; // protocol supports sending offline messages (v0.8.0+) - PF4_INFOSETTINGSVC = $00000200; // protocol supports user info translation services (v0.8.0+) - - PFLAG_UNIQUEIDSETTING = 300; // v0.3+: returns the DB setting name (e.g. szProto=ICQ, szSetting=UIN) that has the ID which makes this user unique on that system (0.3a ONLY), the string is statically allocated so no need to free() - - // for PS_SETSTATUS - - LOGINERR_WRONGPASSWORD = 1; - LOGINERR_NONETWORK = 2; - LOGINERR_PROXYFAILURE = 3; - LOGINERR_BADUSERID = 4; - LOGINERR_NOSERVER = 5; - LOGINERR_TIMEOUT = 6; - LOGINERR_WRONGPROTOCOL = 7; - - // flag for PS_ADDTOLIST - - PALF_TEMPORARY = 1; // add the contact temporarily and invisibly, just to get user info or something - - // flags for PS_GETINFO - - SGIF_MINIMAL = 1; // get only the most basic information. This should - // contain at least a Nick and e-mail. - - // for PSR_MESSAGE - - PREF_CREATEREAD = 1; // create the database event with the 'read' flag set - - // for PS_FILERESUME - - FILERESUME_OVERWRITE= 1; - FILERESUME_RESUME = 2; - FILERESUME_RENAME = 3; - FILERESUME_SKIP = 4; +const + PSR_UNICODE = 1; type + PPROTOSEARCHRESULT = ^TPROTOSEARCHRESULT; + TPROTOSEARCHRESULT = record + cbSize : int; + nick : TFNAMECHAR; + firstName: TFNAMECHAR; + lastName : TFNAMECHAR; + email : TFNAMECHAR; + id : TFNAMECHAR; + flags : int; + reserved : array [0..(8*SizeOf(THANDLE) div SizeOf(dword))-1] of Byte; + // Protocols may extend this structure with extra members at will and supply + // a larger cbSize to reflect the new information, but they must not change + // any elements above this comment + // The 'reserved' field is part of the basic structure, not space to + // overwrite with protocol-specific information. + // If modules do this, they should take steps to ensure that information + // they put there will be retained by anyone trying to save this structure. + end; + + PPROTOSEARCHBYNAME = ^TPROTOSEARCHBYNAME; + TPROTOSEARCHBYNAME = record + pszNick : TChar; + pszFirstName: TChar; + pszLastName : TChar; + end; + + PPROTORECVEVENT = ^TPROTORECVEVENT; + TPROTORECVEVENT = record + flags : DWORD; + timestamp: DWORD; + szMessage: TChar; + lParam : LPARAM; + end; + + PPROTORECVFILE = ^TPROTORECVFILE; + TPROTORECVFILE = record + flags : DWORD; + timestamp : DWORD; // unix time + szDescription: PAnsiChar; + pFiles : ^PAnsiChar; // pointer to an array of PAnsiChar's + lParam : LPARAM; + end; + + //File(s) have been received (0.9.x) + PPROTORECVFILET = ^TPROTORECVFILET; + TPROTORECVFILET = record + flags : DWORD; + timestamp : DWORD; // unix time + szDescription: TChar; + FileCount : int; + pFiles : ^TChar; // pointer to an array of PAnsiChar's + lParam : LPARAM; + end; + + PPROTOFILERESUME = ^TPROTOFILERESUME; + TPROTOFILERESUME = record + action : int; // FILERESUME_* flag + szFilename: TFNAMECHAR; // full path, only valid if action=FILERESUME_RENAME + end; - PPROTOSEARCHRESULT = ^TPROTOSEARCHRESULT; - TPROTOSEARCHRESULT = record - cbSize: int; - nick: PChar; - firstName: PChar; - lastName: PChar; - email: PChar; - reserved: array [0..15] of Byte; - // Protocols may extend this structure with extra members at will and supply - // a larger cbSize to reflect the new information, but they must not change - // any elements above this comment - // The 'reserved' field is part of the basic structure, not space to - // overwrite with protocol-specific information. - // If modules do this, they should take steps to ensure that information - // they put there will be retained by anyone trying to save this structure. - end; - - PPROTOSEARCHBYNAME = ^TPROTOSEARCHBYNAME; - TPROTOSEARCHBYNAME = record - pszNick: PChar; - pszFirstName: PChar; - pszLastName: PChar; - end; - - PPROTORECVEVENT = ^TPROTORECVEVENT; - TPROTORECVEVENT = record - flags: DWORD; - timestamp: DWORD; - szMessage: PChar; - lParam: LPARAM; - end; - - PPROTORECVFILE = ^TPROTORECVFILE; - TPROTORECVFILE = record - flags: DWORD; - timestamp: DWORD; // unix time - szDescription: PChar; - pFiles: PChar; // pointer to an array of pchar's - lParam: LPARAM; - end; - - PPROTOFILERESUME = ^TPROTOFILERESUME; - TPROTOFILERESUME = record - action: int; // FILERESUME_* flag - szFilename: PChar; // full path, only valid if action=FILERESUME_RENAME - end; +const + { + wParam : PFLAGNUM_* (see above) + lParam : 0 + Affects: Returns a bitfield for settings corresponding to flag number, see notes + Returns: a bitfield of supported features -- or 0 if flag_num is not supported + Notes : this checks what sort of things are actively supported by a protocol + module + } + PS_GETCAPS = '/GetCaps'; + + { + wParam : cchName + lParam : Pointer to a buffer to fill with human-readable name + Affect : Get a human-readable name for the protocol, see notes + Result : 0 on success, [non zero] on failure + Notes : Should be translated before being returned, cchName + has the size of the buffer, example strings: "ICQ", "AIM" + } + PS_GETNAME = '/GetName'; + + { + wParam : whichIcon + lParam : 0 + Affect : Loads one of the protocol-sspecific icons + Returns: the HICON or NULL on failure, the returned icon + must be DestroyIcon()ed, the UI should overlay + the online icon with further UI-specified icon to + repressent the exact status mode. + } + PLI_PROTOCOL = $1; // An icon representing the protocol (eg the multicoloured flower for ICQ) + PLI_ONLINE = $2; // Online state icon for that protocol (eg green flower for ICQ) + PLI_OFFLINE = $3; // Offline state icon for that protocol (eg red flower for ICQ) + + PLIF_LARGE = $0; // Or with one of the above to get the large (32x32 by default) icon + PLIF_SMALL = $10000; // Or with one of the above to get the small (16x16 by default) icon + PLIF_ICOLIB = $20000; // the returned HICON is managed by IcoLib, DO NOT DestroyIcon() it + PLIF_ICOLIBHANDLE = $40000; // the function will return IcoLib handle not HICON + + PS_LOADICON = '/LoadIcon'; + + { + wParam : status_mode + lParam : Pointer to a null terminated string containing message + Affect : Sets the status mode specific message for the user, see notes + Returns: 0 on success, [non zero] on failure + Notes : This service is not available unless PF1_MODEMSGSEND is set, + and PF1_INDIVMODEMSG is *not* set. + If PF1_INDIVMODEMSG is set, then see PSS_AWAYMSSG for details + of operations of away messages. + - + Protocol modules smust support lParam=NULL, it may eithere mean + to use an empty message or (preferably) not to reply at all to + any requests. + } + PS_SETAWAYMSG = '/SetAwayMsg'; + PS_SETAWAYMSGW = '/SetAwayMsgW'; + + { + wParam : newMode from statusmodes.inc + lParam : 0 + Affect : Change the protocol's status mode, see notes + Returns: 0 on success, [non zero] on failure + Notes : Will send an ack with : + type=ACKTYPE_SUCCESS, result=ACKRESULT_SUCCESS, hProcess=previousMode, lParam=newMode + - + when the change completes. This ack is sent for all changes, not + just ones caused by calling this function. + - + NewMode can be ID_STATUS_CONNECTING<=newMode