summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/delphi/m_protocols.inc31
-rw-r--r--include/delphi/m_protosvc.inc1
-rw-r--r--include/m_plugin.h4
-rw-r--r--include/m_protocols.h12
-rw-r--r--include/m_protosvc.h1
5 files changed, 31 insertions, 18 deletions
diff --git a/include/delphi/m_protocols.inc b/include/delphi/m_protocols.inc
index e5af3b4189..83deebaf44 100644
--- a/include/delphi/m_protocols.inc
+++ b/include/delphi/m_protocols.inc
@@ -186,8 +186,7 @@ const
NULL if it isn't.
}
-function Proto_IsProtocolLoaded(protoName:PAnsiCHar) : PPROTOCOLDESCRIPTOR; stdcall;
- external AppDLL name 'Proto_IsProtocolLoaded';
+function Proto_IsProtocolLoaded(protoName:PAnsiCHar) : PPROTOCOLDESCRIPTOR; stdcall; external AppDLL;
{ gets the network-level protocol associated with a contact
Returns a AnsiChar* pointing to the asciiz name of the protocol or NULL if the
@@ -195,8 +194,7 @@ function Proto_IsProtocolLoaded(protoName:PAnsiCHar) : PPROTOCOLDESCRIPTOR; stdc
This is the name of the module that actually accesses the network for that
contact. }
-function Proto_GetProtoName(hContact:TMCONTACT) : PAnsiChar; stdcall;
- external AppDLL name 'GetContactProto';
+function Proto_GetProtoName(hContact:TMCONTACT) : PAnsiChar; stdcall; external AppDLL name 'GetContactProto';
{ determines whether the specified contact has the given protocol in its chain
wParam=(WPARAM)(HANDLE)hContact
@@ -260,11 +258,9 @@ type
tagACCOUNT = TPROTOACCOUNT;
//account enumeration service
-procedure Proto_EnumAccounts(var nAccs:int; var pAccs:PPPROTOACCOUNT); stdcall;
- external AppDLL name 'Proto_EnumAccounts';
+procedure Proto_EnumAccounts(var nAccs:int; var pAccs:PPPROTOACCOUNT); stdcall; external AppDLL;
-procedure Proto_EnumProtocols(var nProtos:int; var pProtos:PPPROTOCOLDESCRIPTOR); stdcall;
- external AppDLL name 'Proto_EnumProtocols';
+procedure Proto_EnumProtocols(var nProtos:int; var pProtos:PPPROTOCOLDESCRIPTOR); stdcall; external AppDLL;
type
PACC_CREATE = ^TACC_CREATE;
@@ -286,8 +282,7 @@ const
//lParam=(LPARAM)(AnsiChar*)szAccountName
//return value = PROTOACCOUNT* or NULL
-function Proto_GetAccount(proto:PAnsiChar) : PPROTOACCOUNT; stdcall;
- external AppDLL name 'Proto_GetAccount';
+function Proto_GetAccount(proto:PAnsiChar) : PPROTOACCOUNT; stdcall; external AppDLL;
(*
__inline PROTOACCOUNT* ProtoGetAccount( const AnsiChar* accName )
@@ -321,8 +316,7 @@ const
Returns 1 if an account is valid and enabled, 0 otherwise
}
-function Proto_IsAccountEnabled(proto:PPROTOACCOUNT) : byte; stdcall;
- external AppDLL name 'Proto_IsAccountEnabled';
+function Proto_IsAccountEnabled(proto:PPROTOACCOUNT) : byte; stdcall; external AppDLL;
{
determines if an account is locked or not
@@ -331,8 +325,7 @@ function Proto_IsAccountEnabled(proto:PPROTOACCOUNT) : byte; stdcall;
Returns 1 if an account is locked and not supposed to change status, 0 otherwise
}
-function Proto_IsAccountLocked(proto:PPROTOACCOUNT) : byte; stdcall;
- external AppDLL name 'Proto_IsAccountLocked';
+function Proto_IsAccountLocked(proto:PPROTOACCOUNT) : byte; stdcall; external AppDLL;
{
gets the account associated with a contact
@@ -341,8 +334,14 @@ function Proto_IsAccountLocked(proto:PPROTOACCOUNT) : byte; stdcall;
This is the name of the module that actually accesses the network for that contact.
}
-function Proto_GetBaseAccountName(hContact:TMCONTACT) : PAnsiChar; stdcall;
- external AppDLL name 'Proto_GetBaseAccountName';
+function Proto_GetBaseAccountName(hContact:TMCONTACT) : PAnsiChar; stdcall; external AppDLL;
+
+{
+ gets and sets unique id name of any contact
+}
+
+function Proto_GetUniqueId(proto:PAnsiChar) : PAnsiChar; stdcall; external AppDLL;
+procedure Proto_SetUniqueId(proto, id:PAnsiChar); stdcall; external AppDLL;
// -------------- avatar support ---------------------
{
diff --git a/include/delphi/m_protosvc.inc b/include/delphi/m_protosvc.inc
index 73bc565a72..1e6296d3b3 100644
--- a/include/delphi/m_protosvc.inc
+++ b/include/delphi/m_protosvc.inc
@@ -133,7 +133,6 @@ const
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
diff --git a/include/m_plugin.h b/include/m_plugin.h
index 233e03a432..592aa565bf 100644
--- a/include/m_plugin.h
+++ b/include/m_plugin.h
@@ -17,6 +17,10 @@ protected:
// pass one of PROTOTYPE_* constants as type
void RegisterProtocol(int type, pfnInitProto = nullptr, pfnUninitProto = nullptr);
+ __forceinline void SetUniqueId(const char *pszUniqueId)
+ {
+ ::Proto_SetUniqueId(m_szModuleName, pszUniqueId);
+ }
public:
void debugLogA(LPCSTR szFormat, ...);
diff --git a/include/m_protocols.h b/include/m_protocols.h
index a7e13ffab1..cee4513363 100644
--- a/include/m_protocols.h
+++ b/include/m_protocols.h
@@ -211,6 +211,16 @@ EXTERN_C MIR_APP_DLL(void) Proto_EnumProtocols(int *nProtos, PROTOCOLDESCRIPTOR
EXTERN_C MIR_APP_DLL(PROTOCOLDESCRIPTOR*) Proto_IsProtocolLoaded(const char *szProtoName);
/////////////////////////////////////////////////////////////////////////////////////////
+// gets a name of a variable inside a protocol's module that identifies a contact
+
+EXTERN_C MIR_APP_DLL(const char*) Proto_GetUniqueId(const char *szModuleName);
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// sets a name of a variable inside a protocol's module that identifies a contact
+
+EXTERN_C MIR_APP_DLL(void) Proto_SetUniqueId(const char *szProtoName, const char *szUniqueId);
+
+/////////////////////////////////////////////////////////////////////////////////////////
// gets the network-level protocol associated with a contact
// 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.
@@ -283,6 +293,8 @@ typedef struct tagACCOUNT
int iOrder; // account order in various menus & lists
PROTO_INTERFACE *ppro; // pointer to the underlying object
+
+ char* szUniqueId; // setting's unique id for any contact in the account
}
PROTOACCOUNT;
diff --git a/include/m_protosvc.h b/include/m_protosvc.h
index 723b7260ae..0709e5b542 100644
--- a/include/m_protosvc.h
+++ b/include/m_protosvc.h
@@ -151,7 +151,6 @@ static __inline unsigned long Proto_Status2Flag(int status)
#define PFLAG_UNIQUEIDTEXT 100 // returns a static buffer of text describing the unique field by which this protocol identifies users (already translated), or NULL
#define PFLAG_MAXCONTACTSPERPACKET 200 // returns the maximum number of contacts which can be sent in a single PSS_CONTACTS, lParam = (LPARAM)hContact.
-#define PFLAG_UNIQUEIDSETTING 300 // returns the setting name of where the unique id is stored
#define PFLAG_MAXLENOFMESSAGE 400 // return the maximum length of an instant message, lParam = (LPARAM)hContact
///////////////////////////////////////////////////////////////////////////////