Mercurial > pidgin.yaz
comparison src/protocols/msn/msn.c @ 2213:a226ebf4be47
[gaim-migrate @ 2223]
hi
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Wed, 05 Sep 2001 18:34:34 +0000 |
parents | 3a6fd1e8f00a |
children | 20a4d5da0b95 |
comparison
equal
deleted
inserted
replaced
2212:c9a4063171e9 | 2213:a226ebf4be47 |
---|---|
802 | 802 |
803 serv_got_update(gc, user, 1, 0, 0, 0, status, 0); | 803 serv_got_update(gc, user, 1, 0, 0, 0, status, 0); |
804 } else if (!g_strncasecmp(buf, "OUT", 3)) { | 804 } else if (!g_strncasecmp(buf, "OUT", 3)) { |
805 } else if (!g_strncasecmp(buf, "PRP", 3)) { | 805 } else if (!g_strncasecmp(buf, "PRP", 3)) { |
806 } else if (!g_strncasecmp(buf, "QRY", 3)) { | 806 } else if (!g_strncasecmp(buf, "QRY", 3)) { |
807 } else if (!g_strncasecmp(buf, "REA", 3)) { | |
808 char *friend, *tmp = buf; | |
809 | |
810 GET_NEXT(tmp); | |
811 GET_NEXT(tmp); | |
812 GET_NEXT(tmp); | |
813 GET_NEXT(tmp); | |
814 friend = tmp; | |
815 | |
816 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", friend); | |
807 } else if (!g_strncasecmp(buf, "REM", 3)) { | 817 } else if (!g_strncasecmp(buf, "REM", 3)) { |
808 } else if (!g_strncasecmp(buf, "RNG", 3)) { | 818 } else if (!g_strncasecmp(buf, "RNG", 3)) { |
809 struct msn_switchboard *ms; | 819 struct msn_switchboard *ms; |
810 char *sessid, *ssaddr, *auth, *user; | 820 char *sessid, *ssaddr, *auth, *user; |
811 int port, i = 0; | 821 int port, i = 0; |
985 GET_NEXT(tmp); | 995 GET_NEXT(tmp); |
986 resp = tmp; | 996 resp = tmp; |
987 GET_NEXT(tmp); | 997 GET_NEXT(tmp); |
988 GET_NEXT(tmp); | 998 GET_NEXT(tmp); |
989 friend = tmp; | 999 friend = tmp; |
990 | 1000 GET_NEXT(tmp); |
991 debug_printf("resp: %s; friend: %s\n", resp, friend); | |
992 | 1001 |
993 /* so here, we're either getting the challenge or the OK */ | 1002 /* so here, we're either getting the challenge or the OK */ |
994 if (strstr(buf, "OK")) { | 1003 if (!g_strcasecmp(resp, "OK")) { |
995 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", friend); | 1004 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", friend); |
996 | 1005 |
997 g_snprintf(buf, sizeof(buf), "SYN %d 0\n", ++md->trId); | 1006 g_snprintf(buf, sizeof(buf), "SYN %d 0\n", ++md->trId); |
998 if (msn_write(md->fd, buf, strlen(buf)) < 0) { | 1007 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
999 hide_login_progress(gc, "Unable to write"); | 1008 hide_login_progress(gc, "Unable to write"); |
1018 account_online(gc); | 1027 account_online(gc); |
1019 serv_finish_login(gc); | 1028 serv_finish_login(gc); |
1020 | 1029 |
1021 gaim_input_remove(md->inpa); | 1030 gaim_input_remove(md->inpa); |
1022 md->inpa = gaim_input_add(md->fd, GAIM_INPUT_READ, msn_callback, gc); | 1031 md->inpa = gaim_input_add(md->fd, GAIM_INPUT_READ, msn_callback, gc); |
1023 } else if (strstr(buf, "MD5")) { | 1032 } else if (!g_strcasecmp(resp, "MD5")) { |
1024 char *challenge = buf; | |
1025 char buf2[MSN_BUF_LEN]; | 1033 char buf2[MSN_BUF_LEN]; |
1026 md5_state_t st; | 1034 md5_state_t st; |
1027 md5_byte_t di[16]; | 1035 md5_byte_t di[16]; |
1028 int spaces = 4; | |
1029 int i; | 1036 int i; |
1030 | 1037 |
1031 while (spaces) { | 1038 g_snprintf(buf2, sizeof(buf2), "%s%s", friend, gc->password); |
1032 if (isspace(*challenge)) { | |
1033 spaces--; | |
1034 while (isspace(challenge[1])) | |
1035 challenge++; | |
1036 } | |
1037 challenge++; | |
1038 } | |
1039 | |
1040 g_snprintf(buf2, sizeof(buf2), "%s%s", challenge, gc->password); | |
1041 | 1039 |
1042 md5_init(&st); | 1040 md5_init(&st); |
1043 md5_append(&st, (const md5_byte_t *)buf2, strlen(buf2)); | 1041 md5_append(&st, (const md5_byte_t *)buf2, strlen(buf2)); |
1044 md5_finish(&st, di); | 1042 md5_finish(&st, di); |
1045 | 1043 |
1391 if (msn_write(md->fd, buf, strlen(buf)) < 0) { | 1389 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
1392 hide_login_progress(gc, "Write error"); | 1390 hide_login_progress(gc, "Write error"); |
1393 signoff(gc); | 1391 signoff(gc); |
1394 return; | 1392 return; |
1395 } | 1393 } |
1394 } | |
1395 | |
1396 static void msn_act_id(gpointer data, char *entry) | |
1397 { | |
1398 struct gaim_connection *gc = data; | |
1399 struct msn_data *md = gc->proto_data; | |
1400 char buf[MSN_BUF_LEN]; | |
1401 | |
1402 g_snprintf(buf, sizeof(buf), "REA %d %s %s\n", ++md->trId, gc->username, entry); | |
1403 if (msn_write(md->fd, buf, strlen(buf)) < 0) { | |
1404 hide_login_progress(gc, "Write error"); | |
1405 signoff(gc); | |
1406 return; | |
1407 } | |
1408 } | |
1409 | |
1410 static void msn_do_action(struct gaim_connection *gc, char *act) | |
1411 { | |
1412 if (!strcmp(act, "Set Friendly Name")) { | |
1413 do_prompt_dialog("Set Friendly Name:", gc, msn_act_id, NULL); | |
1414 } | |
1415 } | |
1416 | |
1417 static GList *msn_actions() | |
1418 { | |
1419 GList *m = NULL; | |
1420 | |
1421 m = g_list_append(m, "Set Friendly Name"); | |
1422 | |
1423 return m; | |
1396 } | 1424 } |
1397 | 1425 |
1398 static struct prpl *my_protocol = NULL; | 1426 static struct prpl *my_protocol = NULL; |
1399 | 1427 |
1400 void msn_init(struct prpl *ret) | 1428 void msn_init(struct prpl *ret) |
1414 ret->remove_buddy = msn_rem_buddy; | 1442 ret->remove_buddy = msn_rem_buddy; |
1415 ret->chat_send = msn_chat_send; | 1443 ret->chat_send = msn_chat_send; |
1416 ret->chat_invite = msn_chat_invite; | 1444 ret->chat_invite = msn_chat_invite; |
1417 ret->chat_leave = msn_chat_leave; | 1445 ret->chat_leave = msn_chat_leave; |
1418 ret->normalize = msn_normalize; | 1446 ret->normalize = msn_normalize; |
1447 ret->do_action = msn_do_action; | |
1448 ret->actions = msn_actions; | |
1419 | 1449 |
1420 my_protocol = ret; | 1450 my_protocol = ret; |
1421 } | 1451 } |
1422 | 1452 |
1423 #ifndef STATIC | 1453 #ifndef STATIC |