Sun, 27 Jan 2008 04:26:38 +0000
In msimprpl, grow the read buffer if it gets full using g_realloc(), similar to
how the IRC prpl does it. Now large messages should be received and processed
without filling up the read buffer and crashing.
|
19795
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
1 | /* MySpaceIM Protocol Plugin, session |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
2 | * |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
3 | * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
4 | * |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
5 | * This program is free software; you can redistribute it and/or modify |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
7 | * the Free Software Foundation; either version 2 of the License, or |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
8 | * (at your option) any later version. |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
9 | * |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
13 | * GNU General Public License for more details. |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
14 | * |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
16 | * along with this program; if not, write to the Free Software |
|
20376
40eb7fd73b9a
merge of 'f78451b4a2f7106eb8f8fa7275a7a29230593449'
Casey Harkins <charkins@pidgin.im>
diff
changeset
|
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
19795
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
18 | */ |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
19 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
20 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
21 | #include "myspace.h" |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
22 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
23 | /* Session methods */ |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
24 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
25 | /** |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
26 | * Create a new MSIM session. |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
27 | * |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
28 | * @param acct The account to create the session from. |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
29 | * |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
30 | * @return Pointer to a new session. Free with msim_session_destroy. |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
31 | */ |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
32 | MsimSession * |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
33 | msim_session_new(PurpleAccount *acct) |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
34 | { |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
35 | MsimSession *session; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
36 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
37 | g_return_val_if_fail(acct != NULL, NULL); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
38 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
39 | session = g_new0(MsimSession, 1); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
40 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
41 | session->magic = MSIM_SESSION_STRUCT_MAGIC; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
42 | session->account = acct; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
43 | session->gc = purple_account_get_connection(acct); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
44 | session->sesskey = 0; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
45 | session->userid = 0; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
46 | session->username = NULL; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
47 | session->fd = -1; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
48 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
49 | /* TODO: Remove. */ |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
50 | session->user_lookup_cb = g_hash_table_new_full(g_direct_hash, |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
51 | g_direct_equal, NULL, NULL); /* do NOT free function pointers! (values) */ |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
52 | session->user_lookup_cb_data = g_hash_table_new_full(g_direct_hash, |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
53 | g_direct_equal, NULL, NULL);/* TODO: we don't know what the values are, |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
54 | they could be integers inside gpointers |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
55 | or strings, so I don't freed them. |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
56 | Figure this out, once free cache. */ |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
57 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
58 | /* Created in msim_process_server_info() */ |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
59 | session->server_info = NULL; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
60 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
61 | session->rxoff = 0; |
|
22348
4b0b743ba8c5
In msimprpl, grow the read buffer if it gets full using g_realloc(), similar to
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
21730
diff
changeset
|
62 | session->rxsize = MSIM_READ_BUF_SIZE; |
|
4b0b743ba8c5
In msimprpl, grow the read buffer if it gets full using g_realloc(), similar to
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
21730
diff
changeset
|
63 | session->rxbuf = g_new0(gchar, session->rxsize); |
|
19795
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
64 | session->next_rid = 1; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
65 | session->last_comm = time(NULL); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
66 | session->inbox_status = 0; |
|
21730
bc1897ec9281
applied changes from 6546cfd72ecd9aa76fc524aaf3ac48489aeb2a90
Kevin Stange <kstange@pidgin.im>
parents:
20376
diff
changeset
|
67 | session->inbox_handle = 0; |
|
19795
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
68 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
69 | return session; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
70 | } |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
71 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
72 | /** |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
73 | * Free a session. |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
74 | * |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
75 | * @param session The session to destroy. |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
76 | */ |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
77 | void |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
78 | msim_session_destroy(MsimSession *session) |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
79 | { |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
80 | g_return_if_fail(MSIM_SESSION_VALID(session)); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
81 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
82 | session->magic = -1; |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
83 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
84 | g_free(session->rxbuf); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
85 | g_free(session->username); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
86 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
87 | /* TODO: Remove. */ |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
88 | g_hash_table_destroy(session->user_lookup_cb); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
89 | g_hash_table_destroy(session->user_lookup_cb_data); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
90 | |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
91 | if (session->server_info) { |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
92 | msim_msg_free(session->server_info); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
93 | } |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
94 | |
|
21730
bc1897ec9281
applied changes from 6546cfd72ecd9aa76fc524aaf3ac48489aeb2a90
Kevin Stange <kstange@pidgin.im>
parents:
20376
diff
changeset
|
95 | /* Stop checking the inbox at the end of the session. */ |
|
bc1897ec9281
applied changes from 6546cfd72ecd9aa76fc524aaf3ac48489aeb2a90
Kevin Stange <kstange@pidgin.im>
parents:
20376
diff
changeset
|
96 | if (session->inbox_handle) { |
|
bc1897ec9281
applied changes from 6546cfd72ecd9aa76fc524aaf3ac48489aeb2a90
Kevin Stange <kstange@pidgin.im>
parents:
20376
diff
changeset
|
97 | purple_timeout_remove(session->inbox_handle); |
|
bc1897ec9281
applied changes from 6546cfd72ecd9aa76fc524aaf3ac48489aeb2a90
Kevin Stange <kstange@pidgin.im>
parents:
20376
diff
changeset
|
98 | } |
|
bc1897ec9281
applied changes from 6546cfd72ecd9aa76fc524aaf3ac48489aeb2a90
Kevin Stange <kstange@pidgin.im>
parents:
20376
diff
changeset
|
99 | |
|
19795
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
100 | g_free(session); |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
101 | } |
|
149d7d8284cc
Replace all CRLF line-endings with LF line endings (Unix-style). This fixes
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19617
diff
changeset
|
102 |