From af7e438cfe8ce85e1da234318ed1584e89d952cc Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Fri, 29 Jun 2012 05:38:03 +0000 Subject: only add some plugins and protocols, not adapted See please maybe not all need us git-svn-id: http://svn.miranda-ng.org/main/trunk@678 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Tlen/jabber.h | 438 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 438 insertions(+) create mode 100644 protocols/Tlen/jabber.h (limited to 'protocols/Tlen/jabber.h') diff --git a/protocols/Tlen/jabber.h b/protocols/Tlen/jabber.h new file mode 100644 index 0000000000..fdaabf5e43 --- /dev/null +++ b/protocols/Tlen/jabber.h @@ -0,0 +1,438 @@ +/* + +Jabber Protocol Plugin for Miranda IM +Tlen Protocol Plugin for Miranda IM +Copyright (C) 2002-2004 Santithorn Bunchua +Copyright (C) 2004-2007 Piotr Piastucki + +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. + +*/ + +#ifndef _JABBER_H_ +#define _JABBER_H_ + +#if defined(UNICODE) + #ifndef _UNICODE + #define _UNICODE + #endif +#endif + +#define MIRANDA_VER 0x0800 + +#undef _WIN32_WINNT +#undef _WIN32_IE +#define _WIN32_WINNT 0x0501 +#define _WIN32_IE 0x0501 + +#define __try +#define __except(x) if (0) +#define __finally + +#define _try __try +#define _except __except +#define _finally __finally + +#ifdef _DEBUG +#define _CRTDBG_MAP_ALLOC +#include +#include +#endif +#define ENABLE_LOGGING + +/******************************************************************* + * Global compilation flags + *******************************************************************/ + +/******************************************************************* + * Global header files + *******************************************************************/ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "jabber_xml.h" +#include "crypto/polarssl/aes.h" +#include "crypto/polarssl/bignum.h" + +/******************************************************************* + * Global constants + *******************************************************************/ +#define TLEN_DEFAULT_PORT 443 +#define JABBER_IQID "mim_" +#define TLEN_REGISTER "http://reg.tlen.pl/" +#define TLEN_MAX_SEARCH_RESULTS_PER_PAGE 20 + +// User-defined message +#define WM_TLEN_REFRESH (WM_USER + 100) +// Error code +#define JABBER_ERROR_REDIRECT 302 +#define JABBER_ERROR_BAD_REQUEST 400 +#define JABBER_ERROR_UNAUTHORIZED 401 +#define JABBER_ERROR_PAYMENT_REQUIRED 402 +#define JABBER_ERROR_FORBIDDEN 403 +#define JABBER_ERROR_NOT_FOUND 404 +#define JABBER_ERROR_NOT_ALLOWED 405 +#define JABBER_ERROR_NOT_ACCEPTABLE 406 +#define JABBER_ERROR_REGISTRATION_REQUIRED 407 +#define JABBER_ERROR_REQUEST_TIMEOUT 408 +#define JABBER_ERROR_CONFLICT 409 +#define JABBER_ERROR_INTERNAL_SERVER_ERROR 500 +#define JABBER_ERROR_NOT_IMPLEMENTED 501 +#define JABBER_ERROR_REMOTE_SERVER_ERROR 502 +#define JABBER_ERROR_SERVICE_UNAVAILABLE 503 +#define JABBER_ERROR_REMOTE_SERVER_TIMEOUT 504 + +#define TLEN_ALERTS_ACCEPT_ALL 0 +#define TLEN_ALERTS_IGNORE_NIR 1 +#define TLEN_ALERTS_IGNORE_ALL 2 + +#define TLEN_IMAGES_ACCEPT_ALL 0 +#define TLEN_IMAGES_IGNORE_NIR 1 +#define TLEN_IMAGES_IGNORE_ALL 2 + +#define TLEN_MUC_ASK 0 +#define TLEN_MUC_ACCEPT_IR 1 +#define TLEN_MUC_ACCEPT_ALL 2 +#define TLEN_MUC_IGNORE_NIR 3 +#define TLEN_MUC_IGNORE_ALL 4 + +#define IDC_STATIC (-1) + +/******************************************************************* + * Global data structures and data type definitions + *******************************************************************/ +typedef HANDLE JABBER_SOCKET; + +typedef enum { + LIST_ROSTER, // Roster list + LIST_CHATROOM, // Groupchat room currently joined + LIST_FILE, // Current file transfer session + LIST_INVITATIONS,// Invitations to be sent + LIST_SEARCH, // Rooms names being searched + LIST_VOICE, + LIST_PICTURE +} JABBER_LIST; + +typedef enum { + IQ_PROC_NONE, + IQ_PROC_GETSEARCH +} JABBER_IQ_PROCID; + +typedef enum { + SUB_NONE, + SUB_TO, + SUB_FROM, + SUB_BOTH +} JABBER_SUBSCRIPTION; + +typedef struct { + char *szOnline; + char *szAway; + char *szNa; + char *szDnd; + char *szFreechat; + char *szInvisible; +} JABBER_MODEMSGS; + +typedef struct { + char mailBase[256]; + char mailMsg[256]; + int mailMsgMthd; + char mailIndex[256]; + int mailIndexMthd; + char mailLogin[256]; + int mailLoginMthd; + char mailCompose[256]; + int mailComposeMthd; + char avatarGet[256]; + int avatarGetMthd; + char avatarUpload[256]; + int avatarUploadMthd; + char avatarRemove[256]; + int avatarRemoveMthd; +} TlenConfiguration; + +typedef struct { + BOOL useEncryption; + BOOL reconnect; + BOOL rosterSync; + BOOL offlineAsInvisible; + BOOL leaveOfflineMessage; + int offlineMessageOption; + BOOL ignoreAdvertisements; + int alertPolicy; + int groupChatPolicy; + int voiceChatPolicy; + int imagePolicy; + BOOL enableAvatars; + BOOL enableVersion; + BOOL useNudge; + BOOL logAlerts; + BOOL useNewP2P; + BOOL sendKeepAlive; + BOOL savePassword; +} TlenOptions; + +struct JABBER_IQ_FUNC_STRUCT; +struct JABBER_LIST_ITEM_STRUCT; +struct TLEN_VOICE_CONTROL_STRUCT; + +typedef struct { + PROTO_INTERFACE iface; + HANDLE hNetlibUser; + HANDLE hFileNetlibUser; + + JABBER_MODEMSGS modeMsgs; + + struct ThreadDataStruct *threadData; + HANDLE hTlenNudge; + HANDLE hMenuMUC; + HANDLE hMenuChats; + HANDLE hMenuInbox; + HANDLE hMenuContactMUC; + HANDLE hMenuContactVoice; + HANDLE hMenuContactGrantAuth; + HANDLE hMenuContactRequestAuth; + HANDLE hMenuPicture; + + HANDLE* hServices; + unsigned serviceNum; + HANDLE* hHooks; + unsigned hookNum; + + int listsCount; + struct JABBER_LIST_ITEM_STRUCT *lists; + CRITICAL_SECTION csLists; + + int iqCount; + int iqAlloced; + struct JABBER_IQ_FUNC_STRUCT *iqList; + CRITICAL_SECTION csIqList; + + CRITICAL_SECTION csSerial; + unsigned int serial; + BOOL isOnline; + BOOL isConnected; + + CRITICAL_SECTION modeMsgMutex; + + HANDLE hMenuRoot; + + char *searchJID; + int searchID; + int searchIndex; + char *searchQuery; + int searchQueryLen; + + CRITICAL_SECTION csSend; + + HWND voiceDlgHWND; + struct TLEN_VOICE_CONTROL_STRUCT *playbackControl; + struct TLEN_VOICE_CONTROL_STRUCT *recordingControl; + int framesAvailableForPlayback; + int availOverrunValue; + + TlenOptions tlenOptions; +} TlenProtocol; + + +typedef struct ThreadDataStruct{ + HANDLE hThread; + char *streamId; + char username[128]; + char password[128]; + char server[128]; + char manualHost[128]; + char avatarToken[128]; + char avatarHash[64]; + int avatarFormat; + WORD port; + BOOL useEncryption; + + JABBER_SOCKET s; //HANDLE from CallService(MS_NETLIB_OPENCONNECTION (jabber_ws.c:68) + aes_context aes_in_context; + aes_context aes_out_context; + unsigned char aes_in_iv[16]; + unsigned char aes_out_iv[16]; + + BOOL useAES; + TlenConfiguration tlenConfig; + TlenProtocol *proto; +} ThreadData; + + +typedef enum { FT_CONNECTING, FT_INITIALIZING, FT_RECEIVING, FT_DONE, FT_ERROR, FT_DENIED, FT_SWITCH } JABBER_FILE_STATE; +typedef enum { FT_RECV, FT_SEND} JABBER_FILE_MODE; +typedef struct TLEN_FILE_TRANSFER_STRUCT{ + HANDLE hContact; + JABBER_SOCKET s; + NETLIBNEWCONNECTIONPROC_V2 pfnNewConnectionV2; + JABBER_FILE_STATE state; + char *jid; + int fileId; + char *iqId; + int mode; + + // Used by file receiving only + char *hostName; + WORD wPort; + char *localName; + WORD wLocalPort; + char *szSavePath; + long fileReceivedBytes; + long fileTotalSize; + + // Used by file sending only + HANDLE hFileEvent; + int fileCount; + char **files; + long *filesSize; + //long fileTotalSize; // Size of the current file (file being sent) + long allFileTotalSize; + long allFileReceivedBytes; + char *szDescription; + int currentFile; + + // New p2p + BOOL newP2P; + char *id2; + SOCKET udps; + aes_context aes_context; + unsigned char aes_iv[16]; + TlenProtocol *proto; + +} TLEN_FILE_TRANSFER; + +typedef struct { + PROTOSEARCHRESULT hdr; + char jid[256]; +} JABBER_SEARCH_RESULT; + +typedef struct { + char *iqId; + PROTOSEARCHRESULT hdr; + char jid[256]; +} TLEN_CONFERENCE; + + +typedef struct { + int id; + TCHAR *name; +} JABBER_FIELD_MAP; + + +/******************************************************************* + * Global variables + *******************************************************************/ +extern HINSTANCE hInst; +extern HANDLE hMainThread; + +/******************************************************************* + * Function declarations + *******************************************************************/ +HICON GetIcolibIcon(int iconId); +void ReleaseIcolibIcon(HICON hIcon); + +void JabberLog(TlenProtocol *proto, const char *fmt, ...); +void __cdecl JabberServerThread(ThreadData *info); +// jabber_ws.c +BOOL JabberWsInit(TlenProtocol *proto); +void JabberWsUninit(TlenProtocol *proto); +JABBER_SOCKET JabberWsConnect(TlenProtocol *proto, char *host, WORD port); +int JabberWsSend(TlenProtocol *proto, JABBER_SOCKET s, char *data, int datalen); +int JabberWsRecv(TlenProtocol *proto, JABBER_SOCKET s, char *data, long datalen); +int JabberWsSendAES(TlenProtocol *proto, char *data, int datalen, aes_context *aes_ctx, unsigned char *aes_iv); +int JabberWsRecvAES(TlenProtocol *proto, char *data, long datalen, aes_context *aes_ctx, unsigned char *aes_iv); +// jabber_util.c +HANDLE HookEventObj_Ex(const char *name, TlenProtocol *proto, MIRANDAHOOKOBJ hook); +HANDLE CreateServiceFunction_Ex(const char *name, TlenProtocol *proto, MIRANDASERVICEOBJ service); +void UnhookEvents_Ex(TlenProtocol *proto); +void DestroyServices_Ex(TlenProtocol *proto); +void JabberSerialInit(TlenProtocol *proto); +void JabberSerialUninit(TlenProtocol *proto); +unsigned int JabberSerialNext(TlenProtocol *proto); +int JabberSend(TlenProtocol *proto, const char *fmt, ...); +HANDLE JabberHContactFromJID(TlenProtocol *proto, const char *jid); +char *JabberJIDFromHContact(TlenProtocol *proto, HANDLE hContact); +char *JabberLoginFromJID(const char *jid); +char *JabberResourceFromJID(const char *jid); +char *JabberNickFromJID(const char *jid); +char *JabberLocalNickFromJID(const char *jid); +char *TlenGroupEncode(const char *str); +char *TlenGroupDecode(const char *str); +char *JabberSha1(char *str); +char *TlenSha1(char *str, int len); +char *TlenPasswordHash(const char *str); +void TlenUrlDecode(char *str); +char *TlenUrlEncode(const char *str); +char *JabberTextEncode(const char *str); +char *JabberTextDecode(const char *str); +char *JabberBase64Encode(const char *buffer, int bufferLen); +char *JabberBase64Decode(const char *buffer, int *resultLen); +int JabberGetPictureType(const char* buf); +void TlenLogMessage(TlenProtocol *proto, HANDLE hContact, DWORD flags, const char *message); +BOOL IsAuthorized(TlenProtocol *proto, const char *jid); +//char *JabberGetVersionText(); +time_t JabberIsoToUnixTime(char *stamp); +time_t TlenTimeToUTC(time_t time); +void JabberSendPresence(TlenProtocol *proto,int status); +void JabberStringAppend(char **str, int *sizeAlloced, const char *fmt, ...); +//char *JabberGetClientJID(char *jid); +// jabber_misc.c +void JabberDBAddEvent(TlenProtocol *proto, HANDLE hContact, int eventType, DWORD flags, PBYTE pBlob, DWORD cbBlob); +void JabberDBAddAuthRequest(TlenProtocol *proto, char *jid, char *nick); +HANDLE JabberDBCreateContact(TlenProtocol *proto, char *jid, char *nick, BOOL temporary); +void JabberContactListCreateGroup(char *groupName); +unsigned long JabberForkThread(void (__cdecl *threadcode)(void*), unsigned long stacksize, void *arg); +// jabber_svc.c +int JabberGetInfo(PROTO_INTERFACE *ptr, HANDLE hContact, int infoType); +int TlenRunSearch(TlenProtocol *proto); +// jabber_advsearch.c +extern JABBER_FIELD_MAP tlenFieldGender[]; +extern JABBER_FIELD_MAP tlenFieldLookfor[]; +extern JABBER_FIELD_MAP tlenFieldStatus[]; +extern JABBER_FIELD_MAP tlenFieldOccupation[]; +extern JABBER_FIELD_MAP tlenFieldPlan[]; + +INT_PTR CALLBACK TlenAdvSearchDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); +char *TlenAdvSearchCreateQuery(HWND hwndDlg, int iqId); + + +#endif + -- cgit v1.2.3