From dd3d0e59dcd34beb222fcf612a51d3fee82c0e43 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Tue, 17 Mar 2015 20:33:47 +0000 Subject: SkypeWeb: initial commit git-svn-id: http://svn.miranda-ng.org/main/trunk@12424 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/SkypeWeb/src/skype_proto.h | 180 +++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 protocols/SkypeWeb/src/skype_proto.h (limited to 'protocols/SkypeWeb/src/skype_proto.h') diff --git a/protocols/SkypeWeb/src/skype_proto.h b/protocols/SkypeWeb/src/skype_proto.h new file mode 100644 index 0000000000..b704bd4133 --- /dev/null +++ b/protocols/SkypeWeb/src/skype_proto.h @@ -0,0 +1,180 @@ +#ifndef _TOX_PROTO_H_ +#define _TOX_PROTO_H_ + +class RequestQueueItem; + +struct CSkypeProto : public PROTO < CSkypeProto > +{ +public: + + ////////////////////////////////////////////////////////////////////////////////////// + //Ctors + + CSkypeProto(const char *protoName, const wchar_t *userName); + ~CSkypeProto(); + + ////////////////////////////////////////////////////////////////////////////////////// + // Virtual functions + + virtual MCONTACT __cdecl AddToList(int flags, PROTOSEARCHRESULT* psr); + virtual MCONTACT __cdecl AddToListByEvent(int flags, int iContact, MEVENT hDbEvent); + + virtual int __cdecl Authorize(MEVENT hDbEvent); + virtual int __cdecl AuthDeny(MEVENT hDbEvent, const PROTOCHAR* szReason); + virtual int __cdecl AuthRecv(MCONTACT hContact, PROTORECVEVENT*); + virtual int __cdecl AuthRequest(MCONTACT hContact, const PROTOCHAR* szMessage); + + virtual HANDLE __cdecl ChangeInfo(int iInfoType, void* pInfoData); + + virtual HANDLE __cdecl FileAllow(MCONTACT hContact, HANDLE hTransfer, const PROTOCHAR* tszPath); + virtual int __cdecl FileCancel(MCONTACT hContact, HANDLE hTransfer); + virtual int __cdecl FileDeny(MCONTACT hContact, HANDLE hTransfer, const PROTOCHAR* tszReason); + virtual int __cdecl FileResume(HANDLE hTransfer, int* action, const PROTOCHAR** tszFilename); + + virtual DWORD_PTR __cdecl GetCaps(int type, MCONTACT hContact = NULL); + virtual int __cdecl GetInfo(MCONTACT hContact, int infoType); + + virtual HANDLE __cdecl SearchBasic(const PROTOCHAR* id); + virtual HANDLE __cdecl SearchByEmail(const PROTOCHAR* email); + virtual HANDLE __cdecl SearchByName(const PROTOCHAR* nick, const PROTOCHAR* firstName, const PROTOCHAR* lastName); + virtual HWND __cdecl SearchAdvanced(HWND owner); + virtual HWND __cdecl CreateExtendedSearchUI(HWND owner); + + virtual int __cdecl RecvContacts(MCONTACT hContact, PROTORECVEVENT*); + virtual int __cdecl RecvFile(MCONTACT hContact, PROTOFILEEVENT*); + virtual int __cdecl RecvMsg(MCONTACT hContact, PROTORECVEVENT*); + virtual int __cdecl RecvUrl(MCONTACT hContact, PROTORECVEVENT*); + + virtual int __cdecl SendContacts(MCONTACT hContact, int flags, int nContacts, MCONTACT *hContactsList); + virtual HANDLE __cdecl SendFile(MCONTACT hContact, const PROTOCHAR *szDescription, PROTOCHAR **ppszFiles); + virtual int __cdecl SendMsg(MCONTACT hContact, int flags, const char* msg); + virtual int __cdecl SendUrl(MCONTACT hContact, int flags, const char* url); + + virtual int __cdecl SetApparentMode(MCONTACT hContact, int mode); + virtual int __cdecl SetStatus(int iNewStatus); + + virtual HANDLE __cdecl GetAwayMsg(MCONTACT hContact); + virtual int __cdecl RecvAwayMsg(MCONTACT hContact, int mode, PROTORECVEVENT* evt); + virtual int __cdecl SetAwayMsg(int iStatus, const PROTOCHAR* msg); + + virtual int __cdecl UserIsTyping(MCONTACT hContact, int type); + + virtual int __cdecl OnEvent(PROTOEVENTTYPE iEventType, WPARAM wParam, LPARAM lParam); + + // accounts + static CSkypeProto* InitAccount(const char *protoName, const TCHAR *userName); + static int UninitAccount(CSkypeProto *proto); + + // icons + static void InitIcons(); + static void UninitIcons(); + + // menus + static void InitMenus(); + static void UninitMenus(); + + // events + static int OnModulesLoaded(WPARAM, LPARAM); + +private: + char *password; + RequestQueue *requestQueue; + std::map cookies; + + static INT_PTR CALLBACK PasswordEditorProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + + // accounts + static LIST Accounts; + static int CompareAccounts(const CSkypeProto *p1, const CSkypeProto *p2); + + static CSkypeProto* GetContactAccount(MCONTACT hContact); + + int __cdecl OnAccountLoaded(WPARAM, LPARAM); + + INT_PTR __cdecl OnAccountManagerInit(WPARAM, LPARAM); + + // api response wrappers + template + static void HttpResponse(const NETLIBHTTPREQUEST *response, void *arg) + { + (((CSkypeProto*)arg)->*ResponseCallback)(response); + } + + template + static void JsonResponse(const NETLIBHTTPREQUEST *response, void *arg) + { + JSONROOT root(response->pData); + (((CSkypeProto*)arg)->*ResponseCallback)(root); + } + + void PushRequest(HttpRequest *request, HttpResponseCallback response = NULL, void *arg = NULL) + { + if (!cookies.empty()) + { + CMStringA allCookies; + for (std::map::iterator cookie = cookies.begin(); cookie != cookies.end(); ++cookie) + allCookies.AppendFormat("%s=%s; ", cookie->first.c_str(), cookie->second.c_str()); + request->SetCookie(allCookies); + } + requestQueue->Push(request, response, arg); + } + + // icons + static IconInfo Icons[]; + static HANDLE GetIconHandle(const char *name); + static HANDLE GetSkinIconHandle(const char *name); + + // menus + static HGENMENU ContactMenuItems[CMI_MAX]; + int OnPrebuildContactMenu(WPARAM hContact, LPARAM); + static int PrebuildContactMenu(WPARAM hContact, LPARAM lParam); + + int OnInitStatusMenu(); + + // options + static INT_PTR CALLBACK MainOptionsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + + int __cdecl OnOptionsInit(WPARAM wParam, LPARAM lParam); + + // events + void OnLoginFirst(const NETLIBHTTPREQUEST *response); + + void OnLoginSecond(const NETLIBHTTPREQUEST *response); + + // contacts + WORD GetContactStatus(MCONTACT hContact); + void SetContactStatus(MCONTACT hContact, WORD status); + void SetAllContactsStatus(WORD status); + + MCONTACT GetContact(const char *login); + + MCONTACT AddContact(const char *login, bool isTemporary = false); + + MCONTACT GetContactFromAuthEvent(MEVENT hEvent); + + void __cdecl LoadFriendList(void*); + + INT_PTR __cdecl OnRequestAuth(WPARAM hContact, LPARAM lParam); + INT_PTR __cdecl OnGrantAuth(WPARAM hContact, LPARAM); + + int __cdecl OnContactDeleted(MCONTACT, LPARAM); + + // messages + int OnReceiveMessage(MCONTACT hContact, PROTORECVEVENT *pre); + int OnSendMessage(MCONTACT hContact, int flags, const char *message); + + // utils + static void ShowNotification(const TCHAR *message, int flags = 0, MCONTACT hContact = NULL); + static void ShowNotification(const TCHAR *caption, const TCHAR *message, int flags = 0, MCONTACT hContact = NULL); + + static bool IsFileExists(std::tstring path); + + template + static INT_PTR __cdecl GlobalService(WPARAM wParam, LPARAM lParam) + { + CSkypeProto *proto = CSkypeProto::GetContactAccount((MCONTACT)wParam); + return proto ? (proto->*Service)(wParam, lParam) : 0; + } +}; + +#endif //_TOX_PROTO_H_ \ No newline at end of file -- cgit v1.2.3