comparison libpurple/protocols/msn/soap.h @ 20539:2c8c6d77f12c

Make use of the GQueue in MsnSoapConn to manage the SOAP requests, allowing them to work perfectly even when dispatching multiple requests at once. Delete a user from the userlist after the contact is deleted from the server.
author Carlos Silva <typ0@pidgin.im>
date Wed, 19 Sep 2007 06:08:42 +0000
parents f6dff814d95f
children 48ee7ec3426d
comparison
equal deleted inserted replaced
20525:5bef3197383a 20539:2c8c6d77f12c
27 #define _MSN_SOAP_H_ 27 #define _MSN_SOAP_H_
28 28
29 #define MSN_SOAP_READ_BUFF_SIZE 8192 29 #define MSN_SOAP_READ_BUFF_SIZE 8192
30 30
31 /* define this to debug the communications with the SOAP server */ 31 /* define this to debug the communications with the SOAP server */
32 /* #define MSN_SOAP_DEBUG */ 32 /* #define MSN_SOAP_DEBUG */
33 33
34 #define MSN_SOAP_READ 1
35 #define MSN_SOAP_WRITE 2
34 36
35 typedef enum 37 typedef enum
36 { 38 {
37 MSN_SOAP_UNCONNECTED, 39 MSN_SOAP_UNCONNECTED,
38 MSN_SOAP_CONNECTING, 40 MSN_SOAP_CONNECTING,
39 MSN_SOAP_CONNECTED, 41 MSN_SOAP_CONNECTED,
40 MSN_SOAP_PROCESSING, 42 MSN_SOAP_PROCESSING,
41 MSN_SOAP_CONNECTED_IDLE 43 MSN_SOAP_CONNECTED_IDLE
42 }MsnSoapStep; 44 }MsnSoapStep;
43 45
44 /*MSN SoapRequest structure*/ 46 /* MSN SoapRequest structure*/
45 typedef struct _MsnSoapReq MsnSoapReq; 47 typedef struct _MsnSoapReq MsnSoapReq;
46 48
47 /*MSN Https connection structure*/ 49 /* MSN Https connection structure*/
48 typedef struct _MsnSoapConn MsnSoapConn; 50 typedef struct _MsnSoapConn MsnSoapConn;
49 51
50 typedef void (*MsnSoapConnectInitFunction)(MsnSoapConn *); 52 typedef void (*MsnSoapConnectInitFunction)(MsnSoapConn *);
53 typedef gboolean (*MsnSoapReadCbFunction)(MsnSoapConn *);
54 typedef void (*MsnSoapWrittenCbFunction)(MsnSoapConn *);
55
56 typedef gboolean (*MsnSoapSslConnectCbFunction)(MsnSoapConn *, PurpleSslConnection *);
57 typedef void (*MsnSoapSslErrorCbFunction)(MsnSoapConn *, PurpleSslConnection *, PurpleSslErrorType);
51 58
52 59
53 struct _MsnSoapReq{ 60 struct _MsnSoapReq{
54 /*request sequence*/ 61 /*request sequence*/
55 int id; 62 int id;
59 char *soap_action; 66 char *soap_action;
60 67
61 char *body; 68 char *body;
62 69
63 gpointer data_cb; 70 gpointer data_cb;
64 PurpleInputFunction read_cb; 71 MsnSoapReadCbFunction read_cb;
65 PurpleInputFunction written_cb; 72 MsnSoapWrittenCbFunction written_cb;
73 MsnSoapConnectInitFunction connect_init;
66 }; 74 };
67 75
68 struct _MsnSoapConn{ 76 struct _MsnSoapConn{
69 MsnSession *session; 77 MsnSession *session;
70 gpointer parent; 78 gpointer parent;
79 /*normal connection*/ 87 /*normal connection*/
80 guint fd; 88 guint fd;
81 /*SSL connection*/ 89 /*SSL connection*/
82 PurpleSslConnection *gsc; 90 PurpleSslConnection *gsc;
83 /*ssl connection callback*/ 91 /*ssl connection callback*/
84 PurpleSslInputFunction connect_cb; 92 MsnSoapSslConnectCbFunction connect_cb;
85 /*ssl error callback*/ 93 /*ssl error callback*/
86 PurpleSslErrorFunction error_cb; 94 MsnSoapSslErrorCbFunction error_cb;
87 95
88 /*read handler*/ 96 /*read handler*/
89 guint input_handler; 97 guint input_handler;
90 /*write handler*/ 98 /*write handler*/
91 guint output_handler; 99 guint output_handler;
95 GQueue *soap_queue; 103 GQueue *soap_queue;
96 104
97 /*write buffer*/ 105 /*write buffer*/
98 char *write_buf; 106 char *write_buf;
99 gsize written_len; 107 gsize written_len;
100 PurpleInputFunction written_cb; 108 MsnSoapWrittenCbFunction written_cb;
101 109
102 /*read buffer*/ 110 /*read buffer*/
103 char *read_buf; 111 char *read_buf;
104 gsize read_len; 112 gsize read_len;
105 gsize need_to_read; 113 gsize need_to_read;
106 PurpleInputFunction read_cb; 114 MsnSoapReadCbFunction read_cb;
107 115
108 gpointer data_cb; 116 gpointer data_cb;
109 117
110 /*HTTP reply body part*/ 118 /*HTTP reply body part*/
111 char *body; 119 char *body;
116 /*Function Prototype*/ 124 /*Function Prototype*/
117 /*Soap Request Function */ 125 /*Soap Request Function */
118 MsnSoapReq *msn_soap_request_new(const char *host, const char *post_url, 126 MsnSoapReq *msn_soap_request_new(const char *host, const char *post_url,
119 const char *soap_action, const char *body, 127 const char *soap_action, const char *body,
120 const gpointer data_cb, 128 const gpointer data_cb,
121 PurpleInputFunction read_cb, 129 MsnSoapReadCbFunction read_cb,
122 PurpleInputFunction written_cb); 130 MsnSoapWrittenCbFunction written_cb,
131 MsnSoapConnectInitFunction connect_init);
123 132
124 void msn_soap_request_free(MsnSoapReq *request); 133 void msn_soap_request_free(MsnSoapReq *request);
125 void msn_soap_post_request(MsnSoapConn *soapconn,MsnSoapReq *request); 134 void msn_soap_post_request(MsnSoapConn *soapconn,MsnSoapReq *request);
126 void msn_soap_post_head_request(MsnSoapConn *soapconn); 135 void msn_soap_post_head_request(MsnSoapConn *soapconn);
127 136
130 139
131 /*destroy */ 140 /*destroy */
132 void msn_soap_destroy(MsnSoapConn *soapconn); 141 void msn_soap_destroy(MsnSoapConn *soapconn);
133 142
134 /*init a soap conneciton */ 143 /*init a soap conneciton */
135 void msn_soap_init(MsnSoapConn *soapconn,char * host,int ssl,PurpleSslInputFunction connect_cb,PurpleSslErrorFunction error_cb); 144 void msn_soap_init(MsnSoapConn *soapconn, char * host, int ssl,
145 MsnSoapSslConnectCbFunction connect_cb,
146 MsnSoapSslErrorCbFunction error_cb);
136 void msn_soap_connect(MsnSoapConn *soapconn); 147 void msn_soap_connect(MsnSoapConn *soapconn);
137 void msn_soap_close(MsnSoapConn *soapconn); 148 void msn_soap_close(MsnSoapConn *soapconn);
138 149
139 /*write to soap*/ 150 /*write to soap*/
140 void msn_soap_write(MsnSoapConn * soapconn, char *write_buf, PurpleInputFunction written_cb); 151 void msn_soap_write(MsnSoapConn * soapconn, char *write_buf, MsnSoapWrittenCbFunction written_cb);
141 void msn_soap_post(MsnSoapConn *soapconn,MsnSoapReq *request,MsnSoapConnectInitFunction msn_soap_init_func); 152 void msn_soap_post(MsnSoapConn *soapconn,MsnSoapReq *request);
142 153
143 void msn_soap_free_read_buf(MsnSoapConn *soapconn); 154 void msn_soap_free_read_buf(MsnSoapConn *soapconn);
144 void msn_soap_free_write_buf(MsnSoapConn *soapconn); 155 void msn_soap_free_write_buf(MsnSoapConn *soapconn);
145 void msn_soap_connect_cb(gpointer data, PurpleSslConnection *gsc, PurpleInputCondition cond); 156 void msn_soap_connect_cb(gpointer data, PurpleSslConnection *gsc, PurpleInputCondition cond);
146 void msn_soap_read_cb(gpointer data, gint source, PurpleInputCondition cond); 157 void msn_soap_read_cb(gpointer data, gint source, PurpleInputCondition cond);
147 158
148 /*clean the unhandled request*/ 159 /*clean the unhandled requests*/
149 void msn_soap_clean_unhandled_request(MsnSoapConn *soapconn); 160 void msn_soap_clean_unhandled_requests(MsnSoapConn *soapconn);
150 161
151 /*check if the soap connection is connected*/ 162 /*check if the soap connection is connected*/
152 int msn_soap_connected(MsnSoapConn *soapconn); 163 int msn_soap_connected(MsnSoapConn *soapconn);
164 void msn_soap_set_process_step(MsnSoapConn *soapconn, MsnSoapStep step);
153 165
154 #endif/*_MSN_SOAP_H_*/ 166 #endif/*_MSN_SOAP_H_*/
155 167