summaryrefslogtreecommitdiff
path: root/plugins/SecureIM/crypt_metacontacts.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/SecureIM/crypt_metacontacts.cpp')
-rw-r--r--plugins/SecureIM/crypt_metacontacts.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/plugins/SecureIM/crypt_metacontacts.cpp b/plugins/SecureIM/crypt_metacontacts.cpp
new file mode 100644
index 0000000000..5a24c6c9cb
--- /dev/null
+++ b/plugins/SecureIM/crypt_metacontacts.cpp
@@ -0,0 +1,60 @@
+#include "commonheaders.h"
+
+
+BOOL isProtoMetaContacts(HANDLE hContact) {
+ if(bMetaContacts) {
+ LPSTR proto = (LPSTR)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if( proto && strcmp(proto,"MetaContacts")==0 ) {
+ return true;
+ }
+ }
+// for(int j=0;j<clist_cnt;j++)
+// if(clist[j].hContact==hContact && clist[j].proto->inspecting)
+// return strstr(clist[j].proto->name,"MetaContacts")!=NULL;
+ return false;
+}
+
+
+BOOL isDefaultSubContact(HANDLE hContact) {
+
+ if(bMetaContacts) {
+ return (HANDLE)CallService(MS_MC_GETDEFAULTCONTACT,(WPARAM)CallService(MS_MC_GETMETACONTACT,(WPARAM)hContact,0),0)==hContact;
+ }
+ return false;
+}
+
+
+HANDLE getMetaContact(HANDLE hContact) {
+
+ if(bMetaContacts) {
+ return (HANDLE)CallService(MS_MC_GETMETACONTACT,(WPARAM)hContact,0);
+ }
+ return 0;
+}
+
+
+HANDLE getMostOnline(HANDLE hContact) {
+
+ if(bMetaContacts) {
+ return (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT,(WPARAM)hContact,0);
+ }
+ return 0;
+}
+
+
+// remove all secureim connections on subcontacts
+void DeinitMetaContact(HANDLE hContact) {
+
+ HANDLE hMetaContact = isProtoMetaContacts(hContact) ? hContact : getMetaContact(hContact);
+
+ if( hMetaContact ) {
+ for(int i=0;i<CallService(MS_MC_GETNUMCONTACTS,(WPARAM)hMetaContact,0);i++) {
+ HANDLE hSubContact = (HANDLE)CallService(MS_MC_GETSUBCONTACT,(WPARAM)hMetaContact,(LPARAM)i);
+ if( hSubContact && isContactSecured(hSubContact)&SECURED ) {
+ CallContactService(hSubContact,PSS_MESSAGE,(WPARAM)PREF_METANODB,(LPARAM)SIG_DEIN);
+ }
+ }
+ }
+}
+
+// EOF