PCS_API char *pcs_http_get_cookie(PcsHttp handle, const char *cookie_name) { struct pcs_http *http = (struct pcs_http *)handle; CURLcode res; struct curl_slist *cookies; struct curl_slist *nc; char *p; char *name = NULL, *value = NULL; res = curl_easy_getinfo(http->curl, CURLINFO_COOKIELIST, &cookies); if (res != CURLE_OK) return NULL; nc = cookies; while (nc) { p = nc->data; skip_cookie_attr(&p); skip_cookie_attr(&p); skip_cookie_attr(&p); skip_cookie_attr(&p); skip_cookie_attr(&p); name = read_cookie_attr(&p); value = read_cookie_attr(&p); if (pcs_utils_strcmpi(cookie_name, name) == 0) { pcs_free(name); break; } pcs_free(name); pcs_free(value); nc = nc->next; } curl_slist_free_all(cookies); return value; }
PCS_API PcsFileInfo *pcs_meta(Pcs handle, const char *path) { PcsFileInfoList *filist; PcsFileInfo *meta = NULL; char *dir, *key; PcsFileInfoListIterater iterater; pcs_clear_errmsg(handle); dir = pcs_utils_basedir(path); key = pcs_utils_filename(path); filist = pcs_search(handle, dir, key, PcsFalse); pcs_free(dir); pcs_free(key); if (!filist) return NULL; pcs_filist_iterater_init(filist, &iterater, PcsFalse); while(pcs_filist_iterater_next(&iterater)) { if (pcs_utils_strcmpi(path, iterater.current->path) == 0) { meta = iterater.current; break; } } if (meta) { meta = pcs_fileinfo_clone(meta); if (!meta) { pcs_set_errmsg(handle, "Can't clone the meta data."); } } else { pcs_set_errmsg(handle, "Can't find the file."); } pcs_filist_destroy(filist); return meta; }
int encode_to_mbs(char *dest, int sz, const char *src, int srcsz) { const char *charset = u8_get_sys_charset(); if (pcs_utils_strcmpi(charset, "utf-8") == 0) { if (srcsz == -1) { const char *p = src; while(*p) { p++; } srcsz = p - src; } memcpy(dest, src, srcsz); return srcsz; } else { return code_convert("utf-8", charset, dest, sz, src, srcsz); } }
int encode_to_mbs_size(const char *src, int srcsz) { const char *charset = u8_get_sys_charset(); if (pcs_utils_strcmpi(charset, "utf-8") == 0) { if (srcsz == -1) { const char *p = src; while(*p) { p++; } srcsz = p - src; } return srcsz; } else { int sz; char *dest; sz = srcsz * 4 + 4; dest = (char *) alloca(sz); return code_convert("utf-8", charset, dest, sz, src, srcsz); } }
int shell(struct params *params) { PcsRes pcsres; const char *cookie_file; Pcs pcs; if (params->cookie) cookie_file = params->cookie; else cookie_file = get_default_cookie_file(params->username); printf("COOKIE FILE: %s\n", cookie_file); /* 创建一个Pcs对象 */ pcs = pcs_create(cookie_file); /* 设定如何获取验证码 */ if (params->use_urlc) { pcs_setopt(pcs, PCS_OPTION_CAPTCHA_FUNCTION, cb_get_verify_code_byurlc); } else { pcs_setopt(pcs, PCS_OPTION_CAPTCHA_FUNCTION, cb_get_verify_code); } if (params->is_verbose) { pcs_setopt(pcs, PCS_OPTION_HTTP_RESPONSE_FUNCTION, cb_pcs_http_response); } pcs_setopts(pcs, PCS_OPTION_PROGRESS_FUNCTION, cb_upload_progress, PCS_OPTION_PROGRESS, PcsFalse, PCS_OPTION_END); if ((pcsres = pcs_islogin(pcs)) != PCS_LOGIN) { if (!params->username) { printf("Your session is time out, please restart with -u option\n"); pcs_destroy(pcs); return -1; } pcs_setopt(pcs, PCS_OPTION_USERNAME, params->username); if (!params->password) { char password[50]; printf("Password: "******"Login Failed: %s\n", pcs_strerror(pcs)); pcs_destroy(pcs); return -1; } } else { if (params->username && pcs_utils_strcmpi(pcs_sysUID(pcs), params->username) != 0) { char flag[8] = {0}; printf("You have been logged in with %s, but you specified %s,\ncontinue?(yes|no): \n", pcs_sysUID(pcs), params->username); get_string_from_std_input(flag, 4); if (pcs_utils_strcmpi(flag, "yes") && pcs_utils_strcmpi(flag, "y")) { pcs_destroy(pcs); return -1; } } } printf("UID: %s\n", pcs_sysUID(pcs)); show_quota(pcs); exec_cmd(pcs, params); pcs_destroy(pcs); return 0; }