6 * Copyright (C) 2008 Novell, Inc.
7 * Copyright (C) 2007 Anibal Avelar <avelar@gmail.com>
8 * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #ifndef _PIDGIN_SIPE_H
26 #define _PIDGIN_SIPE_H
32 #include "circbuffer.h"
43 #define SIMPLE_BUF_INC 4096
45 #define SIPE_TYPING_RECV_TIMEOUT 6
46 #define SIPE_TYPING_SEND_TIMEOUT 4
48 struct sip_im_session
{
50 struct sip_dialog
* dialog
;
51 struct transaction
* outgoing_invite
;
53 GSList
*outgoing_message_queue
;
56 // dialog is the new term for call-leg
70 struct sip_dialog dialog
;
81 int type
; /* 1 = Digest / 2 = NTLM / 3 = Kerberos */
90 gchar
*digest_session_key
;
100 } sipe_transport_type
;
102 struct sipe_service_data
{
104 const char *transport
;
105 sipe_transport_type type
;
108 struct sipe_account_data
{
109 PurpleConnection
*gc
;
113 PurpleDnsQueryData
*query_data
;
114 PurpleSrvQueryData
*srv_query_data
;
115 const struct sipe_service_data
*service_data
;
116 PurpleNetworkListenData
*listen_data
;
121 int registerstatus
; /* 0 nothing, 1 first registration send, 2 auth received, 3 registered */
122 struct sip_auth registrar
;
123 struct sip_auth proxy
;
128 int presence_method_version
;
133 guint registertimeout
;
136 PurpleAccount
*account
;
137 PurpleCircBuffer
*txbuf
;
140 GSList
*transactions
;
145 sipe_transport_type transport
;
146 PurpleSslConnection
*gsc
;
147 struct sockaddr_in serveraddr
;
150 int realport
; /* port and hostname from SRV record */
157 struct sip_connection
{
167 typedef gboolean (*TransCallback
) (struct sipe_account_data
*, struct sipmsg
*, struct transaction
*);
172 int transport
; /* 0 = tcp, 1 = udp */
176 TransCallback callback
;
183 PurpleGroup
*purple_group
;
186 struct group_user_context
{
191 #define SIPE_INVITE_TEXT "ms-text-format: text/plain; charset=UTF-8;msgr=WAAtAE0ATQBTAC0ASQBNAC0ARgBvAHIAbQBhAHQAOgAgAEYATgA9AE0AUwAlADIAMABTAGgAZQBsAGwAJQAyADAARABsAGcAJQAyADAAMgA7ACAARQBGAD0AOwAgAEMATwA9ADAAOwAgAEMAUwA9ADAAOwAgAFAARgA9ADAACgANAAoADQA;ms-body=%s\r\n"
193 #define SIPE_SEND_TYPING \
194 "<?xml version=\"1.0\"?>"\
195 "<KeyboardActivity>"\
196 "<status status=\"type\" />"\
197 "</KeyboardActivity>"
199 #define SIPE_SEND_PRESENCE \
200 "<publish xmlns=\"http://schemas.microsoft.com/2006/09/sip/rich-presence\">"\
201 "<publications uri=\"%s\">"\
202 "<publication categoryName=\"state\" instance=\"906391354\" container=\"2\" version=\"%d\" expireType=\"endpoint\">"\
203 "<state xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\" manual=\"false\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"machineState\">"\
204 "<availability>%d</availability>"\
205 "<endpointLocation></endpointLocation>"\
208 "<publication categoryName=\"state\" instance=\"906391356\" container=\"0\" version=\"%d\" expireType=\"endpoint\">"\
209 "<state xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\" manual=\"true\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"userState\">"\
210 "<availability>%d</availability>"\
211 "<endpointLocation></endpointLocation>"\
214 "<publication categoryName=\"note\" instance=\"0\" container=\"400\" version=\"%d\" expireType=\"static\">"\
215 "<note xmlns=\"http://schemas.microsoft.com/2006/09/sip/note\">"\
216 "<body type=\"personal\" uri=\"\">%s</body>"\
219 "<publication categoryName=\"note\" instance=\"0\" container=\"200\" version=\"%d\" expireType=\"static\">"\
220 "<note xmlns=\"http://schemas.microsoft.com/2006/09/sip/note\">"\
221 "<body type=\"personal\" uri=\"\">%s</body>"\
224 "<publication categoryName=\"note\" instance=\"0\" container=\"300\" version=\"%d\" expireType=\"static\">"\
225 "<note xmlns=\"http://schemas.microsoft.com/2006/09/sip/note\">"\
226 "<body type=\"personal\" uri=\"\">%s</body>"\
233 #define SIPE_SEND_CLEAR_PRESENCE \
234 "<publish xmlns=\"http://schemas.microsoft.com/2006/09/sip/rich-presence\">"\
235 "<publications uri=\"%s\">"\
236 "<publication categoryName=\"state\" instance=\"906391354\" container=\"2\" version=\"1\" expireType=\"static\" expires=\"0\" />"\
237 "<publication categoryName=\"state\" instance=\"906391356\" container=\"0\" version=\"1\" expireType=\"static\" expires=\"0\" />"\
238 "<publication categoryName=\"note\" instance=\"0\" container=\"300\" version=\"1\" expireType=\"static\" expires=\"0\" />"\
239 "<publication categoryName=\"note\" instance=\"0\" container=\"200\" version=\"1\" expireType=\"static\" expires=\"0\" />"\
240 "<publication categoryName=\"note\" instance=\"0\" container=\"400\" version=\"1\" expireType=\"static\" expires=\"0\" />"\
245 #define sipe_soap(method, body) \
246 "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">" \
248 "<m:" method " xmlns:m=\"http://schemas.microsoft.com/winrtc/2002/11/sip\">" \
252 "</SOAP-ENV:Envelope>"
254 #define SIPE_SOAP_SET_CONTACT sipe_soap("setContact", \
255 "<m:displayName>%s</m:displayName>"\
256 "<m:groups>%d</m:groups>"\
257 "<m:subscribed>%s</m:subscribed>"\
260 "<m:deltaNum>%d</m:deltaNum>")
262 #define SIPE_SOAP_DEL_CONTACT sipe_soap("deleteContact", \
264 "<m:deltaNum>%d</m:deltaNum>")
266 #define SIPE_SOAP_ADD_GROUP sipe_soap("addGroup", \
267 "<m:name>%s</m:name>"\
269 "<m:deltaNum>%d</m:deltaNum>")
271 #define SIPE_SOAP_MOD_GROUP sipe_soap("modifyGroup", \
272 "<m:groupID>%d</m:groupID>"\
273 "<m:name>%s</m:name>"\
275 "<m:deltaNum>%d</m:deltaNum>")
277 #define SIPE_SOAP_DEL_GROUP sipe_soap("deleteGroup", \
278 "<m:groupID>%d</m:groupID>"\
279 "<m:deltaNum>%d</m:deltaNum>")
281 #define SIPE_SOAP_SET_PRESENCE sipe_soap("setPresence", \
282 "<m:presentity m:uri=\"%s\">"\
283 "<m:availability m:aggregate=\"%d\"/>"\
284 "<m:activity m:aggregate=\"%d\" m:note=\"%s\"/>"\
285 "<deviceName xmlns=\"http://schemas.microsoft.com/2002/09/sip/client/presence\" name=\"USER-DESKTOP\"/>"\
286 "<rtc:devicedata xmlns:rtc=\"http://schemas.microsoft.com/2002/09/sip/client/presence\" namespace=\"rtcService\">"\
287 "<![CDATA[<caps><renders_gif/><renders_isf/></caps>]]></rtc:devicedata>"\
290 #define SIPE_SOAP_SEARCH_CONTACT \
291 "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">" \
293 "<m:directorySearch xmlns:m=\"http://schemas.microsoft.com/winrtc/2002/11/sip\">" \
294 "<m:filter m:href=\"#searchArray\"/>"\
295 "<m:maxResults>%d</m:maxResults>"\
296 "</m:directorySearch>"\
297 "<m:Array xmlns:m=\"http://schemas.microsoft.com/winrtc/2002/11/sip\" m:id=\"searchArray\">"\
298 "<m:row m:attrib=\"givenName\" m:value=\"%s\"/>"\
301 "</SOAP-ENV:Envelope>"
305 #endif /* _PIDGIN_SIPE_H */