/// <summary> /// 配置 pcs 对象 /// </summary> /// <param name="pcs"></param> /// <param name="opt"></param> /// <param name="value"></param> /// <returns>成功后返回 PCS_OK,失败则返回错误编号</returns> public static PcsRes pcs_setopt(BaiduPCS pcs, PcsOption opt, object value) { PcsRes r = PcsRes.PCS_OK; switch (opt) { /* 值为以0结尾的C格式字符串 */ case PcsOption.PCS_OPTION_USERNAME: { IntPtr v = NativeUtils.utf8_str_ptr((string)value); r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, v); NativeUtils.free_str_ptr(v); } break; /* 值为以0结尾的C格式字符串 */ case PcsOption.PCS_OPTION_PASSWORD: { IntPtr v = NativeUtils.utf8_str_ptr((string)value); r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, v); NativeUtils.free_str_ptr(v); } break; /* 值为PcsGetCaptcha类型的函数 */ case PcsOption.PCS_OPTION_CAPTCHA_FUNCTION: { if (value != null) { IntPtr v = Marshal.GetFunctionPointerForDelegate(pcs._onGetCaptcha); r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, v); } else { r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, IntPtr.Zero); } pcs._OnGetCaptcha = (GetCaptchaFunction)value; } break; /* Pcs本身不使用该值,仅原样传递到PcsGetCaptcha函数中 */ case PcsOption.PCS_OPTION_CAPTCHA_FUNCTION_DATA: pcs.GetCaptchaUserData = value; NativeMethods.pcs_setopt(pcs.Handle, (int)opt, IntPtr.Zero); break; /* 值为PcsHttpWriteFunction类型的函数 */ case PcsOption.PCS_OPTION_DOWNLOAD_WRITE_FUNCTION: { if (value != null) { IntPtr v = Marshal.GetFunctionPointerForDelegate(pcs._onHttpWrite); r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, v); } else { r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, IntPtr.Zero); } pcs._OnHttpWrite = (WriteBlockFunction)value; } break; /* Pcs本身不使用该值,仅原样传递到PcsHttpWriteFunction函数中 */ case PcsOption.PCS_OPTION_DOWNLOAD_WRITE_FUNCTION_DATA: pcs.WriteUserData = value; NativeMethods.pcs_setopt(pcs.Handle, (int)opt, IntPtr.Zero); break; /* 值为PcsHttpResponseFunction类型的函数 */ case PcsOption.PCS_OPTION_HTTP_RESPONSE_FUNCTION: { if (value != null) { IntPtr v = Marshal.GetFunctionPointerForDelegate(pcs._onHttpResponse); r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, v); } else { r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, IntPtr.Zero); } pcs._OnHttpResponse = (OnHttpResponseFunction)value; } break; /* Pcs本身不使用该值,仅原样传递到PcsHttpResponseFunction函数中 */ case PcsOption.PCS_OPTION_HTTP_RESPONSE_FUNCTION_DATE: pcs.ResponseUserData = value; NativeMethods.pcs_setopt(pcs.Handle, (int)opt, IntPtr.Zero); break; /* 值为PcsHttpProgressCallback类型的函数 */ case PcsOption.PCS_OPTION_PROGRESS_FUNCTION: { if (value != null) { IntPtr v = Marshal.GetFunctionPointerForDelegate(pcs._onHttpProgress); r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, v); } else { r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, IntPtr.Zero); } pcs._OnHttpProgress = (OnHttpProgressFunction)value; } break; /* Pcs本身不使用该值,仅原样传递到PcsHttpProgressCallback函数中 */ case PcsOption.PCS_OPTION_PROGRESS_FUNCTION_DATE: pcs.ProgressUserData = value; NativeMethods.pcs_setopt(pcs.Handle, (int)opt, IntPtr.Zero); break; /* 设置是否启用下载或上传进度,值为PcsBool类型 */ case PcsOption.PCS_OPTION_PROGRESS: { pcs._ProgressEnabled = (bool)value; IntPtr v = ((bool)value) ? NativeUtils.IntPtrAdd(IntPtr.Zero, 1) : IntPtr.Zero; r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, v); } break; /* 设置USAGE,值为char类型指针 */ case PcsOption.PCS_OPTION_USAGE: { IntPtr v = NativeUtils.str_ptr((string)value); r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, v); NativeUtils.free_str_ptr(v); pcs._UserAgent = (string)value; } break; /*设置整个请求的超时时间,值为int类型*/ case PcsOption.PCS_OPTION_TIMEOUT: { IntPtr v = NativeUtils.IntPtrAdd(IntPtr.Zero, (int)value); r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, v); } break; /*设置连接前的等待时间,值为int类型*/ case PcsOption.PCS_OPTION_CONNECTTIMEOUT: { IntPtr v = NativeUtils.IntPtrAdd(IntPtr.Zero, (int)value); r = (PcsRes)NativeMethods.pcs_setopt(pcs.Handle, (int)opt, v); } break; default: r = PcsRes.PCS_FAIL; break; } return r; }
/// <summary> /// 设定单个选项 /// </summary> /// <param name="opt"></param> /// <param name="value"></param> /// <returns>成功后返回PCS_OK,失败则返回错误编号</returns> public PcsRes setOption(PcsOption opt, object value) { PcsRes r = pcs_setopt(this, opt, value); return r; }