Esempio n. 1
0
File: login.c Progetto: yet/lwqq
/** 
 * WebQQ login function
 * Step:
 * 1. Get webqq version
 * 2. Get verify code
 * 3. Calculate password's md5
 * 4. Do real login 
 * 5. check whether logining successfully
 * 
 * @param client Lwqq Client 
 * @param err Error code
 */
void lwqq_login(LwqqClient *client, LwqqErrorCode *err)
{
    if (!client || !err) {
        lwqq_log(LOG_ERROR, "Invalid pointer\n");
        return ;
    }

    /* First: get webqq version */
    get_version(client, err);
    if (*err) {
        lwqq_log(LOG_ERROR, "Get webqq version error\n");
        return ;
    }
    lwqq_log(LOG_NOTICE, "Get webqq version: %s\n", client->version);

    /**
     * Second, we get the verify code from server.
     * If server provide us a image and let us enter code shown
     * in image number, in this situation, we just return LWQQ_EC_LOGIN_NEED_VC
     * simply, so user should call lwqq_login() again after he set correct
     * code to vc->str;
     * Else, if we can get the code directly, do login immediately.
     * 
     */
    if (!client->vc) {
        get_verify_code(client, err);
        switch (*err) {
        case LWQQ_EC_LOGIN_NEED_VC:
            get_verify_image(client);
            lwqq_log(LOG_WARNING, "Need to enter verify code\n");
            return ;
        
        case LWQQ_EC_NETWORK_ERROR:
            lwqq_log(LOG_ERROR, "Network error\n");
            return ;

        case LWQQ_EC_OK:
            lwqq_log(LOG_DEBUG, "Get verify code OK\n");
            break;

        default:
            lwqq_log(LOG_ERROR, "Unknown error\n");
            return ;
        }
    }
    
    /* Third: calculate the md5 */
    char *md5 = lwqq_enc_pwd(client->password, client->vc->str, client->vc->uin);

    /* Last: do real login */
    do_login(client, md5, err);
    s_free(md5);

    /* Free old value */
    lwqq_vc_free(client->vc);
    client->vc = NULL;
}
Esempio n. 2
0
static void login_stage_4(LwqqClient* lc)
{
    if(!lwqq_client_valid(lc)) return;
    /* Third: calculate the md5 */
    char *md5 = lwqq_enc_pwd(lc->password, lc->vc->str, lc->vc->uin);

    /* Last: do real login */
    LwqqAsyncEvent* ev = do_login(lc, md5, NULL);
    s_free(md5);
    lwqq_async_add_event_listener(ev,_C_(p,login_stage_5,ev));

}