From 0a1ec91589a265b41210068b8d21fa469e750a08 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 14 Aug 2014 12:12:35 +0000 Subject: account creation code extracted to the separate service function, MS_PROTO_CREATEACCOUNT git-svn-id: http://svn.miranda-ng.org/main/trunk@10181 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- include/m_protocols.h | 265 +++++++++++++++++++++++++++----------------------- 1 file changed, 141 insertions(+), 124 deletions(-) (limited to 'include/m_protocols.h') diff --git a/include/m_protocols.h b/include/m_protocols.h index 54533cee57..fc21f8d9a4 100644 --- a/include/m_protocols.h +++ b/include/m_protocols.h @@ -2,7 +2,7 @@ Miranda NG: the free IM client for Microsoft* Windows* -Copyright (c) 2012-14 Miranda NG project (http://miranda-ng.org) +Copyright (c) 2012-14 Miranda NG project (http:// miranda-ng.org) Copyright (c) 2000-08 Miranda ICQ/IM project, all portions of this codebase are copyrighted to the people listed in contributors.txt. @@ -22,7 +22,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -//this module was created in v0.1.1.0 +// this module was created in v0.1.1.0 #ifndef M_PROTOCOLS_H__ #define M_PROTOCOLS_H__ 1 @@ -31,34 +31,34 @@ struct PROTO_INTERFACE; #include "statusmodes.h" -//send a general request through the protocol chain for a contact -//wParam = 0 -//lParam = (LPARAM)(CCSDATA*)&ccs -//returns the value as documented in the PS_ definition (m_protosvc.h) +// send a general request through the protocol chain for a contact +// wParam = 0 +// lParam = (LPARAM)(CCSDATA*)&ccs +// returns the value as documented in the PS_ definition (m_protosvc.h) typedef struct { MCONTACT hContact; - const char *szProtoService; //a PS_ constant + const char *szProtoService; // a PS_ constant WPARAM wParam; LPARAM lParam; } CCSDATA; #define MS_PROTO_CALLCONTACTSERVICE "Proto/CallContactService" -//a general network 'ack' -//wParam = 0 -//lParam = (LPARAM)(ACKDATA*)&ack -//Note that just because definitions are here doesn't mean they will be sent. -//Read the documentation for the function you are calling to see what replies -//you will receive. +// a general network 'ack' +// wParam = 0 +// lParam = (LPARAM)(ACKDATA*)&ack +// Note that just because definitions are here doesn't mean they will be sent. +// Read the documentation for the function you are calling to see what replies +// you will receive. typedef struct { int cbSize; - const char *szModule; //the name of the protocol module which initiated this ack + const char *szModule; // the name of the protocol module which initiated this ack MCONTACT hContact; - int type; //an ACKTYPE_ constant - int result; //an ACKRESULT_ constant - HANDLE hProcess; //a caller-defined process code - LPARAM lParam; //caller-defined extra info + int type; // an ACKTYPE_ constant + int result; // an ACKRESULT_ constant + HANDLE hProcess; // a caller-defined process code + LPARAM lParam; // caller-defined extra info } ACKDATA; #define ACKTYPE_MESSAGE 0 #define ACKTYPE_URL 1 @@ -73,26 +73,26 @@ typedef struct { #define ACKTYPE_SEARCH 10 #define ACKTYPE_NEWUSER 11 #define ACKTYPE_STATUS 12 -#define ACKTYPE_CONTACTS 13 //send/recv of contacts -#define ACKTYPE_AVATAR 14 //send/recv of avatars from a protocol -#define ACKTYPE_EMAIL 15 //notify if the unread emails changed +#define ACKTYPE_CONTACTS 13 // send/recv of contacts +#define ACKTYPE_AVATAR 14 // send/recv of avatars from a protocol +#define ACKTYPE_EMAIL 15 // notify if the unread emails changed #define ACKRESULT_SUCCESS 0 #define ACKRESULT_FAILED 1 -//'in progress' result codes: +// 'in progress' result codes: #define ACKRESULT_CONNECTING 100 #define ACKRESULT_CONNECTED 101 #define ACKRESULT_INITIALISING 102 -#define ACKRESULT_SENTREQUEST 103 //waiting for reply... -#define ACKRESULT_DATA 104 //blob of file data sent/recved, or search result -#define ACKRESULT_NEXTFILE 105 //file transfer went to next file -#define ACKRESULT_FILERESUME 106 //a file is about to be received, see PS_FILERESUME -#define ACKRESULT_DENIED 107 //a file send has been denied -#define ACKRESULT_STATUS 108 //an ack or a series of acks to do with a task have a status change -#define ACKRESULT_LISTENING 109 //waiting for connection -#define ACKRESULT_CONNECTPROXY 110 //connecting to file proxy -#define ACKRESULT_SEARCHRESULT 111 //result of extended search +#define ACKRESULT_SENTREQUEST 103 // waiting for reply... +#define ACKRESULT_DATA 104 // blob of file data sent/recved, or search result +#define ACKRESULT_NEXTFILE 105 // file transfer went to next file +#define ACKRESULT_FILERESUME 106 // a file is about to be received, see PS_FILERESUME +#define ACKRESULT_DENIED 107 // a file send has been denied +#define ACKRESULT_STATUS 108 // an ack or a series of acks to do with a task have a status change +#define ACKRESULT_LISTENING 109 // waiting for connection +#define ACKRESULT_CONNECTPROXY 110 // connecting to file proxy +#define ACKRESULT_SEARCHRESULT 111 // result of extended search #define ME_PROTO_ACK "Proto/Ack" @@ -101,8 +101,8 @@ typedef struct { // long to be delivered". If no error message is specified, lParam must be NULL. // Right now only explanations from ACKTYPE_MESSAGE is shown. -//when type == ACKTYPE_FILE && (result == ACKRESULT_DATA || result == ACKRESULT_FILERESUME), -//lParam points to this +// when type == ACKTYPE_FILE && (result == ACKRESULT_DATA || result == ACKRESULT_FILERESUME), +// lParam points to this #define FNAMECHAR TCHAR @@ -148,30 +148,30 @@ typedef struct tagPROTOFILETRANSFERSTATUS unsigned __int64 currentFileSize; unsigned __int64 currentFileProgress; - unsigned __int64 currentFileTime; //as seconds since 1970 + unsigned __int64 currentFileTime; // as seconds since 1970 } PROTOFILETRANSFERSTATUS; -//Enumerate the currently running protocols -//wParam = (WPARAM)(int*)&numberOfProtocols -//lParam = (LPARAM)(PROTOCOLDESCRIPTOR***)&ppProtocolDescriptors -//Returns 0 on success, nonzero on failure -//Neither wParam nor lParam may be NULL -//The list returned by this service is the protocol modules currently installed -//and running. It is not the complete list of all protocols that have ever been -//installed. -//IMPORTANT NOTE #1: the list returned is not static, it may be changed in the -//program's lifetime. Do not use this list in the global context, copy protocols -//names otherwise. -//IMPORTANT NOTE #2: in version 0.8 this service is mapped to the MS_PROTO_ENUMACCOUNTS -//service to provide the compatibility with old plugins (first three members of -//PROTOACCOUNT are equal to the old PROTOCOLDESCRIPTOR format). If you declare the -//MIRANDA_VER macro with value greater or equal to 0x800, use MS_PROTO_ENUMPROTOS -//service instead to obtain the list of running protocols instead of accounts. -//Note that a protocol module need not be an interface to an Internet server, -//they can be encryption and loads of other things, too. -//And yes, before you ask, that is triple indirection. Deal with it. -//Access members using ppProtocolDescriptors[index]->element +// Enumerate the currently running protocols +// wParam = (WPARAM)(int*)&numberOfProtocols +// lParam = (LPARAM)(PROTOCOLDESCRIPTOR***)&ppProtocolDescriptors +// Returns 0 on success, nonzero on failure +// Neither wParam nor lParam may be NULL +// The list returned by this service is the protocol modules currently installed +// and running. It is not the complete list of all protocols that have ever been +// installed. +// IMPORTANT NOTE #1: the list returned is not static, it may be changed in the +// program's lifetime. Do not use this list in the global context, copy protocols +// names otherwise. +// IMPORTANT NOTE #2: in version 0.8 this service is mapped to the MS_PROTO_ENUMACCOUNTS +// service to provide the compatibility with old plugins (first three members of +// PROTOACCOUNT are equal to the old PROTOCOLDESCRIPTOR format). If you declare the +// MIRANDA_VER macro with value greater or equal to 0x800, use MS_PROTO_ENUMPROTOS +// service instead to obtain the list of running protocols instead of accounts. +// Note that a protocol module need not be an interface to an Internet server, +// they can be encryption and loads of other things, too. +// And yes, before you ask, that is triple indirection. Deal with it. +// Access members using ppProtocolDescriptors[index]->element #define PROTOCOLDESCRIPTOR_V3_SIZE (sizeof(size_t)+sizeof(INT_PTR)+sizeof(char*)) @@ -197,12 +197,12 @@ typedef struct { PROTOCOLDESCRIPTOR; // v0.3.3+: -// +// // For recv, it will go from lower to higher, so in this case: // check ignore, decrypt (encryption), translate -// +// // For send, it will go translate, encrypt, ignore(??), send -// +// // The DB will store higher numbers here, LOWER in the protocol chain, and lower numbers // here HIGHER in the protocol chain @@ -216,61 +216,61 @@ typedef struct { #define MS_PROTO_ENUMPROTOS "Proto/EnumProtos" -//determines if a protocol module is loaded or not -//wParam = 0 -//lParam = (LPARAM)(const char*)szName -//Returns a pointer to the PROTOACCOUNT if the protocol is loaded, or -//NULL if it isn't. +// determines if a protocol module is loaded or not +// wParam = 0 +// lParam = (LPARAM)(const char*)szName +// Returns a pointer to the PROTOACCOUNT if the protocol is loaded, or +// NULL if it isn't. #define MS_PROTO_ISPROTOCOLLOADED "Proto/IsProtocolLoaded" -//gets the network-level protocol associated with a contact -//wParam = (MCONTACT)hContact -//lParam = 0 -//Returns a char* pointing to the asciiz name of the protocol or NULL if the -//contact has no protocol. There is no need to free() it or anything. -//This is the name of the module that actually accesses the network for that -//contact. +// gets the network-level protocol associated with a contact +// wParam = (MCONTACT)hContact +// lParam = 0 +// Returns a char* pointing to the asciiz name of the protocol or NULL if the +// contact has no protocol. There is no need to free() it or anything. +// This is the name of the module that actually accesses the network for that +// contact. #define MS_PROTO_GETCONTACTBASEPROTO "Proto/GetContactBaseProto" __forceinline char* GetContactProto(MCONTACT hContact) { return (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, hContact, 0); } -//determines whether the specified contact has the given protocol in its chain -//wParam = (MCONTACT)hContact -//lParam = (LPARAM)(const char*)szName -//Returns -1 if it is base protocol, positive number if it is filter and 0 if it doesn't +// determines whether the specified contact has the given protocol in its chain +// wParam = (MCONTACT)hContact +// lParam = (LPARAM)(const char*)szName +// Returns -1 if it is base protocol, positive number if it is filter and 0 if it doesn't #define MS_PROTO_ISPROTOONCONTACT "Proto/IsProtoOnContact" #define PROTOTYPE_SELFTYPING_OFF 0 #define PROTOTYPE_SELFTYPING_ON 1 -//This service is for notifying protocols that the user is typing a message v0.3.3+ -//in a message dialog. -//This is typically sent by a message dialog when a user in the clist is typing. -//wParam = (MCONTACT)hContact -//lParam = (LPARAM)(int)typing state -//NOTE: Only protocols should generally call this service +// This service is for notifying protocols that the user is typing a message v0.3.3+ +// in a message dialog. +// This is typically sent by a message dialog when a user in the clist is typing. +// wParam = (MCONTACT)hContact +// lParam = (LPARAM)(int)typing state +// NOTE: Only protocols should generally call this service #define MS_PROTO_SELFISTYPING "Proto/SelfIsTyping" #define PROTOTYPE_CONTACTTYPING_OFF 0 #define PROTOTYPE_CONTACTTYPING_INFINITE 2147483647 -//This service is for notifying message dialogs/other plugins of a user typing. v0.3.3+ -//This is typically sent by a protocol when a user in the clist is typing. -//wParam = (MCONTACT)hContact -//lParam = (LPARAM)(int)time (secs) -//NOTE: The time in seconds is used to tell a message dialog (or other plugin) -//how long to display its notification. If time is 0, then notification -//of typing ends. -//NOTE: Only protocols should generally call this service +// This service is for notifying message dialogs/other plugins of a user typing. v0.3.3+ +// This is typically sent by a protocol when a user in the clist is typing. +// wParam = (MCONTACT)hContact +// lParam = (LPARAM)(int)time (secs) +// NOTE: The time in seconds is used to tell a message dialog (or other plugin) +// how long to display its notification. If time is 0, then notification +// of typing ends. +// NOTE: Only protocols should generally call this service #define MS_PROTO_CONTACTISTYPING "Proto/ContactIsTyping" -//This hook notifies when a user is typing. If a message dialog supports sending v0.3.3+ -//typing notifications it should hook this event and fire the -//ProtoService PSS_USERISTYPING to the contacts protocol *after* verifying -//that the hContact is not NULL and the the user wishes to send notifications -//to this user (checked visibility, individual typing blocking, etc). -//wParam = (MCONTACT)hContact -//lParam = (LPARAM)(int)typing state +// This hook notifies when a user is typing. If a message dialog supports sending v0.3.3+ +// typing notifications it should hook this event and fire the +// ProtoService PSS_USERISTYPING to the contacts protocol *after* verifying +// that the hContact is not NULL and the the user wishes to send notifications +// to this user (checked visibility, individual typing blocking, etc). +// wParam = (MCONTACT)hContact +// lParam = (LPARAM)(int)typing state #define ME_PROTO_CONTACTISTYPING "Proto/ContactIsTypingEvent" // -------------- accounts support --------------------- 0.8.0+ @@ -295,28 +295,46 @@ typedef struct tagACCOUNT } PROTOACCOUNT; -//account enumeration service -//wParam = (WPARAM)(int*)piNumAccounts -//lParam = (LPARAM)(PROTOACCOUNT**)paAccounts +// account enumeration service +// wParam = (WPARAM)(int*)piNumAccounts +// lParam = (LPARAM)(PROTOACCOUNT**)paAccounts #define MS_PROTO_ENUMACCOUNTS "Proto/EnumAccounts" __forceinline INT_PTR ProtoEnumAccounts(int* accNumber, PROTOACCOUNT*** accArray) { return CallService(MS_PROTO_ENUMACCOUNTS, (WPARAM)accNumber, (LPARAM)accArray); } -//retrieves an account's interface by its physical name (database module) -//wParam = 0 -//lParam = (LPARAM)(char*)szAccountName -//return value = PROTOACCOUNT* or NULL +// creates new account +// wParam = 0 +// lParam = (LPARAM)(ACC_CREATE*) account definition +// return value = PROTOACCOUNT* or NULL +#define MS_PROTO_CREATEACCOUNT "Proto/CreateAccount" + +typedef struct tagACC_CREATE +{ + const char *pszBaseProto; + const char *pszInternal; + const TCHAR *ptszAccountName; +} ACC_CREATE; + +__forceinline PROTOACCOUNT* ProtoCreateAccount(ACC_CREATE *pAccountDef) +{ return (PROTOACCOUNT*)CallService(MS_PROTO_CREATEACCOUNT, 0, (LPARAM)pAccountDef); +} + +// retrieves an account's interface by its physical name (database module) +// wParam = 0 +// lParam = (LPARAM)(char*)szAccountName +// return value = PROTOACCOUNT* or NULL #define MS_PROTO_GETACCOUNT "Proto/GetAccount" __forceinline PROTOACCOUNT* ProtoGetAccount(const char* accName) -{ return (PROTOACCOUNT*)CallService(MS_PROTO_GETACCOUNT, 0, (LPARAM)accName); +{ + return (PROTOACCOUNT*)CallService(MS_PROTO_GETACCOUNT, 0, (LPARAM)accName); } -//this event is fired when the accounts list gets changed -//wParam = event type (1 - added, 2 - changed, 3 - deleted, 4 - upgraded, 5 - enabled/disabled) -//lParam = (LPARAM)(PROTOACCOUNT*) - account being changed +// this event is fired when the accounts list gets changed +// wParam = event type (1 - added, 2 - changed, 3 - deleted, 4 - upgraded, 5 - enabled/disabled) +// lParam = (LPARAM)(PROTOACCOUNT*) - account being changed #define PRAC_ADDED 1 #define PRAC_CHANGED 2 @@ -324,18 +342,17 @@ __forceinline PROTOACCOUNT* ProtoGetAccount(const char* accName) #define PRAC_UPGRADED 4 #define PRAC_CHECKED 5 - #define ME_PROTO_ACCLISTCHANGED "Proto/AccListChanged" -//displays the Account Manager -//wParam = 0 -//lParam = 0 +// displays the Account Manager +// wParam = 0 +// lParam = 0 #define MS_PROTO_SHOWACCMGR "Protos/ShowAccountManager" -//determines if an account is enabled or not -//wParam = 0 -//lParam = (LPARAM)(PROTOACCOUNT*) -//Returns 1 if an account is valid and enabled, 0 otherwise +// determines if an account is enabled or not +// wParam = 0 +// lParam = (LPARAM)(PROTOACCOUNT*) +// Returns 1 if an account is valid and enabled, 0 otherwise #define MS_PROTO_ISACCOUNTENABLED "Proto/IsAccountEnabled" __forceinline int IsAccountEnabled(const PROTOACCOUNT *pa) @@ -343,20 +360,20 @@ __forceinline int IsAccountEnabled(const PROTOACCOUNT *pa) return (int)CallService(MS_PROTO_ISACCOUNTENABLED, 0, (LPARAM)pa); } -//determines if an account is locked or not -//wParam = 0 -//lParam = (LPARAM)(char*)szAccountName -//Returns 1 if an account is locked and not supposed to change status, 0 otherwise +// determines if an account is locked or not +// wParam = 0 +// lParam = (LPARAM)(char*)szAccountName +// Returns 1 if an account is locked and not supposed to change status, 0 otherwise #define MS_PROTO_ISACCOUNTLOCKED "Proto/IsAccountLocked" -//gets the account associated with a contact -//wParam = (MCONTACT)hContact -//lParam = 0 -//Returns a char* pointing to the asciiz name of the protocol or NULL if the -//contact has no protocol. There is no need to mir_free() it or anything. -//This is the name of the module that actually accesses the network for that -//contact. +// gets the account associated with a contact +// wParam = (MCONTACT)hContact +// lParam = 0 +// Returns a char* pointing to the asciiz name of the protocol or NULL if the +// contact has no protocol. There is no need to mir_free() it or anything. +// This is the name of the module that actually accesses the network for that +// contact. #define MS_PROTO_GETCONTACTBASEACCOUNT "Proto/GetContactBaseAccount" /* -------------- avatar support --------------------- -- cgit v1.2.3