summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/wispr.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/tools/wispr.c b/tools/wispr.c
index 7de9dbb0..a0002ba3 100644
--- a/tools/wispr.c
+++ b/tools/wispr.c
@@ -530,7 +530,10 @@ static gboolean wispr_result(GWebResult *result, gpointer user_data)
printf("Logoff URL: %s\n", wispr->msg.logoff_url);
printf("\n");
- if (status == 302 && wispr->msg.message_type == 100) {
+ if (status != 200 && status != 302 && status != 404)
+ goto done;
+
+ if (wispr->msg.message_type == 100) {
if (wispr->username == NULL) {
user_input("Username", FALSE, username_callback, wispr);
return FALSE;
@@ -543,13 +546,30 @@ static gboolean wispr_result(GWebResult *result, gpointer user_data)
g_idle_add(execute_login, wispr);
return FALSE;
- } else if (status == 200 && (wispr->msg.message_type == 120 ||
- wispr->msg.message_type == 140)) {
+ } else if (wispr->msg.message_type == 120 ||
+ wispr->msg.message_type == 140) {
int code = wispr->msg.response_code;
printf("Login process: %s\n",
code == 50 ? "SUCCESS" : "FAILURE");
}
+ if (status == 302) {
+ const char *redirect;
+
+ if (g_web_result_get_header(result, "Location",
+ &redirect) == FALSE)
+ goto done;
+
+ printf("\n");
+ printf("Redirect URL: %s\n", redirect);
+ printf("\n");
+
+ wispr->request = g_web_request_get(wispr->web, redirect,
+ wispr_result, wispr);
+
+ return FALSE;
+ }
+
done:
g_main_loop_quit(main_loop);