diff options
Diffstat (limited to 'src/modules/protocols/protoint.cpp')
-rw-r--r-- | src/modules/protocols/protoint.cpp | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/src/modules/protocols/protoint.cpp b/src/modules/protocols/protoint.cpp new file mode 100644 index 0000000000..dec59cce98 --- /dev/null +++ b/src/modules/protocols/protoint.cpp @@ -0,0 +1,271 @@ +/*
+
+Miranda IM: the free IM client for Microsoft* Windows*
+
+Copyright 2000-2009 Miranda ICQ/IM project,
+all portions of this codebase are copyrighted to the people
+listed in contributors.txt.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+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.
+*/
+
+#include "commonheaders.h"
+
+char** __fastcall Proto_FilesMatrixA( TCHAR **files );
+void FreeFilesMatrix( TCHAR ***files );
+
+INT_PTR __fastcall MyCallProtoService( const char *szModule, const char *szService, WPARAM wParam, LPARAM lParam )
+{
+ char str[MAXMODULELABELLENGTH];
+ mir_snprintf( str, sizeof(str), "%s%s", szModule, szService );
+ return CallService(str,wParam,lParam);
+}
+
+struct DEFAULT_PROTO_INTERFACE : public PROTO_INTERFACE
+{
+ HANDLE __cdecl AddToList( int flags, PROTOSEARCHRESULT* psr )
+ { return ( HANDLE )MyCallProtoService( m_szModuleName, PS_ADDTOLIST, flags, (LPARAM)psr );
+ }
+
+ HANDLE __cdecl AddToListByEvent( int flags, int iContact, HANDLE hDbEvent )
+ { return ( HANDLE )MyCallProtoService( m_szModuleName, PS_ADDTOLISTBYEVENT, MAKELONG(flags, iContact), (LPARAM)hDbEvent );
+ }
+
+ int __cdecl Authorize( HANDLE hContact )
+ { return ( int )MyCallProtoService( m_szModuleName, PS_AUTHALLOW, (WPARAM)hContact, 0 );
+ }
+
+ int __cdecl AuthDeny( HANDLE hContact, const TCHAR* szReason )
+ { return ( int )MyCallProtoService( m_szModuleName, PS_AUTHDENY, (WPARAM)hContact, (LPARAM)StrConvA(szReason));
+ }
+
+ int __cdecl AuthRecv( HANDLE hContact, PROTORECVEVENT* evt )
+ { CCSDATA ccs = { hContact, PSR_AUTH, 0, (LPARAM)evt };
+ return ( int )MyCallProtoService( m_szModuleName, PSR_AUTH, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl AuthRequest( HANDLE hContact, const TCHAR* szMessage )
+ { CCSDATA ccs = { hContact, PSS_AUTHREQUEST, 0, (LPARAM)szMessage };
+ ccs.lParam = ( LPARAM )mir_t2a( szMessage );
+ int res = ( int )MyCallProtoService( m_szModuleName, PSS_AUTHREQUEST, 0, (LPARAM)&ccs );
+ mir_free(( char* )ccs.lParam );
+ return res;
+ }
+
+ HANDLE __cdecl ChangeInfo( int iInfoType, void* pInfoData )
+ { return ( HANDLE )MyCallProtoService( m_szModuleName, PS_CHANGEINFO, iInfoType, ( LPARAM )pInfoData );
+ }
+
+ HANDLE __cdecl FileAllow( HANDLE hContact, HANDLE hTransfer, const PROTOCHAR* szPath )
+ { CCSDATA ccs = { hContact, PSS_FILEALLOW, (WPARAM)hTransfer, (LPARAM)szPath };
+#ifdef _UNICODE
+ ccs.lParam = ( LPARAM )mir_t2a( szPath );
+ HANDLE res = ( HANDLE )MyCallProtoService( m_szModuleName, PSS_FILEALLOW, 0, (LPARAM)&ccs );
+ mir_free(( char* )ccs.lParam );
+ return res;
+#else
+ return ( HANDLE )MyCallProtoService( m_szModuleName, PSS_FILEALLOW, 0, (LPARAM)&ccs );
+#endif
+ }
+
+ int __cdecl FileCancel( HANDLE hContact, HANDLE hTransfer )
+ { CCSDATA ccs = { hContact, PSS_FILECANCEL, (WPARAM)hTransfer, 0 };
+ return ( int )MyCallProtoService( m_szModuleName, PSS_FILECANCEL, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl FileDeny( HANDLE hContact, HANDLE hTransfer, const PROTOCHAR* szReason )
+ { CCSDATA ccs = { hContact, PSS_FILEDENY, (WPARAM)hTransfer, (LPARAM)szReason };
+#ifdef _UNICODE
+ ccs.lParam = ( LPARAM )mir_t2a( szReason );
+ int res = ( int )MyCallProtoService( m_szModuleName, PSS_FILEDENY, 0, (LPARAM)&ccs );
+ mir_free(( char* )ccs.lParam );
+ return res;
+#else
+ return ( int )MyCallProtoService( m_szModuleName, PSS_FILEDENY, 0, (LPARAM)&ccs );
+#endif
+ }
+
+ int __cdecl FileResume( HANDLE hTransfer, int* action, const PROTOCHAR** szFilename )
+ { PROTOFILERESUME pfr = { *action, *szFilename };
+#ifdef _UNICODE
+ pfr.szFilename = ( PROTOCHAR* )mir_t2a( pfr.szFilename );
+ int res = ( int )MyCallProtoService( m_szModuleName, PS_FILERESUME, ( WPARAM )hTransfer, ( LPARAM )&pfr);
+ mir_free(( PROTOCHAR* )*szFilename );
+ *action = pfr.action; *szFilename = (PROTOCHAR*)pfr.szFilename;
+#else
+ int res = ( int )MyCallProtoService( m_szModuleName, PS_FILERESUME, ( WPARAM )hTransfer, ( LPARAM )&pfr );
+ *action = pfr.action; *szFilename = (PROTOCHAR*)pfr.szFilename;
+#endif
+ return res;
+ }
+
+ DWORD_PTR __cdecl GetCaps( int type, HANDLE hContact )
+ { return ( DWORD_PTR )MyCallProtoService( m_szModuleName, PS_GETCAPS, type, (LPARAM)hContact );
+ }
+
+ HICON __cdecl GetIcon( int iconIndex )
+ { return ( HICON )MyCallProtoService( m_szModuleName, PS_LOADICON, iconIndex, 0 );
+ }
+
+ int __cdecl GetInfo( HANDLE hContact, int flags )
+ { CCSDATA ccs = { hContact, PSS_GETINFO, flags, 0 };
+ return MyCallProtoService( m_szModuleName, PSS_GETINFO, 0, (LPARAM)&ccs );
+ }
+
+ HANDLE __cdecl SearchBasic( const PROTOCHAR* id )
+ { return ( HANDLE )MyCallProtoService( m_szModuleName, PS_BASICSEARCH, 0, ( LPARAM )StrConvA( id ));
+ }
+
+ HANDLE __cdecl SearchByEmail( const PROTOCHAR* email )
+ { return ( HANDLE )MyCallProtoService( m_szModuleName, PS_SEARCHBYEMAIL, 0, ( LPARAM )StrConvA( email ));
+ }
+
+ HANDLE __cdecl SearchByName( const PROTOCHAR* nick, const PROTOCHAR* firstName, const PROTOCHAR* lastName )
+ { PROTOSEARCHBYNAME psn;
+#ifdef _UNICODE
+ psn.pszNick = ( PROTOCHAR* )mir_t2a( nick );
+ psn.pszFirstName = ( PROTOCHAR* )mir_t2a( firstName );
+ psn.pszLastName = ( PROTOCHAR* )mir_t2a( lastName );
+ HANDLE res = ( HANDLE )MyCallProtoService( m_szModuleName, PS_SEARCHBYNAME, 0, ( LPARAM )&psn );
+ mir_free( psn.pszNick );
+ mir_free( psn.pszFirstName );
+ mir_free( psn.pszLastName );
+ return res;
+#else
+ psn.pszNick = ( char* )nick;
+ psn.pszFirstName = ( char* )firstName;
+ psn.pszLastName = ( char* )lastName;
+ return ( HANDLE )MyCallProtoService( m_szModuleName, PS_SEARCHBYNAME, 0, ( LPARAM )&psn );
+#endif
+ }
+
+ HWND __cdecl SearchAdvanced( HWND owner )
+ { return ( HWND )MyCallProtoService( m_szModuleName, PS_SEARCHBYADVANCED, 0, ( LPARAM )owner );
+ }
+
+ HWND __cdecl CreateExtendedSearchUI( HWND owner )
+ { return ( HWND )MyCallProtoService( m_szModuleName, PS_CREATEADVSEARCHUI, 0, ( LPARAM )owner );
+ }
+
+ int __cdecl RecvContacts( HANDLE hContact, PROTORECVEVENT* evt )
+ { CCSDATA ccs = { hContact, PSR_CONTACTS, 0, (LPARAM)evt };
+ return ( int )MyCallProtoService( m_szModuleName, PSR_CONTACTS, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl RecvFile( HANDLE hContact, PROTOFILEEVENT* evt )
+ { CCSDATA ccs = { hContact, PSR_FILE, 0, (LPARAM)evt };
+ return MyCallProtoService( m_szModuleName, PSR_FILE, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl RecvMsg( HANDLE hContact, PROTORECVEVENT* evt )
+ { CCSDATA ccs = { hContact, PSR_MESSAGE, 0, (LPARAM)evt };
+ return ( int )MyCallProtoService( m_szModuleName, PSR_MESSAGE, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl RecvUrl( HANDLE hContact, PROTORECVEVENT* evt )
+ { CCSDATA ccs = { hContact, PSR_URL, 0, (LPARAM)evt };
+ return ( int )MyCallProtoService( m_szModuleName, PSR_URL, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl SendContacts( HANDLE hContact, int flags, int nContacts, HANDLE* hContactsList )
+ { CCSDATA ccs = { hContact, PSS_CONTACTS, MAKEWPARAM(flags,nContacts), (LPARAM)hContactsList };
+ return ( int )MyCallProtoService( m_szModuleName, PSS_CONTACTS, 0, (LPARAM)&ccs );
+ }
+
+ HANDLE __cdecl SendFile( HANDLE hContact, const PROTOCHAR* szDescription, PROTOCHAR** ppszFiles )
+ { CCSDATA ccs = { hContact, PSS_FILE, (WPARAM)szDescription, (LPARAM)ppszFiles };
+#ifdef _UNICODE
+ ccs.wParam = ( WPARAM )mir_t2a( szDescription );
+ ccs.lParam = ( LPARAM )Proto_FilesMatrixA( ppszFiles );
+ HANDLE res = ( HANDLE )MyCallProtoService( m_szModuleName, PSS_FILE, 0, ( LPARAM )&ccs );
+ if ( res == 0 ) FreeFilesMatrix(( TCHAR*** )&ccs.lParam );
+ mir_free(( char* )ccs.wParam );
+ return res;
+#else
+ return ( HANDLE )MyCallProtoService( m_szModuleName, PSS_FILE, 0, (LPARAM)&ccs );
+#endif
+ }
+
+ int __cdecl SendMsg( HANDLE hContact, int flags, const char* msg )
+ { CCSDATA ccs = { hContact, PSS_MESSAGE, flags, (LPARAM)msg };
+ return ( int )MyCallProtoService( m_szModuleName, PSS_MESSAGE, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl SendUrl( HANDLE hContact, int flags, const char* url )
+ { CCSDATA ccs = { hContact, PSS_URL, flags, (LPARAM)url };
+ return ( int )MyCallProtoService( m_szModuleName, PSS_URL, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl SetApparentMode( HANDLE hContact, int mode )
+ { CCSDATA ccs = { hContact, PSS_SETAPPARENTMODE, mode, 0 };
+ return ( int )MyCallProtoService( m_szModuleName, PSS_SETAPPARENTMODE, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl SetStatus( int iNewStatus )
+ { return ( int )MyCallProtoService( m_szModuleName, PS_SETSTATUS, iNewStatus, 0 );
+ }
+
+ HANDLE __cdecl GetAwayMsg( HANDLE hContact )
+ { CCSDATA ccs = { hContact, PSS_GETAWAYMSG, 0, 0 };
+ return ( HANDLE )MyCallProtoService( m_szModuleName, PSS_GETAWAYMSG, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl RecvAwayMsg( HANDLE hContact, int statusMode, PROTORECVEVENT* evt )
+ { CCSDATA ccs = { hContact, PSR_AWAYMSG, statusMode, (LPARAM)evt };
+ return ( int )MyCallProtoService( m_szModuleName, PSR_AWAYMSG, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl SendAwayMsg( HANDLE hContact, HANDLE hProcess, const char* msg )
+ { CCSDATA ccs = { hContact, PSS_AWAYMSG, (WPARAM)hProcess, (LPARAM)msg };
+ return ( int )MyCallProtoService( m_szModuleName, PSS_AWAYMSG, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl SetAwayMsg( int iStatus, const TCHAR* msg )
+ { return ( int )MyCallProtoService( m_szModuleName, PS_SETAWAYMSG, iStatus, (LPARAM)StrConvA(msg));
+ }
+
+ int __cdecl UserIsTyping( HANDLE hContact, int type )
+ { CCSDATA ccs = { hContact, PSS_USERISTYPING, (WPARAM)hContact, type };
+ return MyCallProtoService( m_szModuleName, PSS_USERISTYPING, 0, (LPARAM)&ccs );
+ }
+
+ int __cdecl OnEvent( PROTOEVENTTYPE, WPARAM, LPARAM )
+ {
+ return 0;
+ }
+};
+
+// creates the default protocol container for compatibility with the old plugins
+
+PROTO_INTERFACE* AddDefaultAccount( const char* szProtoName )
+{
+ PROTO_INTERFACE* ppi = new DEFAULT_PROTO_INTERFACE;
+ if ( ppi != NULL ) {
+ ppi->m_iVersion = 1;
+ ppi->m_szModuleName = mir_strdup( szProtoName );
+ ppi->m_szProtoName = mir_strdup( szProtoName );
+ ppi->m_tszUserName = mir_a2t( szProtoName );
+ }
+ return ppi;
+}
+
+int FreeDefaultAccount( PROTO_INTERFACE* ppi )
+{
+ mir_free( ppi->m_szModuleName );
+ mir_free( ppi->m_szProtoName );
+ mir_free( ppi->m_tszUserName );
+ delete ppi;
+ return 0;
+}
|