Mercurial > pidgin.yaz
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 |