From 94dcc72f13094157f344f284aec4edf0c0f5faa1 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 11 Aug 2013 10:41:37 +0000 Subject: ProtoGetAvatarFormat, ProtoGetAvatarFileFormat, ProtoGetBufferFormat, ProtoGetAvatarExtension - standard helpers for protocol avatars' processing instead of the zoo that existed previously git-svn-id: http://svn.miranda-ng.org/main/trunk@5645 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- bin10/lib/mir_core.lib | Bin 47884 -> 48902 bytes bin10/lib/mir_core64.lib | Bin 43568 -> 44508 bytes bin11/lib/mir_core.lib | Bin 47884 -> 48902 bytes bin11/lib/mir_core64.lib | Bin 43568 -> 44508 bytes include/delphi/m_core.inc | 17 ++++++ include/m_core.h | 23 ++++++- include/m_protocols.h | 16 ++--- plugins/AVS/src/acc.cpp | 6 +- plugins/AVS/src/cache.cpp | 4 +- plugins/AVS/src/commonheaders.h | 2 - plugins/AVS/src/image_utils.cpp | 2 +- plugins/AVS/src/services.cpp | 53 +++++++--------- plugins/AVS/src/utils.cpp | 82 +++---------------------- plugins/AdvaImg/src/main.cpp | 33 +++------- plugins/NewsAggregator/Src/CheckFeed.cpp | 8 +-- plugins/NewsAggregator/Src/Common.h | 1 - plugins/NewsAggregator/Src/Utils.cpp | 26 -------- protocols/AimOscar/src/avatars.cpp | 41 +------------ protocols/AimOscar/src/avatars.h | 2 - protocols/AimOscar/src/services.cpp | 2 +- protocols/FacebookRM/src/avatars.cpp | 6 +- protocols/FacebookRM/src/utils.cpp | 25 -------- protocols/FacebookRM/src/utils.h | 2 - protocols/Gadu-Gadu/src/avatar.cpp | 13 ++-- protocols/Gadu-Gadu/src/services.cpp | 51 ++-------------- protocols/IcqOscarJ/src/icq_avatar.cpp | 64 +++----------------- protocols/IcqOscarJ/src/icq_avatar.h | 2 - protocols/IcqOscarJ/src/icqosc_svcs.cpp | 58 +++++++----------- protocols/JabberG/src/jabber.h | 1 - protocols/JabberG/src/jabber_iqid.cpp | 2 +- protocols/JabberG/src/jabber_misc.cpp | 24 ++------ protocols/JabberG/src/jabber_svc.cpp | 2 +- protocols/JabberG/src/jabber_util.cpp | 16 +---- protocols/JabberG/src/jabber_vcard.cpp | 4 +- protocols/MSN/src/msn_avatar.cpp | 2 +- protocols/MSN/src/msn_contact.cpp | 2 +- protocols/MSN/src/msn_global.h | 2 - protocols/MSN/src/msn_lists.cpp | 6 +- protocols/MSN/src/msn_menu.cpp | 2 +- protocols/MSN/src/msn_misc.cpp | 63 ++++--------------- protocols/MSN/src/msn_msgqueue.cpp | 8 +-- protocols/MSN/src/msn_p2p.cpp | 42 +++++++------ protocols/MSN/src/msn_p2ps.cpp | 34 +++++------ protocols/MSN/src/msn_srv.cpp | 6 +- protocols/MSN/src/msn_std.cpp | 2 +- protocols/MSN/src/msn_svcs.cpp | 4 +- protocols/MSN/src/msn_threads.cpp | 24 ++++---- protocols/Skype/src/skype_avatars.cpp | 33 ---------- protocols/Skype/src/skype_profile.cpp | 3 +- protocols/Skype/src/skype_proto.h | 3 - protocols/Tlen/src/jabber.h | 1 - protocols/Tlen/src/jabber_util.cpp | 11 ---- protocols/Tlen/src/jabber_ws.cpp | 4 +- protocols/Tlen/src/tlen_avatar.cpp | 70 ++++++++-------------- protocols/Twitter/src/connection.cpp | 2 +- protocols/Twitter/src/utility.cpp | 24 -------- protocols/Twitter/src/utility.h | 1 - src/mir_core/mir_core.def | 4 ++ src/mir_core/protos.cpp | 100 +++++++++++++++++++++++++++++++ 59 files changed, 361 insertions(+), 680 deletions(-) diff --git a/bin10/lib/mir_core.lib b/bin10/lib/mir_core.lib index 93b9760ba0..732702727a 100644 Binary files a/bin10/lib/mir_core.lib and b/bin10/lib/mir_core.lib differ diff --git a/bin10/lib/mir_core64.lib b/bin10/lib/mir_core64.lib index ee29aa2f4d..e7c7c251df 100644 Binary files a/bin10/lib/mir_core64.lib and b/bin10/lib/mir_core64.lib differ diff --git a/bin11/lib/mir_core.lib b/bin11/lib/mir_core.lib index 2cce7c5cd6..b4c0a7d628 100644 Binary files a/bin11/lib/mir_core.lib and b/bin11/lib/mir_core.lib differ diff --git a/bin11/lib/mir_core64.lib b/bin11/lib/mir_core64.lib index 7a517c3c86..6a5eac5e41 100644 Binary files a/bin11/lib/mir_core64.lib and b/bin11/lib/mir_core64.lib differ diff --git a/include/delphi/m_core.inc b/include/delphi/m_core.inc index 94ac1a7089..0bfd0aec8f 100644 --- a/include/delphi/m_core.inc +++ b/include/delphi/m_core.inc @@ -534,6 +534,23 @@ function ProtoCallService(const szModule, szName:PAnsiChar; wParam:WPARAM; lPara function ProtoServiceExists(const szModule, szName:PAnsiChar):int; stdcall; external CoreDLL name 'ProtoServiceExists'; +// returns image extension by a PA_* constant or empty string for PA_FORMAT_UNKNOWN +function ProtoGetAvatarExtension(format:int):PWideChar; stdcall; + external CoreDLL name 'ProtoGetAvatarExtension'; + +// detects image format by extension +function ProtoGetAvatarFormat(const szFileName:PWideChar):int; stdcall; + external CoreDLL name 'ProtoGetAvatarFormat'; + +// detects image format by its contents +function ProtoGetAvatarFileFormat(const szFileName:PWideChar):int; stdcall; + external CoreDLL name 'ProtoGetAvatarFileFormat'; + +// returns the image format and extension by the first bytes of picture +// ptszExtension might be NULL +function ProtoGetBufferFormat(const buf:PByte; var ext:PWideChar):int; stdcall; + external CoreDLL name 'ProtoGetBufferFormat'; + /////////////////////////////////////////////////////////////////////////////// // sha1 functions type diff --git a/include/m_core.h b/include/m_core.h index b99bbbafb1..9c4461b407 100644 --- a/include/m_core.h +++ b/include/m_core.h @@ -615,10 +615,29 @@ MIR_CORE_DLL(void) ProtoHookEvent(struct PROTO_INTERFACE *pThis, const char* s MIR_CORE_DLL(HANDLE) ProtoCreateHookableEvent(struct PROTO_INTERFACE *pThis, const char* szService); typedef INT_PTR (__cdecl PROTO_INTERFACE::*ProtoServiceFunc)(WPARAM, LPARAM); -MIR_CORE_DLL(void) ProtoCreateService(struct PROTO_INTERFACE *pThis, const char* szService, ProtoServiceFunc); +MIR_CORE_DLL(void) ProtoCreateService(struct PROTO_INTERFACE *pThis, const char* szService, ProtoServiceFunc); typedef INT_PTR (__cdecl PROTO_INTERFACE::*ProtoServiceFuncParam)(WPARAM, LPARAM, LPARAM); -MIR_CORE_DLL(void) ProtoCreateServiceParam(struct PROTO_INTERFACE *pThis, const char* szService, ProtoServiceFuncParam, LPARAM); +MIR_CORE_DLL(void) ProtoCreateServiceParam(struct PROTO_INTERFACE *pThis, const char* szService, ProtoServiceFuncParam, LPARAM); +#endif + +// avatar support functions + +// returns image extension by a PA_* constant or empty string for PA_FORMAT_UNKNOWN +MIR_CORE_DLL(const TCHAR*) ProtoGetAvatarExtension(int format); + +// detects image format by extension +MIR_CORE_DLL(int) ProtoGetAvatarFormat(const TCHAR *ptszFileName); + +// detects image format by its contents +MIR_CORE_DLL(int) ProtoGetAvatarFileFormat(const TCHAR *ptszFileName); + +// returns the image format and extension by the first bytes of picture +// ptszExtension might be NULL +#if defined( __cplusplus ) + MIR_CORE_DLL(int) ProtoGetBufferFormat(const void *buf, const TCHAR **ptszExtension = NULL); +#else + MIR_CORE_DLL(int) ProtoGetBufferFormat(const void *buf, const TCHAR **ptszExtension); #endif /////////////////////////////////////////////////////////////////////////////// diff --git a/include/m_protocols.h b/include/m_protocols.h index 483d581401..0604217424 100644 --- a/include/m_protocols.h +++ b/include/m_protocols.h @@ -392,14 +392,14 @@ ProtoBroadcastAck(), listeners must hook ME_PROTO_ACK, note that lParam = ACKDAT */ -#define PA_FORMAT_UNKNOWN 0 // the protocol can not determine much about the "bitmap" -#define PA_FORMAT_PNG 1 // the image is PNG -#define PA_FORMAT_JPEG 2 -#define PA_FORMAT_ICON 3 -#define PA_FORMAT_BMP 4 -#define PA_FORMAT_GIF 5 -#define PA_FORMAT_SWF 6 -#define PA_FORMAT_XML 7 +#define PA_FORMAT_UNKNOWN 0 // the protocol can not determine much about the "bitmap" +#define PA_FORMAT_PNG 1 // the image is PNG +#define PA_FORMAT_JPEG 2 +#define PA_FORMAT_ICON 3 +#define PA_FORMAT_BMP 4 +#define PA_FORMAT_GIF 5 +#define PA_FORMAT_SWF 6 +#define PA_FORMAT_XML 7 typedef struct { int cbSize; // sizeof() diff --git a/plugins/AVS/src/acc.cpp b/plugins/AVS/src/acc.cpp index 971b29005f..a0d63c6b81 100644 --- a/plugins/AVS/src/acc.cpp +++ b/plugins/AVS/src/acc.cpp @@ -149,7 +149,7 @@ void StartFlash(HWND hwnd, ACCData* data) else if (data->proto[0] != '\0') { protoPicCacheEntry *ace = NULL; - for(int i = 0; i < g_MyAvatars.getCount(); i++) + for (int i = 0; i < g_MyAvatars.getCount(); i++) { if (!lstrcmpA(data->proto, g_MyAvatars[i].szProtoname)) { @@ -159,7 +159,7 @@ void StartFlash(HWND hwnd, ACCData* data) } if (ace != NULL && ace->szFilename != NULL) - format = GetImageFormat(ace->szFilename); + format = ProtoGetAvatarFormat(ace->szFilename); else format = 0; } @@ -365,7 +365,7 @@ void StartAnimatedGif(HWND hwnd, ACCData* data) if (ace == NULL) return; - int format = GetImageFormat(ace->szFilename); + int format = ProtoGetAvatarFormat(ace->szFilename); if (format != PA_FORMAT_GIF) return; diff --git a/plugins/AVS/src/cache.cpp b/plugins/AVS/src/cache.cpp index a59119508f..846ec14013 100644 --- a/plugins/AVS/src/cache.cpp +++ b/plugins/AVS/src/cache.cpp @@ -35,7 +35,7 @@ static CacheNode *AllocCacheBlock() CacheNode *allocedBlock = (CacheNode*)malloc(CACHE_BLOCKSIZE * sizeof(struct CacheNode)); ZeroMemory((void *)allocedBlock, sizeof(struct CacheNode) * CACHE_BLOCKSIZE); - for(int i = 0; i < CACHE_BLOCKSIZE - 1; i++) + for (int i = 0; i < CACHE_BLOCKSIZE - 1; i++) allocedBlock[i].pNextNode = &allocedBlock[i + 1]; // pre-link the alloced block if (g_Cache == NULL) // first time only... @@ -65,7 +65,7 @@ void UnloadCache(void) if (cc->ace.hbmPic != 0) DeleteObject(cc->ace.hbmPic); - for(int i = 0; i < g_curBlock; i++) + for (int i = 0; i < g_curBlock; i++) free(g_cacheBlocks[i]); free(g_cacheBlocks); diff --git a/plugins/AVS/src/commonheaders.h b/plugins/AVS/src/commonheaders.h index 0cab3148b9..063a5ece20 100644 --- a/plugins/AVS/src/commonheaders.h +++ b/plugins/AVS/src/commonheaders.h @@ -122,8 +122,6 @@ extern HANDLE hEventChanged, hEventContactAvatarChanged, hMyAvatarChanged; int GetFileHash(TCHAR* filename); DWORD GetFileSize(TCHAR *szFilename); -const TCHAR *GetFormatExtension(int format); -int GetImageFormat(TCHAR *filename); void MakePathRelative(HANDLE hContact); void MakePathRelative(HANDLE hContact, TCHAR *dest); diff --git a/plugins/AVS/src/image_utils.cpp b/plugins/AVS/src/image_utils.cpp index 9b926ccbee..3092e47519 100644 --- a/plugins/AVS/src/image_utils.cpp +++ b/plugins/AVS/src/image_utils.cpp @@ -339,7 +339,7 @@ void AddToStack(int *stack, int *topPos, int x, int y) int i; // Already is in stack? - for(i = 0 ; i < *topPos ; i += 2) + for (i = 0 ; i < *topPos ; i += 2) { if (stack[i] == x && stack[i+1] == y) return; diff --git a/plugins/AVS/src/services.cpp b/plugins/AVS/src/services.cpp index bb1014d70a..56dd9e1661 100644 --- a/plugins/AVS/src/services.cpp +++ b/plugins/AVS/src/services.cpp @@ -406,36 +406,29 @@ struct SaveProtocolData { void SaveImage(SaveProtocolData &d, char *protocol, int format) { - if (Proto_IsAvatarFormatSupported(protocol, format)) - { - mir_sntprintf(d.image_file_name, SIZEOF(d.image_file_name), _T("%s%s"), d.temp_file, GetFormatExtension(format)); - if (!BmpFilterSaveBitmapT(d.hBmpProto, d.image_file_name, format == PA_FORMAT_JPEG ? JPEG_QUALITYSUPERB : 0)) - { - if (d.max_size != 0 && GetFileSize(d.image_file_name) > d.max_size) - { - DeleteFile(d.image_file_name); + if ( !Proto_IsAvatarFormatSupported(protocol, format)) + return; - if (format == PA_FORMAT_JPEG) - { - // Try with lower quality - if (!BmpFilterSaveBitmapT(d.hBmpProto, d.image_file_name, JPEG_QUALITYGOOD)) - { - if (GetFileSize(d.image_file_name) > d.max_size) - { - DeleteFile(d.image_file_name); - d.need_smaller_size = TRUE; - } - else - d.saved = TRUE; - } - } - else + mir_sntprintf(d.image_file_name, SIZEOF(d.image_file_name), _T("%s%s"), d.temp_file, ProtoGetAvatarExtension(format)); + if ( BmpFilterSaveBitmapT(d.hBmpProto, d.image_file_name, format == PA_FORMAT_JPEG ? JPEG_QUALITYSUPERB : 0)) + return; + + if (d.max_size != 0 && GetFileSize(d.image_file_name) > d.max_size) { + DeleteFile(d.image_file_name); + + if (format == PA_FORMAT_JPEG) { + // Try with lower quality + if (!BmpFilterSaveBitmapT(d.hBmpProto, d.image_file_name, JPEG_QUALITYGOOD)) { + if (GetFileSize(d.image_file_name) > d.max_size) { + DeleteFile(d.image_file_name); d.need_smaller_size = TRUE; + } + else d.saved = TRUE; } - else - d.saved = TRUE; } + else d.need_smaller_size = TRUE; } + else d.saved = TRUE; } static int SetProtoMyAvatar(char *protocol, HBITMAP hBmp, TCHAR *originalFilename, int originalFormat, BOOL square, BOOL grow) @@ -576,7 +569,7 @@ static int InternalSetMyAvatar(char *protocol, TCHAR *szFinalName, SetMyAvatarHo { HANDLE hFile = 0; - int format = GetImageFormat(szFinalName); + int format = ProtoGetAvatarFormat(szFinalName); if (format == PA_FORMAT_UNKNOWN || (hFile = CreateFile(szFinalName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) return -3; @@ -867,7 +860,7 @@ INT_PTR DrawAvatarPicture(WPARAM wParam, LPARAM lParam) if (r->szProto == NULL) return 0; - for(int i = 0; i < g_ProtoPictures.getCount(); i++) { + for (int i = 0; i < g_ProtoPictures.getCount(); i++) { protoPicCacheEntry& p = g_ProtoPictures[i]; if ( !lstrcmpA(p.szProtoname, r->szProto) && lstrlenA(r->szProto) == lstrlenA(p.szProtoname) && p.hbmPic != 0) { ace = (AVATARCACHEENTRY *)&g_ProtoPictures[i]; @@ -911,7 +904,7 @@ INT_PTR GetMyAvatar(WPARAM wParam, LPARAM lParam) if (lParam == 0 || IsBadReadPtr(szProto, 4)) return 0; - for(int i = 0; i < g_MyAvatars.getCount(); i++) + for (int i = 0; i < g_MyAvatars.getCount(); i++) if (!lstrcmpA(szProto, g_MyAvatars[i].szProtoname) && g_MyAvatars[i].hbmPic != 0) return (INT_PTR)&g_MyAvatars[i]; @@ -925,7 +918,7 @@ static void ReloadMyAvatar(LPVOID lpParam) char *szProto = (char *)lpParam; mir_sleep(500); - for(int i = 0; !g_shutDown && i < g_MyAvatars.getCount(); i++) { + for (int i = 0; !g_shutDown && i < g_MyAvatars.getCount(); i++) { char *myAvatarProto = g_MyAvatars[i].szProtoname; if (szProto[0] == 0) { @@ -959,7 +952,7 @@ INT_PTR ReportMyAvatarChanged(WPARAM wParam, LPARAM lParam) if (proto == NULL) return -1; - for(int i = 0; i < g_MyAvatars.getCount(); i++) { + for (int i = 0; i < g_MyAvatars.getCount(); i++) { if (g_MyAvatars[i].dwFlags & AVS_IGNORENOTIFY) continue; diff --git a/plugins/AVS/src/utils.cpp b/plugins/AVS/src/utils.cpp index 1d0494e258..7aa9f205d3 100644 --- a/plugins/AVS/src/utils.cpp +++ b/plugins/AVS/src/utils.cpp @@ -398,6 +398,8 @@ void protoPicCacheEntry::clear() memset(this, 0, sizeof(avatarCacheEntry)); } +/////////////////////////////////////////////////////////////////////////////////////////////////// + BOOL Proto_IsAvatarsEnabled(const char *proto) { if ( ProtoServiceExists(proto, PS_GETAVATARCAPS)) @@ -451,13 +453,8 @@ void Proto_GetAvatarMaxSize(const char *proto, int *width, int *height) BOOL Proto_NeedDelaysForAvatars(const char *proto) { - if ( ProtoServiceExists(proto, PS_GETAVATARCAPS)) { - int ret = CallProtoService(proto, PS_GETAVATARCAPS, AF_DONTNEEDDELAYS, 0); - if (ret > 0) - return FALSE; - else - return TRUE; - } + if ( ProtoServiceExists(proto, PS_GETAVATARCAPS)) + return CallProtoService(proto, PS_GETAVATARCAPS, AF_DONTNEEDDELAYS, 0) <= 0; return TRUE; } @@ -492,7 +489,7 @@ protoPicCacheEntry *GetProtoDefaultAvatar(HANDLE hContact) { char *szProto = GetContactProto(hContact); if (szProto) { - for(int i = 0; i < g_ProtoPictures.getCount(); i++) { + for (int i = 0; i < g_ProtoPictures.getCount(); i++) { protoPicCacheEntry& p = g_ProtoPictures[i]; if ( !lstrcmpA(p.szProtoname, szProto) && p.hbmPic != NULL) return &g_ProtoPictures[i]; @@ -552,7 +549,7 @@ void DeleteGlobalUserAvatar() void SetIgnoreNotify(char *protocol, BOOL ignore) { - for(int i = 0; i < g_MyAvatars.getCount(); i++) { + for (int i = 0; i < g_MyAvatars.getCount(); i++) { if (protocol == NULL || !lstrcmpA(g_MyAvatars[i].szProtoname, protocol)) { if (ignore) g_MyAvatars[i].dwFlags |= AVS_IGNORENOTIFY; @@ -562,73 +559,10 @@ void SetIgnoreNotify(char *protocol, BOOL ignore) } } -///////////////////////////////////////////////////////////////////////////////////////// - -const TCHAR *GetFormatExtension(int format) -{ - if (format == PA_FORMAT_PNG) - return _T(".png"); - if (format == PA_FORMAT_JPEG) - return _T(".jpg"); - if (format == PA_FORMAT_ICON) - return _T(".ico"); - if (format == PA_FORMAT_BMP) - return _T(".bmp"); - if (format == PA_FORMAT_GIF) - return _T(".gif"); - if (format == PA_FORMAT_SWF) - return _T(".swf"); - if (format == PA_FORMAT_XML) - return _T(".xml"); - - return NULL; -} - -int GetImageFormat(TCHAR *filename) -{ - size_t len = lstrlen(filename); - - if (len < 5) - return PA_FORMAT_UNKNOWN; - - if (_tcsicmp(_T(".png"), &filename[len-4]) == 0) - return PA_FORMAT_PNG; - - if (_tcsicmp(_T(".jpg"), &filename[len-4]) == 0 || _tcsicmp(_T(".jpeg"), &filename[len-4]) == 0) - return PA_FORMAT_JPEG; - - if (_tcsicmp(_T(".ico"), &filename[len-4]) == 0) - return PA_FORMAT_ICON; - - if (_tcsicmp(_T(".bmp"), &filename[len-4]) == 0 || _tcsicmp(_T(".rle"), &filename[len-4]) == 0) - return PA_FORMAT_BMP; - - if (_tcsicmp(_T(".gif"), &filename[len-4]) == 0) - return PA_FORMAT_GIF; - - if (_tcsicmp(_T(".swf"), &filename[len-4]) == 0) - return PA_FORMAT_SWF; - - if (_tcsicmp(_T(".xml"), &filename[len-4]) == 0) - return PA_FORMAT_XML; - - return PA_FORMAT_UNKNOWN; -} - /////////////////////////////////////////////////////////////////////////////////////////////////////// DWORD GetFileSize(TCHAR *szFilename) { - HANDLE hFile = CreateFile(szFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - if (hFile == INVALID_HANDLE_VALUE) - return 0; - - DWORD low = GetFileSize(hFile, NULL); - - CloseHandle(hFile); - - if (low == INVALID_FILE_SIZE) - return 0; - - return low; + struct _stat info; + return ( _tstat(szFilename, &info) == -1) ? 0 : info.st_size; } diff --git a/plugins/AdvaImg/src/main.cpp b/plugins/AdvaImg/src/main.cpp index cb4500501d..4fcd79905f 100644 --- a/plugins/AdvaImg/src/main.cpp +++ b/plugins/AdvaImg/src/main.cpp @@ -795,12 +795,6 @@ extern "C" BOOL __declspec(dllexport) dib2mempng( BITMAPINFO* pbmi, png_byte* pD return TRUE; } -///////////////////////////////////////////////////////////////////////////////////////// -// Standard Miranda structures & functions - -static HANDLE hDib2mempng = NULL; -static HANDLE hMempng2Dib = NULL; - /////////////////////////////////////////////////////////////////////////////// // Load - initializes the plugin instance @@ -1195,21 +1189,17 @@ void FI_Populate(void) feif.FI_CorrectBitmap32Alpha = FI_CorrectBitmap32Alpha; } -static HANDLE hGetIF, hLoad, hLoadFromMem, hSave, hUnload, hResize, hGetVersion; - static int IMGSERVICE_Load() { FI_Populate(); - hDib2mempng = CreateServiceFunction( MS_DIB2PNG, serviceDib2Png ); - hMempng2Dib = CreateServiceFunction( MS_PNG2DIB, servicePng2Dib ); - hGetIF = CreateServiceFunction(MS_IMG_GETINTERFACE, serviceGetInterface); - hLoad = CreateServiceFunction(MS_IMG_LOAD, serviceLoad); - hLoadFromMem = CreateServiceFunction(MS_IMG_LOADFROMMEM, serviceLoadFromMem); - hSave = CreateServiceFunction(MS_IMG_SAVE, serviceSave); - hUnload = CreateServiceFunction(MS_IMG_UNLOAD, serviceUnload); - hResize = CreateServiceFunction(MS_IMG_RESIZE, serviceBmpFilterResizeBitmap); - hGetVersion = CreateServiceFunction(MS_IMG_GETIFVERSION, serviceGetVersion); + CreateServiceFunction(MS_IMG_GETINTERFACE, serviceGetInterface); + CreateServiceFunction(MS_IMG_LOAD, serviceLoad); + CreateServiceFunction(MS_IMG_LOADFROMMEM, serviceLoadFromMem); + CreateServiceFunction(MS_IMG_SAVE, serviceSave); + CreateServiceFunction(MS_IMG_UNLOAD, serviceUnload); + CreateServiceFunction(MS_IMG_RESIZE, serviceBmpFilterResizeBitmap); + CreateServiceFunction(MS_IMG_GETIFVERSION, serviceGetVersion); return 0; } @@ -1223,15 +1213,6 @@ extern "C" int __declspec(dllexport) Load(void) static int IMGSERVICE_Unload( void ) { - DestroyServiceFunction( hDib2mempng ); - DestroyServiceFunction( hMempng2Dib ); - DestroyServiceFunction( hGetIF ); - DestroyServiceFunction( hLoad ); - DestroyServiceFunction( hLoadFromMem ); - DestroyServiceFunction( hSave ); - DestroyServiceFunction( hUnload ); - DestroyServiceFunction( hResize ); - DestroyServiceFunction( hGetVersion ); return 0; } diff --git a/plugins/NewsAggregator/Src/CheckFeed.cpp b/plugins/NewsAggregator/Src/CheckFeed.cpp index 36ef8165a1..b0286357ce 100644 --- a/plugins/NewsAggregator/Src/CheckFeed.cpp +++ b/plugins/NewsAggregator/Src/CheckFeed.cpp @@ -177,7 +177,7 @@ VOID CheckCurrentFeed(HANDLE hContact) if (!db_get_ts(hContact, MODULE, "Nick", &dbVar)) { TCHAR *ext = _tcsrchr((TCHAR *)url, _T('.')) + 1; - pai.format = GetImageFormat(ext); + pai.format = ProtoGetAvatarFormat(ext); TCHAR *filename = dbVar.ptszVal; mir_sntprintf(pai.filename, SIZEOF(pai.filename), _T("%s\\%s.%s"), tszRoot, filename, ext); @@ -412,7 +412,7 @@ VOID CheckCurrentFeed(HANDLE hContact) if (!db_get_ts(hContact, MODULE, "Nick", &dbVar)) { TCHAR *ext = _tcsrchr((TCHAR *)url, _T('.')) + 1; - pai.format = GetImageFormat(ext); + pai.format = ProtoGetAvatarFormat(ext); TCHAR *filename = dbVar.ptszVal; mir_sntprintf(pai.filename, SIZEOF(pai.filename), _T("%s\\%s.%s"), tszRoot, filename, ext); @@ -639,7 +639,7 @@ VOID CheckCurrentFeedAvatar(HANDLE hContact) if (!db_get_ts(hContact, MODULE, "Nick", &dbVar)) { TCHAR *ext = _tcsrchr((TCHAR *)url, _T('.')) + 1; - pai.format = GetImageFormat(ext); + pai.format = ProtoGetAvatarFormat(ext); TCHAR *filename = dbVar.ptszVal; mir_sntprintf(pai.filename, SIZEOF(pai.filename), _T("%s\\%s.%s"), tszRoot, filename, ext); @@ -673,7 +673,7 @@ VOID CheckCurrentFeedAvatar(HANDLE hContact) if (!db_get_ts(hContact, MODULE, "Nick", &dbVar)) { TCHAR *ext = _tcsrchr((TCHAR *)url, _T('.')) + 1; - pai.format = GetImageFormat(ext); + pai.format = ProtoGetAvatarFormat(ext); TCHAR *filename = dbVar.ptszVal; mir_sntprintf(pai.filename, SIZEOF(pai.filename), _T("%s\\%s.%s"), tszRoot, filename, ext); diff --git a/plugins/NewsAggregator/Src/Common.h b/plugins/NewsAggregator/Src/Common.h index fa9117462d..ed19e6b132 100644 --- a/plugins/NewsAggregator/Src/Common.h +++ b/plugins/NewsAggregator/Src/Common.h @@ -131,7 +131,6 @@ TCHAR* CheckFeed(TCHAR* tszURL, HWND hwndDlg); void UpdateMenu(BOOL State); int ImportFeedsDialog(); VOID ClearText(TCHAR *&message); -int GetImageFormat(const TCHAR *ext); BOOL DownloadFile(LPCTSTR tszURL, LPCTSTR tszLocal); int StrReplace(TCHAR *lpszOld, TCHAR *lpszNew, TCHAR *&lpszStr); void CreateAuthString(char *auth, HANDLE hContact, HWND hwndDlg); diff --git a/plugins/NewsAggregator/Src/Utils.cpp b/plugins/NewsAggregator/Src/Utils.cpp index 336d67993d..a47e6d261f 100644 --- a/plugins/NewsAggregator/Src/Utils.cpp +++ b/plugins/NewsAggregator/Src/Utils.cpp @@ -58,32 +58,6 @@ static void arrayToHex(BYTE *data, size_t datasz, char *res) *resptr = '\0'; } -int GetImageFormat(const TCHAR *ext) -{ - if (!lstrcmp(ext, _T(".jpg")) || !lstrcmp(ext, _T(".jpeg"))) - return PA_FORMAT_JPEG; - - if (!lstrcmp(ext, _T(".png"))) - return PA_FORMAT_PNG; - - if (!lstrcmp(ext, _T(".gif"))) - return PA_FORMAT_GIF; - - if (!lstrcmp(ext, _T(".ico"))) - return PA_FORMAT_ICON; - - if (!lstrcmp(ext, _T(".bmp"))) - return PA_FORMAT_BMP; - - if (!lstrcmp(ext, _T(".swf"))) - return PA_FORMAT_SWF; - - if (!lstrcmp(ext, _T(".xml"))) - return PA_FORMAT_XML; - - return PA_FORMAT_UNKNOWN; -} - VOID GetNewsData(TCHAR *tszUrl, char **szData, HANDLE hContact, HWND hwndDlg) { NETLIBHTTPREQUEST nlhr = {0}; diff --git a/protocols/AimOscar/src/avatars.cpp b/protocols/AimOscar/src/avatars.cpp index 7f54961398..dea8de177e 100644 --- a/protocols/AimOscar/src/avatars.cpp +++ b/protocols/AimOscar/src/avatars.cpp @@ -102,7 +102,7 @@ void CAimProto::avatar_retrieval_handler(const char* sn, const char* hash, const if (data_len > 0) { const TCHAR *type; - AI.format = detect_image_type(data, type); + AI.format = ProtoGetBufferFormat(data, &type); get_avatar_filename(AI.hContact, AI.filename, SIZEOF(AI.filename), type); int fileId = _topen(AI.filename, _O_CREAT | _O_TRUNC | _O_WRONLY | O_BINARY, _S_IREAD | _S_IWRITE); @@ -123,45 +123,6 @@ void CAimProto::avatar_retrieval_handler(const char* sn, const char* hash, const ProtoBroadcastAck(AI.hContact, ACKTYPE_AVATAR, res ? ACKRESULT_SUCCESS : ACKRESULT_FAILED, &AI, 0); } -int detect_image_type(const char* stream, const TCHAR* &type_ret) -{ - if (stream[0]=='G'&&stream[1]=='I'&&stream[2]=='F') - { - type_ret = _T(".gif"); - return PA_FORMAT_GIF; - } - else if (stream[1]=='P'&&stream[2]=='N'&&stream[3]=='G') - { - type_ret = _T(".png"); - return PA_FORMAT_PNG; - } - else if (stream[0]=='B'&&stream[1]=='M') - { - type_ret = _T(".bmp"); - return PA_FORMAT_BMP; - } - else//assume jpg - { - type_ret = _T(".jpg"); - return PA_FORMAT_JPEG; - } -} - -int detect_image_type(const TCHAR* file) -{ - const TCHAR *ext = _tcsrchr(file, '.'); - if (ext == NULL) - return PA_FORMAT_UNKNOWN; - if (_tcsicmp(ext, _T(".gif")) == 0) - return PA_FORMAT_GIF; - else if (_tcsicmp(ext, _T(".bmp")) == 0) - return PA_FORMAT_BMP; - else if (_tcsicmp(ext, _T(".png")) == 0) - return PA_FORMAT_PNG; - else - return PA_FORMAT_JPEG; -} - void CAimProto::init_custom_folders(void) { if (init_cst_fld_ran) return; diff --git a/protocols/AimOscar/src/avatars.h b/protocols/AimOscar/src/avatars.h index 69c7ec49bf..1188a1ec82 100644 --- a/protocols/AimOscar/src/avatars.h +++ b/protocols/AimOscar/src/avatars.h @@ -46,8 +46,6 @@ struct avatar_up_req { mir_free(data1); mir_free(data2); } }; -int detect_image_type(const char* stream, const TCHAR* &type_ret); -int detect_image_type(const TCHAR* file); bool get_avatar_hash(const TCHAR* file, char* hash, char** data, unsigned short &size); void rescale_image(char *data, unsigned short size, char *&data1, unsigned short &size1); diff --git a/protocols/AimOscar/src/services.cpp b/protocols/AimOscar/src/services.cpp index bfc0ca83ed..721751016c 100644 --- a/protocols/AimOscar/src/services.cpp +++ b/protocols/AimOscar/src/services.cpp @@ -384,7 +384,7 @@ INT_PTR CAimProto::GetAvatarInfo(WPARAM wParam, LPARAM lParam) return GAIR_SUCCESS; case GAIR_WAITFOR: - AI->format = detect_image_type(AI->filename); + AI->format = ProtoGetAvatarFormat(AI->filename); break; default: diff --git a/protocols/FacebookRM/src/avatars.cpp b/protocols/FacebookRM/src/avatars.cpp index 58b7f4f504..5540bd1848 100644 --- a/protocols/FacebookRM/src/avatars.cpp +++ b/protocols/FacebookRM/src/avatars.cpp @@ -41,10 +41,8 @@ bool FacebookProto::GetDbAvatarInfo(PROTO_AVATAR_INFORMATIONT &ai, std::string * db_free(&dbv); ai.hContact = ai.hContact; - ai.format = ext_to_format(ext); - _tcsncpy(ai.filename, filename.c_str(), SIZEOF(ai.filename)); - ai.filename[SIZEOF(ai.filename)-1] = 0; - + _tcsncpy_s(ai.filename, SIZEOF(ai.filename), filename.c_str(), _TRUNCATE); + ai.format = ProtoGetAvatarFormat(ai.filename); return true; } } diff --git a/protocols/FacebookRM/src/utils.cpp b/protocols/FacebookRM/src/utils.cpp index d02b3901eb..ad9bf8f246 100644 --- a/protocols/FacebookRM/src/utils.cpp +++ b/protocols/FacebookRM/src/utils.cpp @@ -489,28 +489,3 @@ int utils::debug::log(std::string file_name, std::string text) return EXIT_SUCCESS; } - -struct -{ - char *ext; - int fmt; -} -static formats[] = { - { ".png", PA_FORMAT_PNG }, - { ".jpg", PA_FORMAT_JPEG }, - { ".jpeg", PA_FORMAT_JPEG }, - { ".ico", PA_FORMAT_ICON }, - { ".bmp", PA_FORMAT_BMP }, - { ".gif", PA_FORMAT_GIF }, -}; - -int ext_to_format(const std::string &ext) -{ - for(size_t i=0; iheadersCount; i++) { NETLIBHTTPHEADER& tHeader = resp->headers[i]; - if (!_stricmp(tHeader.szName, "Content-Type")){ + if (!_stricmp(tHeader.szName, "Content-Type")) { if (!_stricmp(tHeader.szValue, "image/jpeg")) avatarType = PA_FORMAT_JPEG; else if (!_stricmp(tHeader.szValue, "image/gif")) diff --git a/protocols/Gadu-Gadu/src/services.cpp b/protocols/Gadu-Gadu/src/services.cpp index adb9e792d6..6fef25e6d9 100644 --- a/protocols/Gadu-Gadu/src/services.cpp +++ b/protocols/Gadu-Gadu/src/services.cpp @@ -168,37 +168,6 @@ INT_PTR GGPROTO::getavatarcaps(WPARAM wParam, LPARAM lParam) return 0; } -int GetImageFormat(TCHAR *filename) -{ - size_t len = lstrlen(filename); - - if (len < 5) - return PA_FORMAT_UNKNOWN; - - if (_tcsicmp(_T(".png"), &filename[len-4]) == 0) - return PA_FORMAT_PNG; - - if (_tcsicmp(_T(".jpg"), &filename[len-4]) == 0 || _tcsicmp(_T(".jpeg"), &filename[len-4]) == 0) - return PA_FORMAT_JPEG; - - if (_tcsicmp(_T(".ico"), &filename[len-4]) == 0) - return PA_FORMAT_ICON; - - if (_tcsicmp(_T(".bmp"), &filename[len-4]) == 0 || _tcsicmp(_T(".rle"), &filename[len-4]) == 0) - return PA_FORMAT_BMP; - - if (_tcsicmp(_T(".gif"), &filename[len-4]) == 0) - return PA_FORMAT_GIF; - - if (_tcsicmp(_T(".swf"), &filename[len-4]) == 0) - return PA_FORMAT_SWF; - - if (_tcsicmp(_T(".xml"), &filename[len-4]) == 0) - return PA_FORMAT_XML; - - return PA_FORMAT_UNKNOWN; -} - ////////////////////////////////////////////////////////// // gets avatar information // registered as ProtoService PS_GETAVATARINFOT @@ -226,7 +195,7 @@ INT_PTR GGPROTO::getavatarinfo(WPARAM wParam, LPARAM lParam) if ((_tcslen(dbv.ptszVal)>0) && db_get_b(pai->hContact, "ContactPhoto", "Locked", 0)){ netlog("getavatarinfo(): Incoming request for avatar information. Contact has assigned Locked ContactPhoto. return GAIR_SUCCESS"); _tcscpy_s(pai->filename, SIZEOF(pai->filename) ,dbv.ptszVal); - pai->format = GetImageFormat(pai->filename); + pai->format = ProtoGetAvatarFormat(pai->filename); db_free(&dbv); return GAIR_SUCCESS; } @@ -357,20 +326,10 @@ INT_PTR GGPROTO::setmyavatar(WPARAM wParam, LPARAM lParam) m_tszUserName, MB_OK | MB_ICONINFORMATION); return -1; } - - - TCHAR *szAvType = _tcsrchr(szFilename, '.'); - int iAvType = -1; - szAvType++; - if (!_tcsicmp(szAvType, _T("jpg"))) - iAvType = PA_FORMAT_JPEG; - else if (!_tcsicmp(szAvType, _T("gif"))) - iAvType = PA_FORMAT_GIF; - else if (!_tcsicmp(szAvType, _T("png"))) - iAvType = PA_FORMAT_PNG; - - if ( iAvType == -1) { - netlog("setmyavatar(): Failed to set user avatar. File %S has incompatible extansion.", szAvType); + + int iAvType = ProtoGetAvatarFormat(szFilename); + if ( iAvType == PA_FORMAT_UNKNOWN) { + netlog("setmyavatar(): Failed to set user avatar. File %s has incompatible extension.", szFilename); return -1; } diff --git a/protocols/IcqOscarJ/src/icq_avatar.cpp b/protocols/IcqOscarJ/src/icq_avatar.cpp index 4058cf4649..b3f02e8f13 100644 --- a/protocols/IcqOscarJ/src/icq_avatar.cpp +++ b/protocols/IcqOscarJ/src/icq_avatar.cpp @@ -177,55 +177,8 @@ void CIcqProto::GetAvatarFileName(int dwUin, const char *szUid, TCHAR *pszDest, void AddAvatarExt(int dwFormat, TCHAR *pszDest) { - if (dwFormat == PA_FORMAT_JPEG) - _tcscat(pszDest, _T(".jpg")); - else if (dwFormat == PA_FORMAT_GIF) - _tcscat(pszDest, _T(".gif")); - else if (dwFormat == PA_FORMAT_PNG) - _tcscat(pszDest, _T(".png")); - else if (dwFormat == PA_FORMAT_BMP) - _tcscat(pszDest, _T(".bmp")); - else if (dwFormat == PA_FORMAT_XML) - _tcscat(pszDest, _T(".xml")); - else if (dwFormat == PA_FORMAT_SWF) - _tcscat(pszDest, _T(".swf")); - else - _tcscat(pszDest, _T(".dat")); -} - - -int DetectAvatarFormatBuffer(const char *pBuffer) -{ - if (!strncmp(pBuffer, "%PNG", 4)) - return PA_FORMAT_PNG; - - if (!strncmp(pBuffer, "GIF8", 4)) - return PA_FORMAT_GIF; - - if (!_strnicmp(pBuffer, "szFile) + 6)); - - _tcscpy(tszImageFile, pCookieData->szFile); - AddAvatarExt(dwPaFormat, tszImageFile); + const TCHAR *ptszExt; + int dwPaFormat = ProtoGetBufferFormat(pBuffer, &ptszExt); + TCHAR tszImageFile[MAX_PATH]; + mir_sntprintf(tszImageFile, SIZEOF(tszImageFile), _T("%s%s"), pCookieData->szFile, ptszExt); ppro->setByte(pCookieData->hContact, "AvatarType", (BYTE)dwPaFormat); ai.format = dwPaFormat; // set the format diff --git a/protocols/IcqOscarJ/src/icq_avatar.h b/protocols/IcqOscarJ/src/icq_avatar.h index 954dd28226..b6193c7717 100644 --- a/protocols/IcqOscarJ/src/icq_avatar.h +++ b/protocols/IcqOscarJ/src/icq_avatar.h @@ -118,8 +118,6 @@ __inline static void SAFE_DELETE(avatars_request **p) { SAFE_DELETE((MZeroedObje #define ART_UPLOAD 2 #define ART_BLOCK 4 - -int DetectAvatarFormat(const TCHAR *szFile); void AddAvatarExt(int dwFormat, TCHAR *pszDest); BYTE* calcMD5HashOfFile(const TCHAR *szFile); diff --git a/protocols/IcqOscarJ/src/icqosc_svcs.cpp b/protocols/IcqOscarJ/src/icqosc_svcs.cpp index 8bd8195462..ff04d94b85 100644 --- a/protocols/IcqOscarJ/src/icqosc_svcs.cpp +++ b/protocols/IcqOscarJ/src/icqosc_svcs.cpp @@ -333,49 +333,37 @@ INT_PTR CIcqProto::GetAvatarCaps(WPARAM wParam, LPARAM lParam) if (wParam == AF_MAXSIZE) { POINT *size = (POINT*)lParam; - - if (size) - { + if (size) { size->x = 64; size->y = 64; - - return 0; } + return 0; } - else if (wParam == AF_PROPORTION) - { + + if (wParam == AF_PROPORTION) return PIP_NONE; - } - else if (wParam == AF_FORMATSUPPORTED) - { - if (lParam == PA_FORMAT_JPEG || lParam == PA_FORMAT_GIF || lParam == PA_FORMAT_XML || lParam == PA_FORMAT_BMP) - return 1; - else - return 0; - } - else if (wParam == AF_ENABLED) - { - if (m_bSsiEnabled && m_bAvatarsEnabled) - return 1; - else - return 0; - } - else if (wParam == AF_DONTNEEDDELAYS) - { + + if (wParam == AF_FORMATSUPPORTED) + return (lParam == PA_FORMAT_JPEG || lParam == PA_FORMAT_GIF || lParam == PA_FORMAT_XML || lParam == PA_FORMAT_BMP); + + if (wParam == AF_ENABLED) + return (m_bSsiEnabled && m_bAvatarsEnabled); + + if (wParam == AF_DONTNEEDDELAYS) return 0; - } - else if (wParam == AF_MAXFILESIZE) - { // server accepts images of 7168 bytees, not bigger + + // server accepts images of 7168 bytees, not bigger + if (wParam == AF_MAXFILESIZE) return 7168; - } - else if (wParam == AF_DELAYAFTERFAIL) - { // do not request avatar again if server gave an error + + // do not request avatar again if server gave an error + if (wParam == AF_DELAYAFTERFAIL) return 1 * 60 * 60 * 1000; // one hour - } - else if (wParam == AF_FETCHALWAYS) - { // avatars can be fetched all the time (server only operation) + + // avatars can be fetched all the time (server only operation) + if (wParam == AF_FETCHALWAYS) return 1; - } + return 0; } @@ -561,7 +549,7 @@ INT_PTR CIcqProto::SetMyAvatar(WPARAM wParam, LPARAM lParam) if (tszFile) { // set file for avatar - int dwPaFormat = DetectAvatarFormat(tszFile); + int dwPaFormat = ::ProtoGetAvatarFileFormat(tszFile); if (dwPaFormat != PA_FORMAT_XML) { // if it should be image, check if it is valid diff --git a/protocols/JabberG/src/jabber.h b/protocols/JabberG/src/jabber.h index 4c3108726d..f36d0822b5 100644 --- a/protocols/JabberG/src/jabber.h +++ b/protocols/JabberG/src/jabber.h @@ -753,7 +753,6 @@ void __stdcall JabberStringAppend(char* *str, int *sizeAlloced, const c TCHAR* __stdcall JabberStripJid(const TCHAR *jid, TCHAR* dest, size_t destLen); int __stdcall JabberGetPacketID(HXML n); -int __stdcall JabberGetPictureType(const char* buf); LPCTSTR __stdcall JabberGetPictureType(HXML node, const char *picBuf); TCHAR* time2str(time_t _time, TCHAR *buf, size_t bufLen); diff --git a/protocols/JabberG/src/jabber_iqid.cpp b/protocols/JabberG/src/jabber_iqid.cpp index d36c82292d..60517cc113 100644 --- a/protocols/JabberG/src/jabber_iqid.cpp +++ b/protocols/JabberG/src/jabber_iqid.cpp @@ -1457,7 +1457,7 @@ LBL_ErrFormat: Log("Invalid mime type specified for picture: %S", mimeType); return; } } - else if ((pictureType = JabberGetPictureType(body)) == PA_FORMAT_UNKNOWN) + else if ((pictureType = ProtoGetBufferFormat(body, 0)) == PA_FORMAT_UNKNOWN) goto LBL_ErrFormat; TCHAR tszFileName[ MAX_PATH ]; diff --git a/protocols/JabberG/src/jabber_misc.cpp b/protocols/JabberG/src/jabber_misc.cpp index eb0f091f22..9f636480a2 100644 --- a/protocols/JabberG/src/jabber_misc.cpp +++ b/protocols/JabberG/src/jabber_misc.cpp @@ -267,13 +267,7 @@ void CJabberProto::GetAvatarFileName(HANDLE hContact, TCHAR* pszDest, size_t cbL pszDest[ tPathLen++ ] = '\\'; - char* szFileType = NULL; - switch(getByte(hContact, "AvatarType", PA_FORMAT_PNG)) { - case PA_FORMAT_JPEG: szFileType = "jpg"; break; - case PA_FORMAT_PNG: szFileType = "png"; break; - case PA_FORMAT_GIF: szFileType = "gif"; break; - case PA_FORMAT_BMP: szFileType = "bmp"; break; - } + const TCHAR* szFileType = ProtoGetAvatarExtension( getByte(hContact, "AvatarType", PA_FORMAT_PNG)); if (hContact != NULL) { char str[ 256 ]; @@ -284,22 +278,16 @@ void CJabberProto::GetAvatarFileName(HANDLE hContact, TCHAR* pszDest, size_t cbL db_free(&dbv); } else _i64toa((LONG_PTR)hContact, str, 10); - mir_sntprintf(pszDest + tPathLen, MAX_PATH - tPathLen, _T("%S.%S"), ptrA(JabberSha1(str)), szFileType); + mir_sntprintf(pszDest + tPathLen, MAX_PATH - tPathLen, _T("%S%s"), ptrA(JabberSha1(str)), szFileType); } else if (m_ThreadInfo != NULL) { - mir_sntprintf(pszDest + tPathLen, MAX_PATH - tPathLen, _T("%s@%S avatar.%S"), + mir_sntprintf(pszDest + tPathLen, MAX_PATH - tPathLen, _T("%s@%S avatar%s"), m_ThreadInfo->username, m_ThreadInfo->server, szFileType); } else { - DBVARIANT dbv1, dbv2; - BOOL res1 = getString("LoginName", &dbv1); - BOOL res2 = getString("LoginServer", &dbv2); - mir_sntprintf(pszDest + tPathLen, MAX_PATH - tPathLen, _T("%S@%S avatar.%S"), - res1 ? "noname" : dbv1.pszVal, - res2 ? m_szModuleName : dbv2.pszVal, - szFileType); - if ( !res1) db_free(&dbv1); - if ( !res2) db_free(&dbv2); + ptrA res1( getStringA("LoginName")), res2( getStringA("LoginServer")); + mir_sntprintf(pszDest + tPathLen, MAX_PATH - tPathLen, _T("%S@%S avatar%s"), + res1 ? res1 : "noname", res2 ? res2 : m_szModuleName, szFileType); } } diff --git a/protocols/JabberG/src/jabber_svc.cpp b/protocols/JabberG/src/jabber_svc.cpp index c4fb05571e..60978c69f3 100644 --- a/protocols/JabberG/src/jabber_svc.cpp +++ b/protocols/JabberG/src/jabber_svc.cpp @@ -327,7 +327,7 @@ INT_PTR __cdecl CJabberProto::JabberSetAvatar(WPARAM, LPARAM lParam) for (int i=0; inlc; if (res->resultCode == 200 && res->dataLength) { - int pictureType = JabberGetPictureType(res->pData); + int pictureType = ProtoGetBufferFormat(res->pData); if (pictureType != PA_FORMAT_UNKNOWN) { PROTO_AVATAR_INFORMATIONT AI; AI.cbSize = sizeof(AI); diff --git a/protocols/JabberG/src/jabber_vcard.cpp b/protocols/JabberG/src/jabber_vcard.cpp index 566c276bf2..08b1e70b13 100644 --- a/protocols/JabberG/src/jabber_vcard.cpp +++ b/protocols/JabberG/src/jabber_vcard.cpp @@ -1158,7 +1158,7 @@ void CJabberProto::SetServerVcard(BOOL bPhotoChanged, TCHAR* szPhotoFileName) if ((str=mir_base64_encode((PBYTE)buffer, nRead)) != NULL) { n = v << XCHILD(_T("PHOTO")); TCHAR *szFileType; - switch(JabberGetPictureType(buffer)) { + switch( ProtoGetBufferFormat(buffer)) { case PA_FORMAT_PNG: szFileType = _T("image/png"); break; case PA_FORMAT_GIF: szFileType = _T("image/gif"); break; case PA_FORMAT_BMP: szFileType = _T("image/bmp"); break; @@ -1181,7 +1181,7 @@ void CJabberProto::SetServerVcard(BOOL bPhotoChanged, TCHAR* szPhotoFileName) for (int j=0; jpData, &szExt); + int fmt = ProtoGetBufferFormat(nlhrReply->pData, &szExt); if (fmt == PA_FORMAT_UNKNOWN) goto LBL_Error; diff --git a/protocols/MSN/src/msn_contact.cpp b/protocols/MSN/src/msn_contact.cpp index 630635e546..5739d96294 100644 --- a/protocols/MSN/src/msn_contact.cpp +++ b/protocols/MSN/src/msn_contact.cpp @@ -23,7 +23,7 @@ along with this program. If not, see . #include "msn_global.h" #include "msn_proto.h" -HANDLE CMsnProto::MSN_HContactFromEmail(const char* wlid, const char* msnNick, bool addIfNeeded, bool temporary) +HANDLE CMsnProto::MSN_HContactFromEmail(const char* wlid, const char* msnNick, bool addIfNeeded, bool temporary) { HANDLE hContact = NULL; diff --git a/protocols/MSN/src/msn_global.h b/protocols/MSN/src/msn_global.h index 99b4448964..ea44ab8228 100644 --- a/protocols/MSN/src/msn_global.h +++ b/protocols/MSN/src/msn_global.h @@ -173,8 +173,6 @@ void UrlEncode(const char* src, char* dest, size_t cbDest); void __cdecl MSN_ConnectionProc(HANDLE hNewConnection, DWORD dwRemoteIP, void*); char* MSN_GetAvatarHash(char* szContext, char** pszUrl = NULL); -int MSN_GetImageFormat(void* buf, const TCHAR** ext); -int MSN_GetImageFormat(const TCHAR* file); bool MSN_MsgWndExist(HANDLE hContact); #define MSN_SendNickname(a) MSN_SendNicknameUtf(UTF8(a)) diff --git a/protocols/MSN/src/msn_lists.cpp b/protocols/MSN/src/msn_lists.cpp index f218a1171c..02eb12c80d 100644 --- a/protocols/MSN/src/msn_lists.cpp +++ b/protocols/MSN/src/msn_lists.cpp @@ -35,7 +35,7 @@ void CMsnProto::Lists_Uninit(void) DeleteCriticalSection(&csLists); } -void CMsnProto::Lists_Wipe(void) +void CMsnProto::Lists_Wipe(void) { EnterCriticalSection(&csLists); contList.destroy(); @@ -220,7 +220,7 @@ int CMsnProto::Lists_Add(int list, int netId, const char* email, HANDLE hContact return result; } -void CMsnProto::Lists_Remove(int list, const char* email) +void CMsnProto::Lists_Remove(int list, const char* email) { EnterCriticalSection(&csLists); int i = contList.getIndex((MsnContact*)&email); @@ -236,7 +236,7 @@ void CMsnProto::Lists_Remove(int list, const char* email) } -void CMsnProto::Lists_Populate(void) +void CMsnProto::Lists_Populate(void) { HANDLE hContact = db_find_first(m_szModuleName); while (hContact) { diff --git a/protocols/MSN/src/msn_menu.cpp b/protocols/MSN/src/msn_menu.cpp index f8f56c334a..b6760000cb 100644 --- a/protocols/MSN/src/msn_menu.cpp +++ b/protocols/MSN/src/msn_menu.cpp @@ -350,7 +350,7 @@ void CMsnProto::MsnRemoveMainMenus(void) CallService(MS_CLIST_REMOVEMAINMENUITEM, (WPARAM)mainMenuRoot, 0); } -void CMsnProto::MSN_EnableMenuItems(bool bEnable) +void CMsnProto::MSN_EnableMenuItems(bool bEnable) { CLISTMENUITEM mi = { sizeof(mi) }; mi.flags = CMIM_FLAGS; diff --git a/protocols/MSN/src/msn_misc.cpp b/protocols/MSN/src/msn_misc.cpp index 4f9c3a47e6..b765ff5e59 100644 --- a/protocols/MSN/src/msn_misc.cpp +++ b/protocols/MSN/src/msn_misc.cpp @@ -28,7 +28,7 @@ along with this program. If not, see . ///////////////////////////////////////////////////////////////////////////////////////// // MirandaStatusToMSN - status helper functions -const char* CMsnProto::MirandaStatusToMSN(int status) +const char* CMsnProto::MirandaStatusToMSN(int status) { switch(status) { @@ -44,7 +44,7 @@ const char* CMsnProto::MirandaStatusToMSN(int status) default: return "NLN"; } } -WORD CMsnProto::MSNStatusToMiranda(const char *status) +WORD CMsnProto::MSNStatusToMiranda(const char *status) { switch((*(PDWORD)status&0x00FFFFFF) | 0x20000000) { @@ -60,7 +60,7 @@ WORD CMsnProto::MSNStatusToMiranda(const char *status) } } -char** CMsnProto::GetStatusMsgLoc(int status) +char** CMsnProto::GetStatusMsgLoc(int status) { static const int modes[MSN_NUM_MODES] = { @@ -84,7 +84,7 @@ char** CMsnProto::GetStatusMsgLoc(int status) ///////////////////////////////////////////////////////////////////////////////////////// // MSN_AddAuthRequest - adds the authorization event to the database -void CMsnProto::MSN_AddAuthRequest(const char *email, const char *nick, const char *reason) +void CMsnProto::MSN_AddAuthRequest(const char *email, const char *nick, const char *reason) { //blob is: UIN=0(DWORD), hContact(DWORD), nick(ASCIIZ), ""(ASCIIZ), ""(ASCIIZ), email(ASCIIZ), ""(ASCIIZ) @@ -197,7 +197,7 @@ char* MSN_GetAvatarHash(char* szContext, char** pszUrl) ///////////////////////////////////////////////////////////////////////////////////////// // MSN_GetAvatarFileName - gets a file name for an contact's avatar -void CMsnProto::MSN_GetAvatarFileName(HANDLE hContact, TCHAR* pszDest, size_t cbLen, const TCHAR *ext) +void CMsnProto::MSN_GetAvatarFileName(HANDLE hContact, TCHAR* pszDest, size_t cbLen, const TCHAR *ext) { size_t tPathLen; @@ -268,45 +268,7 @@ void CMsnProto::MSN_GetAvatarFileName(HANDLE hContact, TCHAR* pszDest, size_t c else mir_sntprintf(pszDest + tPathLen, cbLen - tPathLen, ext); } -int MSN_GetImageFormat(void* buf, const TCHAR** ext) -{ - if (*(unsigned short*)buf == 0xd8ff) { - *ext = _T("jpg"); - return PA_FORMAT_JPEG; - } - if (*(unsigned short*)buf == 0x4d42) { - *ext = _T("bmp"); - return PA_FORMAT_BMP; - } - if (*(unsigned*)buf == 0x474e5089) { - *ext = _T("png"); - return PA_FORMAT_PNG; - } - if (*(unsigned*)buf == 0x38464947) { - *ext = _T("gif"); - return PA_FORMAT_GIF; - } - - *ext = _T("unk"); - return PA_FORMAT_UNKNOWN; -} - -int MSN_GetImageFormat(const TCHAR* file) -{ - const TCHAR *ext = _tcsrchr(file, '.'); - if (ext == NULL) - return PA_FORMAT_UNKNOWN; - if (_tcsicmp(ext, _T(".gif")) == 0) - return PA_FORMAT_GIF; - else if (_tcsicmp(ext, _T(".bmp")) == 0) - return PA_FORMAT_BMP; - else if (_tcsicmp(ext, _T(".png")) == 0) - return PA_FORMAT_PNG; - else - return PA_FORMAT_JPEG; -} - -int CMsnProto::MSN_SetMyAvatar(const TCHAR* sztFname, void* pData, size_t cbLen) +int CMsnProto::MSN_SetMyAvatar(const TCHAR* sztFname, void* pData, size_t cbLen) { mir_sha1_ctx sha1ctx; BYTE sha1c[MIR_SHA1_HASH_SIZE], sha1d[MIR_SHA1_HASH_SIZE]; @@ -363,8 +325,9 @@ int CMsnProto::MSN_SetMyAvatar(const TCHAR* sztFname, void* pData, size_t cbLen free(szBuffer); const TCHAR *szExt; - int fmt = MSN_GetImageFormat(pData, &szExt); - if (fmt == PA_FORMAT_UNKNOWN) return fmt; + int fmt = ProtoGetBufferFormat(pData, &szExt); + if (fmt == PA_FORMAT_UNKNOWN) + return fmt; TCHAR szFileName[MAX_PATH]; MSN_GetAvatarFileName(NULL, szFileName, SIZEOF(szFileName), NULL); @@ -395,7 +358,7 @@ int CMsnProto::MSN_SetMyAvatar(const TCHAR* sztFname, void* pData, size_t cbLen ///////////////////////////////////////////////////////////////////////////////////////// // MSN_GetCustomSmileyFileName - gets a file name for an contact's custom smiley -void CMsnProto::MSN_GetCustomSmileyFileName(HANDLE hContact, TCHAR* pszDest, size_t cbLen, const char* SmileyName, int type) +void CMsnProto::MSN_GetCustomSmileyFileName(HANDLE hContact, TCHAR* pszDest, size_t cbLen, const char* SmileyName, int type) { size_t tPathLen; @@ -629,7 +592,7 @@ static VOID CALLBACK TypingTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWO } -void CMsnProto::MSN_StartStopTyping(ThreadData* info, bool start) +void CMsnProto::MSN_StartStopTyping(ThreadData* info, bool start) { if (start && info->mTimerId == 0) { info->mTimerId = SetTimer(NULL, 0, 5000, TypingTimerProc); @@ -654,7 +617,7 @@ static char * HtmlEncodeUTF8T(const TCHAR *src) return HtmlEncode(UTF8(src)); } -void CMsnProto::MSN_SendStatusMessage(const char* msg) +void CMsnProto::MSN_SendStatusMessage(const char* msg) { if (!msnLoggedIn) return; @@ -770,7 +733,7 @@ int ThreadData::sendPacket(const char* cmd, const char* fmt,...) ///////////////////////////////////////////////////////////////////////////////////////// // MSN_SetServerStatus - changes plugins status at the server -void CMsnProto::MSN_SetServerStatus(int newStatus) +void CMsnProto::MSN_SetServerStatus(int newStatus) { MSN_DebugLog("Setting MSN server status %d, logged in = %d", newStatus, msnLoggedIn); diff --git a/protocols/MSN/src/msn_msgqueue.cpp b/protocols/MSN/src/msn_msgqueue.cpp index a82cad6a49..040ceedc72 100644 --- a/protocols/MSN/src/msn_msgqueue.cpp +++ b/protocols/MSN/src/msn_msgqueue.cpp @@ -38,7 +38,7 @@ void CMsnProto::MsgQueue_Uninit(void) DeleteCriticalSection(&csMsgQueue); } -int CMsnProto::MsgQueue_Add(const char* wlid, int msgType, const char* msg, int msgSize, filetransfer* ft, int flags, STRLIST *cnt) +int CMsnProto::MsgQueue_Add(const char* wlid, int msgType, const char* msg, int msgSize, filetransfer* ft, int flags, STRLIST *cnt) { EnterCriticalSection(&csMsgQueue); @@ -112,7 +112,7 @@ const char* CMsnProto::MsgQueue_GetNextRecipient(void) } //deletes from list. Must mir_free() return value -bool CMsnProto::MsgQueue_GetNext(const char* wlid, MsgQueueEntry& retVal) +bool CMsnProto::MsgQueue_GetNext(const char* wlid, MsgQueueEntry& retVal) { int i; @@ -131,7 +131,7 @@ bool CMsnProto::MsgQueue_GetNext(const char* wlid, MsgQueueEntry& retVal) return res; } -int CMsnProto::MsgQueue_NumMsg(const char* wlid) +int CMsnProto::MsgQueue_NumMsg(const char* wlid) { int res = 0; EnterCriticalSection(&csMsgQueue); @@ -143,7 +143,7 @@ int CMsnProto::MsgQueue_NumMsg(const char* wlid) return res; } -void CMsnProto::MsgQueue_Clear(const char* wlid, bool msg) +void CMsnProto::MsgQueue_Clear(const char* wlid, bool msg) { int i; diff --git a/protocols/MSN/src/msn_p2p.cpp b/protocols/MSN/src/msn_p2p.cpp index 9c3c60489b..a67a378f16 100644 --- a/protocols/MSN/src/msn_p2p.cpp +++ b/protocols/MSN/src/msn_p2p.cpp @@ -219,8 +219,7 @@ void CMsnProto::p2p_savePicture2disk(filetransfer* ft) if (p2p_IsDlFileOk(ft)) { int fileId = _topen(ft->std.tszCurrentFile, O_RDONLY | _O_BINARY, _S_IREAD); - if (fileId == -1) - { + if (fileId == -1) { p2p_pictureTransferFailed(ft); return; } @@ -232,9 +231,8 @@ void CMsnProto::p2p_savePicture2disk(filetransfer* ft) int bytes = _read(fileId, buf, sizeof(buf)); _close(fileId); if (bytes > 4) - format = MSN_GetImageFormat(buf, &ext); - else - { + format = ProtoGetBufferFormat(buf, &ext); + else { p2p_pictureTransferFailed(ft); return; } @@ -293,7 +291,7 @@ void CMsnProto::p2p_savePicture2disk(filetransfer* ft) static const char sttVoidSession[] = "ACHTUNG!!! an attempt made to send a message via the empty session"; -void CMsnProto::p2p_sendMsg(const char *wlid, unsigned appId, P2PB_Header& hdrdata, char* msgbody, size_t msgsz) +void CMsnProto::p2p_sendMsg(const char *wlid, unsigned appId, P2PB_Header& hdrdata, char* msgbody, size_t msgsz) { ThreadData* info = MSN_GetP2PThreadByContact(wlid); if (info == NULL) @@ -304,7 +302,7 @@ void CMsnProto::p2p_sendMsg(const char *wlid, unsigned appId, P2PB_Header& hdrd p2p_sendMsg(info, wlid, appId, hdrdata, msgbody, msgsz); } -void CMsnProto::p2p_sendMsg(ThreadData* info, const char *wlid, unsigned appId, P2PB_Header& hdrdata, char* msgbody, size_t msgsz) +void CMsnProto::p2p_sendMsg(ThreadData* info, const char *wlid, unsigned appId, P2PB_Header& hdrdata, char* msgbody, size_t msgsz) { unsigned msgType; @@ -416,7 +414,7 @@ void CMsnProto::p2p_sendMsg(ThreadData* info, const char *wlid, unsigned appId, } -void CMsnProto::p2p_sendAck(const char *wlid, P2PB_Header* hdr) +void CMsnProto::p2p_sendAck(const char *wlid, P2PB_Header* hdr) { if (hdr == NULL) return; @@ -448,7 +446,7 @@ void CMsnProto::p2p_sendAck(const char *wlid, P2PB_Header* hdr) ///////////////////////////////////////////////////////////////////////////////////////// // p2p_sendEndSession - sends MSN P2P file transfer end packet -void CMsnProto::p2p_sendAbortSession(filetransfer* ft) +void CMsnProto::p2p_sendAbortSession(filetransfer* ft) { if (ft == NULL) { @@ -480,7 +478,7 @@ void CMsnProto::p2p_sendAbortSession(filetransfer* ft) ft->ts = time(NULL); } -void CMsnProto::p2p_sendRedirect(filetransfer* ft) +void CMsnProto::p2p_sendRedirect(filetransfer* ft) { if (ft == NULL) { @@ -507,7 +505,7 @@ void CMsnProto::p2p_sendRedirect(filetransfer* ft) ///////////////////////////////////////////////////////////////////////////////////////// // p2p_sendSlp - send MSN P2P SLP packet -void CMsnProto::p2p_sendSlp(int iKind, filetransfer *ft, MimeHeaders &pHeaders, +void CMsnProto::p2p_sendSlp(int iKind, filetransfer *ft, MimeHeaders &pHeaders, MimeHeaders &pContent, const char *wlid) { if (ft == NULL) @@ -602,7 +600,7 @@ void CMsnProto::p2p_sendSlp(int iKind, filetransfer *ft, MimeHeaders &pHeaders, ///////////////////////////////////////////////////////////////////////////////////////// // p2p_sendBye - closes P2P session -void CMsnProto::p2p_sendBye(filetransfer* ft) +void CMsnProto::p2p_sendBye(filetransfer* ft) { if (ft == NULL) { @@ -623,13 +621,13 @@ void CMsnProto::p2p_sendBye(filetransfer* ft) p2p_sendSlp(-1, ft, tHeaders, chdrs); } -void CMsnProto::p2p_sendCancel(filetransfer* ft) +void CMsnProto::p2p_sendCancel(filetransfer* ft) { p2p_sendBye(ft); p2p_sendAbortSession(ft); } -void CMsnProto::p2p_sendNoCall(filetransfer* ft) +void CMsnProto::p2p_sendNoCall(filetransfer* ft) { if (ft == NULL) { @@ -653,7 +651,7 @@ void CMsnProto::p2p_sendNoCall(filetransfer* ft) ///////////////////////////////////////////////////////////////////////////////////////// // p2p_sendStatus - send MSN P2P status and its description -void CMsnProto::p2p_sendStatus(filetransfer* ft, long lStatus) +void CMsnProto::p2p_sendStatus(filetransfer* ft, long lStatus) { if (ft == NULL) { @@ -681,7 +679,7 @@ void CMsnProto::p2p_sendStatus(filetransfer* ft, long lStatus) p2p_sendSlp(lStatus, ft, tHeaders, chdrs); } -void CMsnProto::p2p_sendAvatarInit(filetransfer* ft) +void CMsnProto::p2p_sendAvatarInit(filetransfer* ft) { unsigned body = 0; @@ -888,7 +886,7 @@ LBL_Error: return true; } -LONG CMsnProto::p2p_sendPortion(filetransfer* ft, ThreadData* T, bool isV2) +LONG CMsnProto::p2p_sendPortion(filetransfer* ft, ThreadData* T, bool isV2) { LONG trid; char databuf[1500], *p = databuf; @@ -1068,7 +1066,7 @@ void __cdecl CMsnProto::p2p_sendFeedThread(void* arg) } -void CMsnProto::p2p_sendFeedStart(filetransfer* ft) +void CMsnProto::p2p_sendFeedStart(filetransfer* ft) { if (ft->std.flags & PFTS_SENDING) { @@ -1860,7 +1858,7 @@ void CMsnProto::p2p_processSIP(ThreadData* info, char* msgbody, P2PB_Header* hdr ///////////////////////////////////////////////////////////////////////////////////////// // p2p_processMsg - processes all MSN P2P incoming messages -void CMsnProto::p2p_processMsgV2(ThreadData* info, char* msgbody, const char* wlid) +void CMsnProto::p2p_processMsgV2(ThreadData* info, char* msgbody, const char* wlid) { P2PV2_Header hdrdata; @@ -1966,7 +1964,7 @@ void CMsnProto::p2p_processMsgV2(ThreadData* info, char* msgbody, const char* } } -void CMsnProto::p2p_processMsg(ThreadData* info, char* msgbody, const char* wlid) +void CMsnProto::p2p_processMsg(ThreadData* info, char* msgbody, const char* wlid) { P2P_Header hdrdata; msgbody = hdrdata.parseMsg(msgbody); @@ -2153,7 +2151,7 @@ void CMsnProto::p2p_processMsg(ThreadData* info, char* msgbody, const char* wl ///////////////////////////////////////////////////////////////////////////////////////// // p2p_invite - invite another side to transfer an avatar -void CMsnProto::p2p_invite(unsigned iAppID, filetransfer* ft, const char *wlid) +void CMsnProto::p2p_invite(unsigned iAppID, filetransfer* ft, const char *wlid) { const char* szAppID; switch(iAppID) @@ -2394,7 +2392,7 @@ void CMsnProto::p2p_sendSessionAck(filetransfer* ft) p2p_sendSlp(-3, ft, tResult, chdrs); } */ -void CMsnProto::p2p_sessionComplete(filetransfer* ft) +void CMsnProto::p2p_sessionComplete(filetransfer* ft) { if (ft->p2p_appID != MSN_APPID_FILE) p2p_unregisterSession(ft); diff --git a/protocols/MSN/src/msn_p2ps.cpp b/protocols/MSN/src/msn_p2ps.cpp index 4bfb86d1ee..b642180695 100644 --- a/protocols/MSN/src/msn_p2ps.cpp +++ b/protocols/MSN/src/msn_p2ps.cpp @@ -26,7 +26,7 @@ along with this program. If not, see . ///////////////////////////////////////////////////////////////////////////////////////// // add file session to a list -void CMsnProto::p2p_registerSession(filetransfer* ft) +void CMsnProto::p2p_registerSession(filetransfer* ft) { EnterCriticalSection(&sessionLock); sessionList.insert(ft); @@ -36,7 +36,7 @@ void CMsnProto::p2p_registerSession(filetransfer* ft) ///////////////////////////////////////////////////////////////////////////////////////// // remove file session from a list -void CMsnProto::p2p_unregisterSession(filetransfer* ft) +void CMsnProto::p2p_unregisterSession(filetransfer* ft) { EnterCriticalSection(&sessionLock); // int idx = sessionList.getIndex(ft); @@ -48,7 +48,7 @@ void CMsnProto::p2p_unregisterSession(filetransfer* ft) ///////////////////////////////////////////////////////////////////////////////////////// // get session by some parameter -filetransfer* CMsnProto::p2p_getSessionByID(unsigned id) +filetransfer* CMsnProto::p2p_getSessionByID(unsigned id) { if (id == 0) return NULL; @@ -73,7 +73,7 @@ filetransfer* CMsnProto::p2p_getSessionByID(unsigned id) return ft; } -filetransfer* CMsnProto::p2p_getSessionByUniqueID(unsigned id) +filetransfer* CMsnProto::p2p_getSessionByUniqueID(unsigned id) { if (id == 0) return NULL; @@ -99,7 +99,7 @@ filetransfer* CMsnProto::p2p_getSessionByUniqueID(unsigned id) } -bool CMsnProto::p2p_sessionRegistered(filetransfer* ft) +bool CMsnProto::p2p_sessionRegistered(filetransfer* ft) { if (ft != NULL && ft->p2p_appID == 0) return true; @@ -110,7 +110,7 @@ bool CMsnProto::p2p_sessionRegistered(filetransfer* ft) return idx > -1; } -filetransfer* CMsnProto::p2p_getThreadSession(HANDLE hContact, TInfoType mType) +filetransfer* CMsnProto::p2p_getThreadSession(HANDLE hContact, TInfoType mType) { EnterCriticalSection(&sessionLock); @@ -129,7 +129,7 @@ filetransfer* CMsnProto::p2p_getThreadSession(HANDLE hContact, TInfoType mType) return result; } -void CMsnProto::p2p_clearThreadSessions(HANDLE hContact, TInfoType mType) +void CMsnProto::p2p_clearThreadSessions(HANDLE hContact, TInfoType mType) { EnterCriticalSection(&sessionLock); @@ -147,7 +147,7 @@ void CMsnProto::p2p_clearThreadSessions(HANDLE hContact, TInfoType mType) LeaveCriticalSection(&sessionLock); } -filetransfer* CMsnProto::p2p_getAvatarSession(HANDLE hContact) +filetransfer* CMsnProto::p2p_getAvatarSession(HANDLE hContact) { EnterCriticalSection(&sessionLock); @@ -165,7 +165,7 @@ filetransfer* CMsnProto::p2p_getAvatarSession(HANDLE hContact) return result; } -bool CMsnProto::p2p_isAvatarOnly(HANDLE hContact) +bool CMsnProto::p2p_isAvatarOnly(HANDLE hContact) { EnterCriticalSection(&sessionLock); @@ -180,7 +180,7 @@ bool CMsnProto::p2p_isAvatarOnly(HANDLE hContact) return result; } -void CMsnProto::p2p_clearDormantSessions(void) +void CMsnProto::p2p_clearDormantSessions(void) { EnterCriticalSection(&sessionLock); @@ -204,7 +204,7 @@ void CMsnProto::p2p_clearDormantSessions(void) LeaveCriticalSection(&sessionLock); } -void CMsnProto::p2p_redirectSessions(const char *wlid) +void CMsnProto::p2p_redirectSessions(const char *wlid) { EnterCriticalSection(&sessionLock); @@ -232,7 +232,7 @@ void CMsnProto::p2p_redirectSessions(const char *wlid) LeaveCriticalSection(&sessionLock); } -void CMsnProto::p2p_startSessions(const char* wlid) +void CMsnProto::p2p_startSessions(const char* wlid) { EnterCriticalSection(&sessionLock); @@ -254,7 +254,7 @@ void CMsnProto::p2p_startSessions(const char* wlid) LeaveCriticalSection(&sessionLock); } -void CMsnProto::p2p_cancelAllSessions(void) +void CMsnProto::p2p_cancelAllSessions(void) { EnterCriticalSection(&sessionLock); @@ -267,7 +267,7 @@ void CMsnProto::p2p_cancelAllSessions(void) LeaveCriticalSection(&sessionLock); } -filetransfer* CMsnProto::p2p_getSessionByCallID(const char* CallID, const char* wlid) +filetransfer* CMsnProto::p2p_getSessionByCallID(const char* CallID, const char* wlid) { if (CallID == NULL) return NULL; @@ -301,21 +301,21 @@ filetransfer* CMsnProto::p2p_getSessionByCallID(const char* CallID, const char* } -void CMsnProto::p2p_registerDC(directconnection* dc) +void CMsnProto::p2p_registerDC(directconnection* dc) { EnterCriticalSection(&sessionLock); dcList.insert(dc); LeaveCriticalSection(&sessionLock); } -void CMsnProto::p2p_unregisterDC(directconnection* dc) +void CMsnProto::p2p_unregisterDC(directconnection* dc) { EnterCriticalSection(&sessionLock); dcList.remove(dc); LeaveCriticalSection(&sessionLock); } -directconnection* CMsnProto::p2p_getDCByCallID(const char* CallID, const char* wlid) +directconnection* CMsnProto::p2p_getDCByCallID(const char* CallID, const char* wlid) { if (CallID == NULL) return NULL; diff --git a/protocols/MSN/src/msn_srv.cpp b/protocols/MSN/src/msn_srv.cpp index 5e92edd0f9..984f49d2c6 100644 --- a/protocols/MSN/src/msn_srv.cpp +++ b/protocols/MSN/src/msn_srv.cpp @@ -227,7 +227,7 @@ void CMsnProto::MSN_RenameServerGroup(LPCSTR szId, const char* newName) ///////////////////////////////////////////////////////////////////////////////////////// // MSN_UploadServerGroups - adds a group to the server list and contacts into the group -void CMsnProto::MSN_UploadServerGroups(char* group) +void CMsnProto::MSN_UploadServerGroups(char* group) { if (!MyOptions.ManageServer) return; @@ -314,7 +314,7 @@ void CMsnProto::MSN_SyncContactToServerGroup(HANDLE hContact, const char* szCont ///////////////////////////////////////////////////////////////////////////////////////// // Msn_SendNickname - update our own nickname on the server -void CMsnProto::MSN_SendNicknameUtf(const char* nickname) +void CMsnProto::MSN_SendNicknameUtf(const char* nickname) { if (nickname[0]) setStringUtf(NULL, "Nick", nickname); @@ -326,7 +326,7 @@ void CMsnProto::MSN_SendNicknameUtf(const char* nickname) ForkThread(&CMsnProto::msn_storeProfileThread, (void*)1); } -void CMsnProto::MSN_SetNicknameUtf(const char* nickname) +void CMsnProto::MSN_SetNicknameUtf(const char* nickname) { const size_t urlNickSz = strlen(nickname) * 3 + 1; char* urlNick = (char*)alloca(urlNickSz); diff --git a/protocols/MSN/src/msn_std.cpp b/protocols/MSN/src/msn_std.cpp index 2b7d56a6df..06f6d9c9eb 100644 --- a/protocols/MSN/src/msn_std.cpp +++ b/protocols/MSN/src/msn_std.cpp @@ -34,7 +34,7 @@ int CMsnProto::getStringUtf(const char* name, DBVARIANT* result) { return db_get_utf(NULL, m_szModuleName, name, result); } -int CMsnProto::getStaticString(HANDLE hContact, const char* valueName, char* dest, unsigned dest_len) +int CMsnProto::getStaticString(HANDLE hContact, const char* valueName, char* dest, unsigned dest_len) { DBVARIANT dbv; dbv.pszVal = dest; diff --git a/protocols/MSN/src/msn_svcs.cpp b/protocols/MSN/src/msn_svcs.cpp index ee59fdccde..5f1db4ff16 100644 --- a/protocols/MSN/src/msn_svcs.cpp +++ b/protocols/MSN/src/msn_svcs.cpp @@ -77,7 +77,7 @@ INT_PTR CMsnProto::GetAvatarInfo(WPARAM wParam,LPARAM lParam) if (AI->hContact == NULL || _stricmp(cont->email, MyOptions.szEmail) == 0) { MSN_GetAvatarFileName(NULL, filename, SIZEOF(filename), NULL); - AI->format = MSN_GetImageFormat(filename); + AI->format = ProtoGetAvatarFormat(filename); if (AI->format != PA_FORMAT_UNKNOWN) _tcscpy(AI->filename, filename); return AI->format == PA_FORMAT_UNKNOWN ? GAIR_NOAVATAR : GAIR_SUCCESS; @@ -92,7 +92,7 @@ INT_PTR CMsnProto::GetAvatarInfo(WPARAM wParam,LPARAM lParam) else return GAIR_NOAVATAR; MSN_GetAvatarFileName(AI->hContact, filename, SIZEOF(filename), NULL); - AI->format = MSN_GetImageFormat(filename); + AI->format = ProtoGetAvatarFormat(filename); if (AI->format != PA_FORMAT_UNKNOWN) { bool needupdate = true; diff --git a/protocols/MSN/src/msn_threads.cpp b/protocols/MSN/src/msn_threads.cpp index 8640a40140..e25bbb7085 100644 --- a/protocols/MSN/src/msn_threads.cpp +++ b/protocols/MSN/src/msn_threads.cpp @@ -300,12 +300,12 @@ LBL_Exit: MSN_DebugLog("Thread [%08X] ending now", GetCurrentThreadId()); } -void CMsnProto::MSN_InitThreads(void) +void CMsnProto::MSN_InitThreads(void) { InitializeCriticalSection(&sttLock); } -void CMsnProto::MSN_CloseConnections(void) +void CMsnProto::MSN_CloseConnections(void) { EnterCriticalSection(&sttLock); @@ -349,7 +349,7 @@ void CMsnProto::Threads_Uninit(void) DeleteCriticalSection(&sttLock); } -ThreadData* CMsnProto::MSN_GetThreadByContact(const char* wlid, TInfoType type) +ThreadData* CMsnProto::MSN_GetThreadByContact(const char* wlid, TInfoType type) { ThreadData* result = NULL; EnterCriticalSection(&sttLock); @@ -393,7 +393,7 @@ ThreadData* CMsnProto::MSN_GetThreadByContact(const char* wlid, TInfoType type) return result; } -ThreadData* CMsnProto::MSN_GetThreadByChatId(const TCHAR* chatId) +ThreadData* CMsnProto::MSN_GetThreadByChatId(const TCHAR* chatId) { ThreadData* result = NULL; EnterCriticalSection(&sttLock); @@ -413,7 +413,7 @@ ThreadData* CMsnProto::MSN_GetThreadByChatId(const TCHAR* chatId) return result; } -ThreadData* CMsnProto::MSN_GetThreadByTimer(UINT timerId) +ThreadData* CMsnProto::MSN_GetThreadByTimer(UINT timerId) { ThreadData* result = NULL; EnterCriticalSection(&sttLock); @@ -432,7 +432,7 @@ ThreadData* CMsnProto::MSN_GetThreadByTimer(UINT timerId) return result; } -ThreadData* CMsnProto::MSN_GetP2PThreadByContact(const char *wlid) +ThreadData* CMsnProto::MSN_GetP2PThreadByContact(const char *wlid) { ThreadData *result = NULL; @@ -479,7 +479,7 @@ ThreadData* CMsnProto::MSN_GetP2PThreadByContact(const char *wlid) } -void CMsnProto::MSN_StartP2PTransferByContact(const char* wlid) +void CMsnProto::MSN_StartP2PTransferByContact(const char* wlid) { EnterCriticalSection(&sttLock); @@ -499,7 +499,7 @@ void CMsnProto::MSN_StartP2PTransferByContact(const char* wlid) } -ThreadData* CMsnProto::MSN_GetOtherContactThread(ThreadData* thread) +ThreadData* CMsnProto::MSN_GetOtherContactThread(ThreadData* thread) { ThreadData* result = NULL; EnterCriticalSection(&sttLock); @@ -521,7 +521,7 @@ ThreadData* CMsnProto::MSN_GetOtherContactThread(ThreadData* thread) return result; } -ThreadData* CMsnProto::MSN_GetUnconnectedThread(const char* wlid, TInfoType type) +ThreadData* CMsnProto::MSN_GetUnconnectedThread(const char* wlid, TInfoType type) { ThreadData* result = NULL; EnterCriticalSection(&sttLock); @@ -567,7 +567,7 @@ ThreadData* CMsnProto::MSN_StartSB(const char* wlid, bool& isOffline) -int CMsnProto::MSN_GetActiveThreads(ThreadData** parResult) +int CMsnProto::MSN_GetActiveThreads(ThreadData** parResult) { int tCount = 0; EnterCriticalSection(&sttLock); @@ -583,7 +583,7 @@ int CMsnProto::MSN_GetActiveThreads(ThreadData** parResult) return tCount; } -ThreadData* CMsnProto::MSN_GetThreadByConnection(HANDLE s) +ThreadData* CMsnProto::MSN_GetThreadByConnection(HANDLE s) { ThreadData* tResult = NULL; EnterCriticalSection(&sttLock); @@ -602,7 +602,7 @@ ThreadData* CMsnProto::MSN_GetThreadByConnection(HANDLE s) return tResult; } -ThreadData* CMsnProto::MSN_GetThreadByPort(WORD wPort) +ThreadData* CMsnProto::MSN_GetThreadByPort(WORD wPort) { ThreadData* result = NULL; EnterCriticalSection(&sttLock); diff --git a/protocols/Skype/src/skype_avatars.cpp b/protocols/Skype/src/skype_avatars.cpp index 4f29a2e8cf..fbf8af6138 100644 --- a/protocols/Skype/src/skype_avatars.cpp +++ b/protocols/Skype/src/skype_avatars.cpp @@ -21,39 +21,6 @@ bool CSkypeProto::IsAvatarChanged(const SEBinary &avatar, HANDLE hContact) return result; } -int CSkypeProto::DetectAvatarFormatBuffer(const char *pBuffer) -{ - if (!strncmp(pBuffer, "%PNG", 4)) - return PA_FORMAT_PNG; - - if (!strncmp(pBuffer, "GIF8", 4)) - return PA_FORMAT_GIF; - - if (!_strnicmp(pBuffer, "m_tszUserName); + mir_sntprintf(name, SIZEOF(name), TranslateT("%s connection"), proto->m_tszUserName); nlu.ptszDescriptiveName = name; nlu.szSettingsModule = proto->m_szModuleName; proto->hNetlibUser = (HANDLE) CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM) &nlu); nlu.flags = NUF_OUTGOING | NUF_INCOMING | NUF_NOOPTIONS | NUF_TCHAR; - mir_sntprintf( name, SIZEOF(name), TranslateT("%s SOCKS connection"), proto->m_tszUserName); + mir_sntprintf(name, SIZEOF(name), TranslateT("%s SOCKS connection"), proto->m_tszUserName); nlu.ptszDescriptiveName = name; proto->hFileNetlibUser = (HANDLE) CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM) &nlu); nlus.cbSize = sizeof(nlus); diff --git a/protocols/Tlen/src/tlen_avatar.cpp b/protocols/Tlen/src/tlen_avatar.cpp index 1df8c8836d..28f3953061 100644 --- a/protocols/Tlen/src/tlen_avatar.cpp +++ b/protocols/Tlen/src/tlen_avatar.cpp @@ -33,45 +33,27 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. void TlenGetAvatarFileName(TlenProtocol *proto, JABBER_LIST_ITEM *item, TCHAR* ptszDest, int cbLen) { - DWORD dwAttributes; - int tPathLen; int format = PA_FORMAT_PNG; - TCHAR* tszFileType; TCHAR* tmpPath = Utils_ReplaceVarsT( TEXT("%miranda_avatarcache%") ); - tPathLen = mir_sntprintf( ptszDest, cbLen, TEXT("%s\\Tlen"), tmpPath ); + int tPathLen = mir_sntprintf(ptszDest, cbLen, TEXT("%s\\Tlen"), tmpPath ); mir_free(tmpPath); - dwAttributes = GetFileAttributes( ptszDest ); + DWORD dwAttributes = GetFileAttributes( ptszDest ); if (dwAttributes == 0xffffffff || ( dwAttributes & FILE_ATTRIBUTE_DIRECTORY ) == 0) CreateDirectoryTreeT(ptszDest); ptszDest[ tPathLen++ ] = '\\'; - if (item != NULL) { + if (item != NULL) format = item->avatarFormat; - } else if (proto->threadData != NULL) { + else if (proto->threadData != NULL) format = proto->threadData->avatarFormat; - } else { + else format = db_get_dw(NULL, proto->m_szModuleName, "AvatarFormat", PA_FORMAT_UNKNOWN); - } - tszFileType = TEXT("png"); - switch(format) { - case PA_FORMAT_JPEG: tszFileType = TEXT("jpg"); break; - case PA_FORMAT_ICON: tszFileType = TEXT("ico"); break; - case PA_FORMAT_PNG: tszFileType = TEXT("png"); break; - case PA_FORMAT_GIF: tszFileType = TEXT("gif"); break; - case PA_FORMAT_BMP: tszFileType = TEXT("bmp"); break; - } - if ( item != NULL ) { - char* hash; - hash = JabberSha1(item->jid); - TCHAR* hashT = mir_a2t(hash); - mir_free( hash ); - mir_sntprintf( ptszDest + tPathLen, MAX_PATH - tPathLen, TEXT("%s.%s"), hashT, tszFileType ); - mir_free( hashT ); - } else { - TCHAR* m_tszModuleName = mir_a2t(proto->m_szModuleName); - mir_sntprintf( ptszDest + tPathLen, MAX_PATH - tPathLen, TEXT("%s_avatar.%s"), m_tszModuleName, tszFileType ); - mir_free( m_tszModuleName ); - } + + const TCHAR *tszFileType = ProtoGetAvatarExtension(format); + if ( item != NULL ) + mir_sntprintf(ptszDest + tPathLen, MAX_PATH - tPathLen, TEXT("%S%s"), ptrA( JabberSha1(item->jid)), tszFileType); + else + mir_sntprintf(ptszDest + tPathLen, MAX_PATH - tPathLen, TEXT("%S_avatar%s"), proto->m_szModuleName, tszFileType); } static void RemoveAvatar(TlenProtocol *proto, HANDLE hContact) { @@ -88,15 +70,13 @@ static void RemoveAvatar(TlenProtocol *proto, HANDLE hContact) { } static void SetAvatar(TlenProtocol *proto, HANDLE hContact, JABBER_LIST_ITEM *item, char *data, int len, DWORD format) { - FILE* out; TCHAR filename[MAX_PATH]; char md5[33]; mir_md5_state_t ctx; DWORD digest[4]; - if (format == PA_FORMAT_UNKNOWN && len > 4) { - format = JabberGetPictureType(data); - } + if (format == PA_FORMAT_UNKNOWN && len > 4) + format = ProtoGetBufferFormat(data); mir_md5_init( &ctx ); mir_md5_append( &ctx, ( BYTE* )data, len); @@ -114,10 +94,10 @@ static void SetAvatar(TlenProtocol *proto, HANDLE hContact, JABBER_LIST_ITEM *it } TlenGetAvatarFileName(proto, item, filename, sizeof filename ); DeleteFile(filename); - out = _tfopen( filename, TEXT("wb") ); - if ( out != NULL ) { - fwrite( data, len, 1, out ); - fclose( out ); + FILE *out = _tfopen( filename, TEXT("wb") ); + if (out != NULL) { + fwrite(data, len, 1, out); + fclose(out); db_set_ts(hContact, "ContactPhoto", "File", filename ); db_set_s(hContact, proto->m_szModuleName, "AvatarHash", md5); db_set_dw(hContact, proto->m_szModuleName, "AvatarFormat", format); @@ -274,20 +254,20 @@ static void TlenGetAvatarThread(void *ptr) { if (resp->dataLength > 0) { int i; for (i=0; iheadersCount; i++ ) { - if (strcmpi(resp->headers[i].szName, "Content-Type") == 0) { - if (strcmpi(resp->headers[i].szValue, "image/png") == 0) { + if (!strcmpi(resp->headers[i].szName, "Content-Type")) { + if (!strcmpi(resp->headers[i].szValue, "image/png")) format = PA_FORMAT_PNG; - } else if (strcmpi(resp->headers[i].szValue, "image/x-png") == 0) { + else if (!strcmpi(resp->headers[i].szValue, "image/x-png")) format = PA_FORMAT_PNG; - } else if (strcmpi(resp->headers[i].szValue, "image/jpeg") == 0) { + else if (!strcmpi(resp->headers[i].szValue, "image/jpeg")) format = PA_FORMAT_JPEG; - } else if (strcmpi(resp->headers[i].szValue, "image/jpg") == 0) { + else if (!strcmpi(resp->headers[i].szValue, "image/jpg")) format = PA_FORMAT_JPEG; - } else if (strcmpi(resp->headers[i].szValue, "image/gif") == 0) { + else if (!strcmpi(resp->headers[i].szValue, "image/gif")) format = PA_FORMAT_GIF; - } else if (strcmpi(resp->headers[i].szValue, "image/bmp") == 0) { + else if (!strcmpi(resp->headers[i].szValue, "image/bmp")) format = PA_FORMAT_BMP; - } + break; } } diff --git a/protocols/Twitter/src/connection.cpp b/protocols/Twitter/src/connection.cpp index d9a7dc704b..bf51ca0687 100644 --- a/protocols/Twitter/src/connection.cpp +++ b/protocols/Twitter/src/connection.cpp @@ -426,7 +426,7 @@ void TwitterProto::UpdateAvatarWorker(void *p) PROTO_AVATAR_INFORMATIONT ai = {sizeof(ai)}; ai.hContact = data->hContact; - ai.format = ext_to_format(ext); + ai.format = ProtoGetAvatarFormat(filename.c_str()); if (ai.format == PA_FORMAT_UNKNOWN) { LOG( _T("***** Update avatar: Terminated for this contact, extension format unknown for %s"), data->url.c_str()); diff --git a/protocols/Twitter/src/utility.cpp b/protocols/Twitter/src/utility.cpp index 219b8e1ec4..2a245455be 100644 --- a/protocols/Twitter/src/utility.cpp +++ b/protocols/Twitter/src/utility.cpp @@ -195,27 +195,3 @@ bool save_url(HANDLE hNetlib,const std::string &url,const std::tstring &filename else return false; } - -static const struct -{ - char *ext; - int fmt; -} formats[] = { - { ".png", PA_FORMAT_PNG }, - { ".jpg", PA_FORMAT_JPEG }, - { ".jpeg", PA_FORMAT_JPEG }, - { ".ico", PA_FORMAT_ICON }, - { ".bmp", PA_FORMAT_BMP }, - { ".gif", PA_FORMAT_GIF }, -}; - -int ext_to_format(const std::string &ext) -{ - for(size_t i=0; i