More Windows build fix.
5 WebForm::WebForm() : first(NULL), last(NULL), lastError(CURL_FORMADD_OK)
9 bool WebForm::AddString(const char *name, const char *data)
11 lastError = curl_formadd(&first,
15 CURLFORM_COPYCONTENTS,
18 return lastError == CURL_FORMADD_OK;
21 bool WebForm::AddFile(const char *name, const char *path)
23 lastError = curl_formadd(&first,
30 return lastError == CURL_FORMADD_OK;
33 curl_httppost *WebForm::GetFormData()
43 WebTransfer *WebTransfer::CreateWebSession()
47 curl = curl_easy_init();
53 WebTransfer *easy = new WebTransfer(curl);
55 if (curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, easy->errorBuffer))
60 curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1);
61 curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
66 WebTransfer::WebTransfer(CURL *_curl)
71 const char *WebTransfer::LastErrorMessage()
76 int WebTransfer::LastErrorCode()
81 bool WebTransfer::SetHeaderReturn(bool recv_hdr)
83 lastError = curl_easy_setopt(curl, CURLOPT_HEADER, recv_hdr ? 1 : 0);
84 return lastError == 0;
87 bool WebTransfer::SetFailOnHTTPError(bool fail)
89 lastError = curl_easy_setopt(curl, CURLOPT_FAILONERROR, fail ? 1 : 0);
90 return lastError == 0;
93 static size_t curl_write_to_sm(void *ptr, size_t bytes, size_t nmemb, void *stream)
95 void **userdata = (void **)stream;
96 IWebTransfer *session = (IWebTransfer *)userdata[0];
97 ITransferHandler *handler = (ITransferHandler *)userdata[1];
99 DownloadWriteStatus status;
100 status = handler->OnDownloadWrite(session, userdata[2], ptr, bytes, nmemb);
101 if (status != DownloadWrite_Okay)
103 /* Return a differing amount */
104 return (bytes == 0 || nmemb == 0) ? 1 : 0;
107 return bytes * nmemb;
110 bool WebTransfer::Download(const char *url, ITransferHandler *handler, void *data)
112 lastError = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_write_to_sm);
120 userdata[1] = handler;
122 lastError = curl_easy_setopt(curl, CURLOPT_WRITEDATA, userdata);
128 lastError = curl_easy_setopt(curl, CURLOPT_HTTPPOST, NULL);
134 lastError = curl_easy_setopt(curl, CURLOPT_URL, url);
140 lastError = curl_easy_perform(curl);
142 return (lastError == 0);
145 bool WebTransfer::PostAndDownload(const char *url,
147 ITransferHandler *handler,
150 WebForm *realform = (WebForm*)form;
152 lastError = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_write_to_sm);
160 userdata[1] = handler;
162 lastError = curl_easy_setopt(curl, CURLOPT_WRITEDATA, userdata);
168 lastError = curl_easy_setopt(curl, CURLOPT_HTTPPOST, realform->GetFormData());
174 lastError = curl_easy_setopt(curl, CURLOPT_URL, url);
180 lastError = curl_easy_perform(curl);
182 return (lastError == 0);
185 WebTransfer::~WebTransfer()
187 curl_easy_cleanup(curl);
190 unsigned int Webternet::GetInterfaceVersion()
192 return SMINTERFACE_WEBTERNET_VERSION;
195 const char *Webternet::GetInterfaceName()
197 return SMINTERFACE_WEBTERNET_NAME;
200 IWebTransfer *Webternet::CreateSession()
202 return WebTransfer::CreateWebSession();
205 IWebForm *Webternet::CreateForm()
207 return new WebForm();