#ifndef _TOX_PROTO_H_ #define _TOX_PROTO_H_ class CFile; struct CToxProto : public PROTO { public: ////////////////////////////////////////////////////////////////////////////////////// //Ctors CToxProto(const char *protoName, const wchar_t *userName); ~CToxProto(); ////////////////////////////////////////////////////////////////////////////////////// // Virtual functions virtual MCONTACT __cdecl AddToList(int flags, PROTOSEARCHRESULT* psr); virtual MCONTACT __cdecl AddToListByEvent(int flags, int iContact, HANDLE hDbEvent); virtual int __cdecl Authorize(HANDLE hDbEvent); virtual int __cdecl AuthDeny(HANDLE 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* szPath); virtual int __cdecl FileCancel(MCONTACT hContact, HANDLE hTransfer); virtual int __cdecl FileDeny(MCONTACT hContact, HANDLE hTransfer, const PROTOCHAR* szReason); virtual int __cdecl FileResume(HANDLE hTransfer, int* action, const PROTOCHAR** szFilename); 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); // instances static CToxProto* InitProtoInstance(const char* protoName, const wchar_t* userName); static int UninitProtoInstance(CToxProto* ppro); static CToxProto* GetContactInstance(MCONTACT hContact); static void UninitInstances(); private: Tox *tox; mir_cs tox_lock; HANDLE hPollingThread; bool isTerminated; bool isConnected; HANDLE hNetlibUser; ULONG hFileProcess; LIST fileSendQueue; // tox void InitToxCore(); void UninitToxCore(); // instances static LIST instanceList; static int CompareProtos(const CToxProto *p1, const CToxProto *p2); // netlib void InitNetlib(); void UninitNetlib(); // account bool IsOnline(); void DoBootstrap(); void DoTox(); void __cdecl PollingThread(void*); //events int __cdecl OnAccountLoaded(WPARAM, LPARAM); int __cdecl OnContactDeleted(MCONTACT, LPARAM); int __cdecl OnPreShutdown(WPARAM, LPARAM); int __cdecl OnOptionsInit(WPARAM wParam, LPARAM lParam); int __cdecl OnSettingsChanged(WPARAM wParam, LPARAM lParam); int __cdecl OnAccountListChanged(WPARAM wParam, LPARAM lParam); int __cdecl OnPreCreateMessage(WPARAM wParam, LPARAM lParam); INT_PTR __cdecl OnAccountManagerInit(WPARAM, LPARAM); static void OnFriendRequest(Tox *tox, const uint8_t *address, const uint8_t *message, const uint16_t messageSize, void *arg); static void OnFriendMessage(Tox *tox, const int number, const uint8_t *message, const uint16_t messageSize, void *arg); static void OnFriendAction(Tox *tox, const int number, const uint8_t *action, const uint16_t actionSize, void *arg); static void OnTypingChanged(Tox *tox, const int number, uint8_t isTyping, void *arg); static void OnFriendNameChange(Tox *tox, const int number, const uint8_t *name, const uint16_t nameSize, void *arg); static void OnStatusMessageChanged(Tox *tox, const int number, const uint8_t* message, const uint16_t messageSize, void *arg); static void OnUserStatusChanged(Tox *tox, int32_t number, uint8_t usertatus, void *arg); static void OnConnectionStatusChanged(Tox *tox, const int number, const uint8_t status, void *arg); static void OnReadReceipt(Tox *tox, int32_t number, uint32_t receipt, void *arg); //static void OnFileControlCallback(Tox *tox, int32_t number, uint8_t hFile, uint64_t fileSize, uint8_t *name, uint16_t nameSize, void *arg); static void OnFileRequest(Tox *tox, int32_t number, uint8_t isSend, uint8_t fileNumber, uint8_t type, const uint8_t *data, uint16_t length, void *arg); // contacts WORD GetContactStatus(MCONTACT hContact); bool IsContactOnline(MCONTACT hContact); void SetContactStatus(MCONTACT hContact, WORD status); void SetAllContactsStatus(WORD status); bool IsProtoContact(MCONTACT hContact); MCONTACT FindContact(const std::string &id); MCONTACT FindContact(const int friendNumber); MCONTACT AddContact(const std::string &id, bool isTemporary = false); MCONTACT GetContactFromAuthEvent(HANDLE hEvent); void LoadContactList(); void __cdecl SearchByIdAsync(void* arg); void __cdecl SearchByNameAsync(void* arg); // file transfer static int FileSendQueueCompare(const CFile* p1, const CFile* p2); void __cdecl SendFilesAsync(void* arg); // utils TOX_USERSTATUS MirandaToToxStatus(int status); int ToxToMirandaStatus(TOX_USERSTATUS userstatus); static void ShowNotification(const wchar_t *message, int flags = 0, MCONTACT hContact = NULL); static void ShowNotification(const wchar_t *caption, const wchar_t *message, int flags = 0, MCONTACT hContact = NULL); HANDLE AddDbEvent(MCONTACT hContact, WORD type, DWORD timestamp, DWORD flags, DWORD cbBlob, PBYTE pBlob); void RaiseAuthRequestEvent(DWORD timestamp, const char* toxId, const char* reason); std::vector HexStringToData(std::string hex); std::string DataToHexString(std::vector); std::string ToxAddressToId(std::string); static bool IsFileExists(std::tstring path); std::tstring GetToxProfilePath(); void LoadToxData(); void SaveToxData(); // dialogs static INT_PTR CALLBACK SearchDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static INT_PTR CALLBACK MainOptionsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static INT_PTR CALLBACK ToxProfileManagerProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); }; #endif //_TOX_PROTO_H_