static int sava_cookie(LwqqClient *lc, LwqqHttpRequest *req, LwqqErrorCode *err) { update_cookies(lc->cookies, req, "ptcz", 0); update_cookies(lc->cookies, req, "skey", 0); update_cookies(lc->cookies, req, "ptwebqq", 0); update_cookies(lc->cookies, req, "ptuserinfo", 0); update_cookies(lc->cookies, req, "uin", 0); update_cookies(lc->cookies, req, "ptisp", 0); update_cookies(lc->cookies, req, "pt2gguin", 1); return 0; }
static void get_verify_image(LwqqClient *lc) { LwqqHttpRequest *req = NULL; char url[512]; int ret; char chkuin[64]; char image_file[256]; int image_length = 0; LwqqErrorCode err; snprintf(url, sizeof(url), LWQQ_URL_VERIFY_IMG, APPID, lc->username); req = lwqq_http_create_default_request(url, &err); if (!req) { goto failed; } snprintf(chkuin, sizeof(chkuin), "chkuin=%s", lc->username); req->set_header(req, "Cookie", chkuin); ret = req->do_request(req, 0, NULL); if (ret) { goto failed; } if (req->http_code != 200) { goto failed; } const char *content_length = req->get_header(req, "Content-Length"); if (content_length) { image_length = atoi(content_length); } update_cookies(lc->cookies, req, "verifysession", 1); snprintf(image_file, sizeof(image_file), "/tmp/%s.jpeg", lc->username); /* Delete old file first */ unlink(image_file); int fd = creat(image_file, S_IRUSR | S_IWUSR); if (fd != -1) { ret = write(fd, req->response, image_length); if (ret <= 0) { lwqq_log(LOG_ERROR, "Saving erify image file error\n"); } close(fd); } lc->vc->data = req->response; lc->vc->size = req->resp_len; req->response = NULL; failed: lwqq_http_request_free(req); }
static void get_verify_code(LwqqClient *lc, LwqqErrorCode *err) { LwqqHttpRequest *req; char url[512]; char response[256]; int ret; char chkuin[64]; snprintf(url, sizeof(url), "%s%s?uin=%s&appid=%s", LWQQ_URL_CHECK_HOST, VCCHECKPATH, lc->username, APPID); req = lwqq_http_create_default_request(url, err); if (!req) { goto failed; } snprintf(chkuin, sizeof(chkuin), "chkuin=%s", lc->username); req->set_header(req, "Cookie", chkuin); ret = req->do_request(req, 0, NULL); if (ret) { *err = LWQQ_EC_NETWORK_ERROR; goto failed; } if (req->http_code != 200) { *err = LWQQ_EC_HTTP_ERROR; goto failed; } /** * * The http message body has two format: * * ptui_checkVC('1','9ed32e3f644d968809e8cbeaaf2cce42de62dfee12c14b74'); * ptui_checkVC('0','!LOB'); * The former means we need verify code image and the second * parameter is vc_type. * The later means we don't need the verify code image. The second * parameter is the verify code. The vc_type is in the header * "Set-Cookie". */ snprintf(response, sizeof(response), "%s", req->response); lwqq_log(LOG_NOTICE, "Get response verify code: %s\n", response); char *c = strstr(response, "ptui_checkVC"); char *s; if (!c) { *err = LWQQ_EC_HTTP_ERROR; goto failed; } c = strchr(response, '\''); if (!c) { *err = LWQQ_EC_HTTP_ERROR; goto failed; } c++; lc->vc = s_malloc0(sizeof(*lc->vc)); if (*c == '0') { /* We got the verify code. */ /* Parse uin first */ lc->vc->uin = parse_verify_uin(response); if (!lc->vc->uin) goto failed; s = c; c = strstr(s, "'"); s = c + 1; c = strstr(s, "'"); s = c + 1; c = strstr(s, "'"); *c = '\0'; lc->vc->type = s_strdup("0"); lc->vc->str = s_strdup(s); /* We need get the ptvfsession from the header "Set-Cookie" */ update_cookies(lc->cookies, req, "ptvfsession", 1); lwqq_log(LOG_NOTICE, "Verify code: %s\n", lc->vc->str); } else if (*c == '1') { /* We need get the verify image. */ /* Parse uin first */ lc->vc->uin = parse_verify_uin(response); s = c; c = strstr(s, "'"); s = c + 1; c = strstr(s, "'"); s = c + 1; c = strstr(s, "'"); *c = '\0'; lc->vc->type = s_strdup("1"); // ptui_checkVC('1','7ea19f6d3d2794eb4184c9ae860babf3b9c61441520c6df0', '\x00\x00\x00\x00\x04\x7e\x73\xb2'); lc->vc->str = s_strdup(s); *err = LWQQ_EC_LOGIN_NEED_VC; lwqq_log(LOG_NOTICE, "We need verify code image: %s\n", lc->vc->str); } lwqq_http_request_free(req); return ; failed: lwqq_http_request_free(req); }