# Top level of Curl
class Curl
- protected var prim_curl: CCurl
+ protected var prim_curl = new CCurl.easy_init
init
do
- self.prim_curl = new CCurl.easy_init
assert curlInstance:self.prim_curl.is_init else
print "Curl must be instancied to be used"
end
# Check for correct initialization
fun is_ok: Bool do return self.prim_curl.is_init
- # Get an HTTP Request object to perform your own
- fun http_request(url: String): nullable CurlRequest
- do
- var err
- err = self.prim_curl.easy_setopt(new CURLOption.follow_location, 1)
- if not err.is_ok then return null
-
- err = self.prim_curl.easy_setopt(new CURLOption.url, url)
- if not err.is_ok then return null
-
- return new CurlHTTPRequest(url, self)
- end
-
- # Get a MAIL Request Object
- fun mail_request: nullable CurlMailRequest
- do
- var err: CURLCode
- err = self.prim_curl.easy_setopt(new CURLOption.follow_location, 1)
- if not err.is_ok then return null
-
- return new CurlMailRequest(self)
- end
-
# Release Curl instance
fun destroy do self.prim_curl.easy_clean
end
# CURL Request
class CurlRequest
- var verbose: Bool writable = false
+ var verbose: Bool = false is writable
private var curl: nullable Curl = null
# Launch request method
fun execute: CurlResponse is abstract
# Intern perform method, lowest level of request launching
- private fun perform: nullable CurlResponse
+ private fun perform: nullable CurlResponseFailed
do
if not self.curl.is_ok then return answer_failure(0, "Curl instance is not correctly initialized")
end
# Intern method with return a failed answer with given code and message
- private fun answer_failure(error_code: Int, error_msg: String): CurlResponse
+ private fun answer_failure(error_code: Int, error_msg: String): CurlResponseFailed
do
return new CurlResponseFailed(error_code, error_msg)
end
super CurlCallbacksRegisterIntern
var url: String
- var datas: nullable HeaderMap writable = null
- var headers: nullable HeaderMap writable = null
+ var datas: nullable HeaderMap = null is writable
+ var headers: nullable HeaderMap = null is writable
- init (url: String, curl: nullable Curl)
+ # Set the user agent for all following HTTP requests
+ fun user_agent=(name: String)
do
+ curl.prim_curl.easy_setopt(new CURLOption.user_agent, name)
+ end
+
+ init (url: String, curl: nullable Curl) is old_style_init do
self.url = url
self.curl = curl
end
var err
+ err = self.curl.prim_curl.easy_setopt(new CURLOption.follow_location, 1)
+ if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+ err = self.curl.prim_curl.easy_setopt(new CURLOption.url, url)
+ if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
# Callbacks
err = self.curl.prim_curl.register_callback(callback_receiver, new CURLCallbackType.header)
if not err.is_ok then return answer_failure(err.to_i, err.to_s)
if self.delegate != null then callback_receiver = self.delegate.as(not null)
var err
+
+ err = self.curl.prim_curl.easy_setopt(new CURLOption.follow_location, 1)
+ if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
+ err = self.curl.prim_curl.easy_setopt(new CURLOption.url, url)
+ if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
err = self.curl.prim_curl.register_callback(callback_receiver, new CURLCallbackType.header)
if not err.is_ok then return answer_failure(err.to_i, err.to_s)
super CurlRequest
super CCurlCallbacks
- var headers: nullable HeaderMap writable = null
- var headers_body: nullable HeaderMap writable = null
- var from: nullable String writable = null
- var to: nullable Array[String] writable = null
- var cc: nullable Array[String] writable = null
- var bcc: nullable Array[String] writable = null
- var subject: nullable String writable = ""
- var body: nullable String writable = ""
- private var supported_outgoing_protocol: Array[String]
-
- init (curl: nullable Curl)
- do
+ var headers: nullable HeaderMap = null is writable
+ var headers_body: nullable HeaderMap = null is writable
+ var from: nullable String = null is writable
+ var to: nullable Array[String] = null is writable
+ var cc: nullable Array[String] = null is writable
+ var bcc: nullable Array[String] = null is writable
+ var subject: nullable String = "" is writable
+ var body: nullable String = "" is writable
+ private var supported_outgoing_protocol: Array[String] = ["smtp", "smtps"]
+
+ init (curl: nullable Curl) is old_style_init do
self.curl = curl
- self.supported_outgoing_protocol = once ["smtp", "smtps"]
end
# Helper method to add conventional space while building entire mail
end
# Configure server host and user credentials if needed.
- fun set_outgoing_server(host: String, user: nullable String, pwd: nullable String):nullable CurlResponse
+ fun set_outgoing_server(host: String, user: nullable String, pwd: nullable String): nullable CurlResponseFailed
do
# Check Curl initialisation
if not self.curl.is_ok then return answer_failure(0, "Curl instance is not correctly initialized")
if g_rec.length < 1 then return answer_failure(0, "The mail recipients can not be empty")
var err
+
+ err = self.curl.prim_curl.easy_setopt(new CURLOption.follow_location, 1)
+ if not err.is_ok then return answer_failure(err.to_i, err.to_s)
+
err = self.curl.prim_curl.easy_setopt(new CURLOption.mail_rcpt, g_rec.to_curlslist)
if not err.is_ok then return answer_failure(err.to_i, err.to_s)
# Callbacks attributes
abstract class CurlCallbacksRegisterIntern
- var delegate: nullable CurlCallbacks writable = null
+ var delegate: nullable CurlCallbacks = null is writable
end
# Abstract Curl request response
var error_code: Int
var error_msg: String
-
- init (err_code: Int, err_msg: String)
- do
- self.error_code = err_code
- self.error_msg = err_msg
- end
end
# Success Abstract Response Success Class
super MapIterator[String, String]
private var iterator: Iterator[Couple[String, String]]
- init(map: HeaderMap) do self.iterator = map.arr.iterator
+ init(map: HeaderMap) is old_style_init do self.iterator = map.arr.iterator
redef fun is_ok do return self.iterator.is_ok
redef fun next do self.iterator.next