Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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);
	}
}
Beispiel #4
0
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);
	}
}
Beispiel #5
0
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;
}