2 #define __func__ __FUNCTION__
5 #define SIPSIMPLE_PROTOCOL_NAME LPGEN("Office Communicator")
6 #define SIP_UNIQUEID "sip_screenname"
8 #define SIPE_EVENTTYPE_ERROR_NOTIFY 2002
9 #define SIPE_DB_GETEVENTTEXT_ERROR_NOTIFY "SIP/SIMPLE/GetEventTextErrorNotify"
10 #define SIPE_EVENTTYPE_INFO_NOTIFY 2003
11 #define SIPE_DB_GETEVENTTEXT_INFO_NOTIFY "SIP/SIMPLE/GetEventTextInfoNotify"
12 #define SIPE_EVENTTYPE_IM_TOPIC 2010
13 #define SIPE_DB_GETEVENTTEXT_IM_TOPIC "SIP/SIMPLE/GetEventTextIMTopic"
15 #define SIPE_MIRANDA_IP_LOCAL 0
16 #define SIPE_MIRANDA_IP_MANUAL 1
17 #define SIPE_MIRANDA_IP_PROG 2
21 SIPE_MIRANDA_DISCONNECTED
= 0, /**< Disconnected. */
22 SIPE_MIRANDA_CONNECTED
, /**< Connected. */
23 SIPE_MIRANDA_CONNECTING
/**< Connecting. */
25 } sipe_miranda_ConnectionState
;
27 struct sipe_miranda_connection_info
;
29 typedef struct sipe_backend_private
31 PROTO_INTERFACE proto
;
32 struct sipe_core_public
*sip
;
33 CRITICAL_SECTION CriticalSection
;
34 HANDLE m_hServerNetlibUser
;
35 sipe_miranda_ConnectionState state
;
37 gboolean disconnecting
;
38 HANDLE disconnect_timeout
;
39 GSList
*contactMenuChatItems
;
44 struct sipe_backend_chat_session
{
51 SIPE_MIRANDA_INPUT_READ
= 1 << 0, /**< A read condition. */
52 SIPE_MIRANDA_INPUT_WRITE
= 1 << 1 /**< A write condition. */
54 } sipe_miranda_input_condition
;
56 /** The type of callbacks to handle events on file descriptors, as passed to
57 * sipe_miranda_input_add(). The callback will receive the @c user_data
58 * passed to sipe_miranda_input_add(), the file descriptor on which the event
59 * occurred, and the condition that was satisfied to cause the callback to be
62 typedef void (*sipe_miranda_input_function
)(gpointer
, gint
, sipe_miranda_input_condition
);
64 typedef struct sipe_miranda_sel_entry
;
66 #define CONTACTS_FOREACH(list) { \
67 GSList *entry = list; \
69 HANDLE hContact = entry->data; \
71 #define CONTACTS_FOREACH_END }}
74 typedef INT_PTR (*SipSimpleServiceFunc
)( SIPPROTO
*, WPARAM
, LPARAM
);
75 typedef int (*SipSimpleEventFunc
)( SIPPROTO
*, WPARAM
, LPARAM
);
76 typedef void (*SipSimpleThreadFunc
)( SIPPROTO
*, void* );
78 #define _NI(string) SIPE_DEBUG_INFO( "%s:%s (%d) ##NOT IMPLEMENTED## %s", __FILE__, __FUNCTION__, __LINE__, #string )
79 #define _NIF() _NI("")
81 #define _LOCK(crit) do { SIPE_DEBUG_INFO("[L:%08x] About to lock", crit); EnterCriticalSection(crit); SIPE_DEBUG_INFO("[L:%08x] Locked", crit); } while (0)
82 #define _UNLOCK(crit) do { SIPE_DEBUG_INFO("[L:%08x] About to unlock", crit); LeaveCriticalSection(crit); SIPE_DEBUG_INFO("[L:%08x] Unlocked", crit); } while (0)
83 #define LOCK _LOCK(&pr->CriticalSection)
84 #define UNLOCK _UNLOCK(&pr->CriticalSection)
86 #define _TRACE do { SIPE_DEBUG_INFO_NOFORMAT("TRACE") } while (0);
88 void sipe_miranda_close( SIPPROTO
*pr
);
90 TCHAR
* CHAR2TCHAR( const char *chr
);
91 char* TCHAR2CHAR( const TCHAR
*tchr
);
92 HANDLE
sipe_miranda_AddEvent(const SIPPROTO
*pr
, HANDLE hContact
, WORD wType
, DWORD dwTime
, DWORD flags
, DWORD cbBlob
, PBYTE pBlob
);
94 gchar
* sipe_miranda_getContactString(const SIPPROTO
*pr
, HANDLE hContact
, const gchar
* name
);
95 gchar
* sipe_miranda_getString(const SIPPROTO
*pr
, const gchar
* name
);
96 int sipe_miranda_getStaticString(const SIPPROTO
*pr
, HANDLE hContact
, const gchar
* valueName
, gchar
* dest
, unsigned dest_len
);
97 gchar
* sipe_miranda_getGlobalString(const gchar
* name
);
98 WORD
sipe_miranda_getGlobalWord(const gchar
* name
, WORD
* rv
);
99 WORD
sipe_miranda_getWord(const SIPPROTO
*pr
, HANDLE hContact
, const gchar
* name
, WORD
* rv
);
100 DWORD
sipe_miranda_getDword( const SIPPROTO
*pr
, HANDLE hContact
, const gchar
* name
, DWORD
* rv
);
101 gboolean
sipe_miranda_getBool(const SIPPROTO
*pr
, const gchar
*name
, gboolean defval
);
103 void sipe_miranda_setContactString(const SIPPROTO
*pr
, HANDLE hContact
, const gchar
* name
, const gchar
* value
);
104 void sipe_miranda_setContactStringUtf(const SIPPROTO
*pr
, HANDLE hContact
, const gchar
* valueName
, const gchar
* parValue
);
105 void sipe_miranda_setString(const SIPPROTO
*pr
, const gchar
* name
, const gchar
* value
);
106 void sipe_miranda_setStringUtf(const SIPPROTO
*pr
, const gchar
* name
, const gchar
* value
);
107 void sipe_miranda_setGlobalString(const gchar
* name
, const gchar
* value
);
108 void sipe_miranda_setGlobalStringUtf(const gchar
* valueName
, const gchar
* parValue
);
109 int sipe_miranda_setGlobalWord(const gchar
* szSetting
, WORD wValue
);
110 int sipe_miranda_setWord(const SIPPROTO
*pr
, HANDLE hContact
, const gchar
* szSetting
, WORD wValue
);
111 int sipe_miranda_setBool(const SIPPROTO
*pr
, const gchar
*name
, gboolean value
);
113 struct sipe_miranda_sel_entry
* sipe_miranda_input_add(HANDLE fd
, sipe_miranda_input_condition cond
, sipe_miranda_input_function func
, gpointer user_data
);
114 gboolean
sipe_miranda_input_remove(struct sipe_miranda_sel_entry
*entry
);
116 int sipe_miranda_SendBroadcast(SIPPROTO
*pr
, HANDLE hContact
,int type
,int result
,HANDLE hProcess
,LPARAM lParam
);
117 void sipe_miranda_SendProtoAck( SIPPROTO
*pr
, HANDLE hContact
, DWORD dwCookie
, int nAckResult
, int nAckType
, const char* pszMessage
);
118 void sipe_miranda_msgbox(const char *msg
, const char *caption
);
119 gchar
*sipe_miranda_uri_self(SIPPROTO
*pr
);
121 void sipe_miranda_login(SIPPROTO
*pr
);
122 struct sipe_miranda_connection_info
*sipe_miranda_connect(SIPPROTO
*pr
, const gchar
*host
, int port
, gboolean tls
, int timeout
, void (*callback
)(HANDLE fd
, void *data
, const gchar
*reason
), void *data
);
123 gboolean
sipe_miranda_cmd(gchar
*cmd
, gchar
*buf
, DWORD
*maxlen
);
125 gchar
* sipe_miranda_eliminate_html(const gchar
*string
, int len
);
126 gchar
* sipe_miranda_html2rtf(const gchar
*text
);
127 unsigned short sipe_miranda_network_get_port_from_fd( HANDLE fd
);
128 const gchar
*sipe_miranda_get_local_ip(void);
129 void sipe_miranda_connection_destroy(SIPPROTO
*pr
);
130 void sipe_miranda_connection_error_reason(SIPPROTO
*pr
, sipe_connection_error error
, const gchar
*msg
);
131 gpointer
sipe_miranda_schedule_mseconds(void (*callback
)(gpointer
), guint timeout
, gpointer data
);
133 /* Buddy utility functions */
134 sipe_backend_buddy
sipe_miranda_buddy_find(SIPPROTO
*pr
, const gchar
*name
, const gchar
*group
);
135 GSList
* sipe_miranda_buddy_find_all(SIPPROTO
*pr
, const gchar
*buddy_name
, const gchar
*group_name
);
137 /* Plugin interface functions */
138 int sipe_miranda_SetStatus( SIPPROTO
*pr
, int iNewStatus
);
139 int sipe_miranda_SendMsg(SIPPROTO
*pr
, HANDLE hContact
, int flags
, const char* msg
);
140 int sipe_miranda_RecvMsg(SIPPROTO
*pr
, HANDLE hContact
, PROTORECVEVENT
* pre
);
141 int sipe_miranda_SetAwayMsg(SIPPROTO
*pr
, int m_iStatus
, const PROTOCHAR
* msg
);
142 HANDLE
sipe_miranda_GetAwayMsg( SIPPROTO
*pr
, HANDLE hContact
);
143 HANDLE
sipe_miranda_SendFile( SIPPROTO
*pr
, HANDLE hContact
, const PROTOCHAR
* szDescription
, PROTOCHAR
** ppszFiles
);
144 int sipe_miranda_RecvFile( SIPPROTO
*pr
, HANDLE hContact
, PROTOFILEEVENT
* evt
);
145 int sipe_miranda_FileDeny( SIPPROTO
*pr
, HANDLE hContact
, HANDLE hTransfer
, const PROTOCHAR
* szReason
);
146 HANDLE
sipe_miranda_FileAllow( SIPPROTO
*pr
, HANDLE hContact
, HANDLE hTransfer
, const PROTOCHAR
* szPath
);
147 int sipe_miranda_UserIsTyping( SIPPROTO
*pr
, HANDLE hContact
, int type
);
148 int sipe_miranda_GetInfo( SIPPROTO
*pr
, HANDLE hContact
, int infoType
);
149 HANDLE
sipe_miranda_SearchByEmail( SIPPROTO
*pr
, const PROTOCHAR
* email
);
150 HANDLE
sipe_miranda_SearchByName( SIPPROTO
*pr
, const PROTOCHAR
* nick
, const PROTOCHAR
* firstName
, const PROTOCHAR
* lastName
);
151 HWND
sipe_miranda_SearchAdvanced( SIPPROTO
*pr
, HWND owner
);
153 /* Plugin event functions */
154 int sipe_miranda_buddy_delete(SIPPROTO
*pr
, WPARAM wParam
, LPARAM lParam
);
156 int SipeStatusToMiranda(guint activity
);
157 guint
MirandaStatusToSipe(int status
);