Mercurial > pidgin
changeset 30099:ffcc09277b88
Add an error handler for SLP messages instead of bailing out immediately.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Wed, 26 May 2010 23:08:53 +0000 |
parents | 51c31805d2a7 |
children | 3c09870e8564 |
files | libpurple/protocols/msn/slp.c |
diffstat | 1 files changed, 23 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/protocols/msn/slp.c Wed May 26 15:54:41 2010 +0000 +++ b/libpurple/protocols/msn/slp.c Wed May 26 23:08:53 2010 +0000 @@ -928,6 +928,17 @@ } } +static void +got_error(MsnSlpCall *slpcall, + const char *error, const char *type, const char *content) +{ + /* It's not valid. Kill this off. */ + purple_debug_error("msn", "Received non-OK result: %s\n", + error ? error : "Unknown"); + + slpcall->wasted = TRUE; +} + MsnSlpCall * msn_slp_sip_recv(MsnSlpLink *slplink, const char *body) { @@ -1004,38 +1015,31 @@ g_return_val_if_fail(slpcall != NULL, NULL); + content_type = get_token(body, "Content-Type: ", "\r\n"); + + content = get_token(body, "\r\n\r\n", NULL); + if (strncmp(status, "200 OK", 6)) { - /* It's not valid. Kill this off. */ - char temp[32]; + char *error = NULL; const char *c; /* Eww */ if ((c = strchr(status, '\r')) || (c = strchr(status, '\n')) || (c = strchr(status, '\0'))) { - size_t offset = c - status; - if (offset >= sizeof(temp)) - offset = sizeof(temp) - 1; - - strncpy(temp, status, offset); - temp[offset] = '\0'; + size_t len = c - status; + error = g_strndup(status, len); } - purple_debug_error("msn", "Received non-OK result: %s\n", temp); + got_error(slpcall, error, content_type, content); + g_free(error); - slpcall->wasted = TRUE; - - /* msn_slpcall_destroy(slpcall); */ - return slpcall; + } else { + /* Everything's just dandy */ + got_ok(slpcall, content_type, content); } - content_type = get_token(body, "Content-Type: ", "\r\n"); - - content = get_token(body, "\r\n\r\n", NULL); - - got_ok(slpcall, content_type, content); - g_free(content_type); g_free(content); }