summaryrefslogtreecommitdiff
path: root/include/m_protocols.h
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2014-08-14 12:12:35 +0000
committerGeorge Hazan <george.hazan@gmail.com>2014-08-14 12:12:35 +0000
commit0a1ec91589a265b41210068b8d21fa469e750a08 (patch)
tree2d439bc1241b12ccadd66660d08f7b325d459ebd /include/m_protocols.h
parent9f478bb53be99c6ad5cf69c1a61cc14900cf72b8 (diff)
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
Diffstat (limited to 'include/m_protocols.h')
-rw-r--r--include/m_protocols.h265
1 files changed, 141 insertions, 124 deletions
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 ---------------------