# HG changeset patch # User Elliott Sales de Andrade # Date 1274915333 0 # Node ID ffcc09277b881405034b452a8168907106913024 # Parent 51c31805d2a765484f8d478b86f7e0ad79271da9 Add an error handler for SLP messages instead of bailing out immediately. diff -r 51c31805d2a7 -r ffcc09277b88 libpurple/protocols/msn/slp.c --- 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); }