Exemple #1
0
        /// <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;
        }
Exemple #2
0
 /// <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;
 }