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); }
static int get_verify_code_back(LwqqHttpRequest* req) { int err = LWQQ_EC_OK; char response[256]; LwqqClient* lc = req->lc; 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){ err = LWQQ_EC_ERROR; 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); } failed: lwqq_http_request_free(req); return err; }