--- a/lm_ssl.c Fri Jul 15 19:50:50 2011 +0300
+++ b/lm_ssl.c Mon Jul 18 01:47:25 2011 +0300
@@ -46,9 +46,7 @@
/// ssl callback function
/// User function, called when ssl error happens.
-/// XXX: add lm connection object to args? it is not in API, but can be useful,
-/// though, with upvalues it is not required.
-/// A: lm ssl object, ssl status
+/// A: userdata (lm ssl object), argument enum field (ssl status)
/// R: boolean (false if connection process should be terminated)
LmSSLResponse callback_lm_ssl (LmSSL *ssl, LmSSLStatus status, llm_callback_t *cb)
{
@@ -57,7 +55,7 @@
bless_lm_ssl (cb->L, ssl);
// XXX lm_ssl_unref (ssl);
luaL_pushenum (cb->L, status, status_lm_ssl);
- if (lua_pcall (cb->L, 2, 0, 0)) {
+ if (lua_pcall (cb->L, 2, 1, 0)) {
W ("SSL callback error: %s", lua_tostring (cb->L, -1));
lua_pop (cb->L, 1);
return LM_SSL_RESPONSE_CONTINUE;
@@ -86,7 +84,7 @@
/// both, or neither. Though, fingerprint should go before callback function.
/// SSL fingerprint is a string like '01:23:45:67:89:AB:CD:EF:FE:DC:BA:98:76:54:32:10'.
/// A: string (optional ssl fingerprint), ssl callback function (optional)
-/// R: lm ssl object
+/// R: userdata (lm ssl object)
static int new_lm_ssl (lua_State *L)
{
int args = lua_gettop (L);
@@ -128,7 +126,7 @@
/// lm.ssl.bless
/// Blesses given pointer to lm ssl object.
/// A: lightuserdata (C lm ssl object)
-/// R: lm ssl object
+/// R: userdata (lm ssl object)
static int bless_lua_lm_ssl (lua_State *L)
{
luaL_argcheck (L, lua_islightuserdata (L, 1), 1, "lm ssl lightuserdata expected");
@@ -168,6 +166,26 @@
return 1;
}
+/// ssl:tls
+/// Sets or returns use of starttls by this ssl object.
+/// A: boolean (use starttls), boolean (require starttls)
+/// or
+/// R: boolean (use starttls), boolean (require starttls)
+static int tls_lm_ssl (lua_State *L)
+{
+ llm_ssl_t *object = luaL_checklm_ssl (L, 1);
+ if (lua_gettop (L) > 1) {
+ gboolean use = lua_toboolean (L, 2);
+ gboolean require = lua_toboolean (L, 3);
+ lm_ssl_use_starttls (object -> ssl, use, require);
+ return 0;
+ } else {
+ lua_pushboolean (L, lm_ssl_get_use_starttls (object -> ssl));
+ lua_pushboolean (L, lm_ssl_get_require_starttls (object -> ssl));
+ return 2;
+ }
+}
+
/// ssl:pointer
/// Returns pointer to underlying C structure.
/// R: lightuserdata
@@ -195,6 +213,7 @@
const static luaL_Reg reg_m_lm_ssl[] = {
{ "fingerprint", fingerprint_lm_ssl },
+ { "tls", tls_lm_ssl },
{ "pointer", pointer_lm_ssl },
{ "__gc", gc_lm_ssl },
{ NULL, NULL },