comparison src/protocols/msn/msg.c @ 5506:4f72b611f0ee

[gaim-migrate @ 5905] A few changes here. - Messages now have reference counting. - There's a message queue API in servconn. This was needed for times when we have a message but need further information from a command before processing it, like initial e-mail notifications. - As a result of the two above, we now have initial e-mail notifications again! committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 25 May 2003 09:04:32 +0000
parents bae3c48b9b4c
children b8abf266dd3b
comparison
equal deleted inserted replaced
5505:870207a49f2f 5506:4f72b611f0ee
61 msn_message_set_attr(msg, "User-Agent", "Gaim/" VERSION); 61 msn_message_set_attr(msg, "User-Agent", "Gaim/" VERSION);
62 msn_message_set_content_type(msg, "text/plain"); 62 msn_message_set_content_type(msg, "text/plain");
63 msn_message_set_charset(msg, "UTF-8"); 63 msn_message_set_charset(msg, "UTF-8");
64 msn_message_set_flag(msg, 'N'); 64 msn_message_set_flag(msg, 'N');
65 65
66 msn_message_ref(msg);
67
66 return msg; 68 return msg;
67 } 69 }
68 70
69 MsnMessage * 71 MsnMessage *
70 msn_message_new_from_str(MsnSession *session, const char *str) 72 msn_message_new_from_str(MsnSession *session, const char *str)
172 void 174 void
173 msn_message_destroy(MsnMessage *msg) 175 msn_message_destroy(MsnMessage *msg)
174 { 176 {
175 g_return_if_fail(msg != NULL); 177 g_return_if_fail(msg != NULL);
176 178
179 if (msg->ref_count > 0) {
180 msn_message_unref(msg);
181
182 return;
183 }
184
177 if (msg->sender != NULL) 185 if (msg->sender != NULL)
178 msn_user_unref(msg->sender); 186 msn_user_unref(msg->sender);
179 187
180 if (msg->receiver != NULL) 188 if (msg->receiver != NULL)
181 msn_user_unref(msg->receiver); 189 msn_user_unref(msg->receiver);
190 g_free(msg->charset); 198 g_free(msg->charset);
191 199
192 g_hash_table_destroy(msg->attr_table); 200 g_hash_table_destroy(msg->attr_table);
193 g_list_free(msg->attr_list); 201 g_list_free(msg->attr_list);
194 202
203 gaim_debug(GAIM_DEBUG_INFO, "msn", "Destroying message\n");
195 g_free(msg); 204 g_free(msg);
205 }
206
207 MsnMessage *
208 msn_message_ref(MsnMessage *msg)
209 {
210 g_return_val_if_fail(msg != NULL, NULL);
211
212 msg->ref_count++;
213
214 return msg;
215 }
216
217 MsnMessage *
218 msn_message_unref(MsnMessage *msg)
219 {
220 g_return_val_if_fail(msg != NULL, NULL);
221
222 if (msg->ref_count <= 0)
223 return NULL;
224
225 msg->ref_count--;
226
227 if (msg->ref_count == 0) {
228 msn_message_destroy(msg);
229
230 return NULL;
231 }
232
233 return msg;
196 } 234 }
197 235
198 char * 236 char *
199 msn_message_build_string(const MsnMessage *msg) 237 msn_message_build_string(const MsnMessage *msg)
200 { 238 {