diff --git a/BeefLibs/curl/src/Curl.bf b/BeefLibs/curl/src/Curl.bf index 50610423..020609e1 100644 --- a/BeefLibs/curl/src/Curl.bf +++ b/BeefLibs/curl/src/Curl.bf @@ -917,6 +917,12 @@ namespace CURL return WrapResult((ReturnCode)curl_easy_setopt(mCURL, (int)option, (int)(void*)val.CStr())); } + public Result SetOpt(Option option, StringView val) + { + Debug.Assert((int)option / 10000 == 1); + return WrapResult((ReturnCode)curl_easy_setopt(mCURL, (int)option, (int)(void*)scope String(4096)..Append(val).CStr())); + } + public Result SetOpt(Option option, int val) { Debug.Assert(((int)option / 10000 == 0) || ((int)option / 10000 == 3)); diff --git a/BeefLibs/curl/src/Transfer.bf b/BeefLibs/curl/src/Transfer.bf index ba270de8..c24b5e4e 100644 --- a/BeefLibs/curl/src/Transfer.bf +++ b/BeefLibs/curl/src/Transfer.bf @@ -8,7 +8,8 @@ namespace CURL { class Transfer { - CURL.Easy mCurl = new CURL.Easy() ~ delete _; + CURL.Easy mCurl; + bool mOwns; bool mCancelling = false; List mData = new List() ~ delete _; Stopwatch mStatsTimer = new Stopwatch() ~ delete _; @@ -59,7 +60,13 @@ namespace CURL public this() { + mCurl = new CURL.Easy(); + mOwns = true; + } + public this(CURL.Easy curl) + { + mCurl = curl; } public ~this() @@ -67,6 +74,9 @@ namespace CURL mCancelling = true; if (mRunning) mDoneEvent.WaitFor(); + + if (mOwns) + delete mCurl; } int GetCurBytesPerSecond() @@ -119,7 +129,7 @@ namespace CURL return count; } - public void Init(String url) + public void Init(StringView url) { function int(void *p, int dltotal, int dlnow, int ultotal, int ulnow) callback = => Callback; mCurl.SetOptFunc(.XferInfoFunction, (void*)callback); @@ -133,6 +143,13 @@ namespace CURL mCurl.SetOpt(.URL, url); mCurl.SetOpt(.NoProgress, false); mCurl.SetOpt(.IPResolve, (int)CURL.Easy.IPResolve.V4); + mCurl.SetOpt(.HTTPGet, true); + } + + public void InitPost(String url, String param) + { + Init(url); + mCurl.SetOpt(.Postfields, param); } public Result> Perform()