From 56737ac5233439e8cc0186b2a59195bb251232e6 Mon Sep 17 00:00:00 2001 From: Asher Baker Date: Thu, 16 May 2013 14:49:03 +0100 Subject: [PATCH] File upload support for webternet (r=psychonic). --- extensions/curl/curlapi.cpp | 12 ++++++++++++ extensions/curl/curlapi.h | 1 + public/extensions/IWebternet.h | 13 ++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/extensions/curl/curlapi.cpp b/extensions/curl/curlapi.cpp index b4e934ef..b9061d68 100644 --- a/extensions/curl/curlapi.cpp +++ b/extensions/curl/curlapi.cpp @@ -18,6 +18,18 @@ bool WebForm::AddString(const char *name, const char *data) return lastError == CURL_FORMADD_OK; } +bool WebForm::AddFile(const char *name, const char *path) +{ + lastError = curl_formadd(&first, + &last, + CURLFORM_COPYNAME, + name, + CURLFORM_FILE, + data, + CURLFORM_END); + return lastError == CURL_FORMADD_OK; +} + curl_httppost *WebForm::GetFormData() { return first; diff --git a/extensions/curl/curlapi.h b/extensions/curl/curlapi.h index 926a5a9b..6fda9e90 100644 --- a/extensions/curl/curlapi.h +++ b/extensions/curl/curlapi.h @@ -44,6 +44,7 @@ public: ~WebForm(); public: bool AddString(const char *name, const char *data); + bool AddFile(const char *name, const char *path); public: curl_httppost *GetFormData(); private: diff --git a/public/extensions/IWebternet.h b/public/extensions/IWebternet.h index c6a33172..abc0e8a2 100644 --- a/public/extensions/IWebternet.h +++ b/public/extensions/IWebternet.h @@ -40,7 +40,7 @@ */ #define SMINTERFACE_WEBTERNET_NAME "IWebternet" -#define SMINTERFACE_WEBTERNET_VERSION 2 +#define SMINTERFACE_WEBTERNET_VERSION 3 namespace SourceMod { @@ -79,6 +79,17 @@ namespace SourceMod * @return True on success, false on failure. */ virtual bool AddString(const char *name, const char *data) = 0; + + /** + * @brief Adds a file to the form. + * + * All data is copied locally and may go out of scope. + * + * @param name Field name (null terminated). + * @param path Local file path (null terminated). + * @return True on success, false on failure. + */ + virtual bool AddFile(const char *name, const char *path) = 0; }; /**