summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwilliam <william@25tandclement.com>2014-10-15 14:57:07 -0700
committerwilliam <william@25tandclement.com>2014-10-15 14:57:07 -0700
commitb8860e791f886b510bd8539bb26fa22558b9f42d (patch)
tree9c76af1bbf7363985be00162a63de2bf4bc4bf44
parentc3bdfe8cc6985d54f989aa1538fc19458abaa973 (diff)
downloadluaossl-b8860e791f886b510bd8539bb26fa22558b9f42d.tar.gz
luaossl-b8860e791f886b510bd8539bb26fa22558b9f42d.tar.bz2
luaossl-b8860e791f886b510bd8539bb26fa22558b9f42d.zip
add ssl:getVersion and ssl:getClientVersion methods
-rw-r--r--src/openssl.c81
1 files changed, 74 insertions, 7 deletions
diff --git a/src/openssl.c b/src/openssl.c
index 5695b58..034806b 100644
--- a/src/openssl.c
+++ b/src/openssl.c
@@ -4706,6 +4706,56 @@ static int ssl_setHostName(lua_State *L) {
4706} /* ssl_setHostName() */ 4706} /* ssl_setHostName() */
4707 4707
4708 4708
4709static int ssl_getVersion(lua_State *L) {
4710 SSL *ssl = checksimple(L, 1, SSL_CLASS);
4711 int format = luaL_checkoption(L, 2, "d", (const char *[]){ "d", ".", "f", NULL });
4712 int version = SSL_version(ssl);
4713 int major, minor;
4714
4715 switch (format) {
4716 case 1: case 2:
4717 major = 0xff & ((version >> 8));
4718 minor = (0xff & version);
4719
4720 luaL_argcheck(L, minor < 10, 2, "unable to convert SSL version to float because minor version >= 10");
4721 lua_pushnumber(L, major + ((double)minor / 10));
4722
4723 break;
4724 default:
4725 lua_pushinteger(L, version);
4726
4727 break;
4728 }
4729
4730 return 1;
4731} /* ssl_getVersion() */
4732
4733
4734static int ssl_getClientVersion(lua_State *L) {
4735 SSL *ssl = checksimple(L, 1, SSL_CLASS);
4736 int format = luaL_checkoption(L, 2, "d", (const char *[]){ "d", ".", "f", NULL });
4737 int version = ssl->client_version;
4738 int major, minor;
4739
4740 switch (format) {
4741 case 1: case 2:
4742 major = 0xff & ((version >> 8));
4743 minor = (0xff & version);
4744
4745 luaL_argcheck(L, minor < 10, 2, "unable to convert SSL client version to float because minor version >= 10");
4746 lua_pushnumber(L, major + ((double)minor / 10));
4747
4748 break;
4749 default:
4750 lua_pushinteger(L, version);
4751
4752 break;
4753 }
4754
4755 return 1;
4756} /* ssl_getClientVersion() */
4757
4758
4709static int ssl__gc(lua_State *L) { 4759static int ssl__gc(lua_State *L) {
4710 SSL **ud = luaL_checkudata(L, 1, SSL_CLASS); 4760 SSL **ud = luaL_checkudata(L, 1, SSL_CLASS);
4711 4761
@@ -4719,14 +4769,16 @@ static int ssl__gc(lua_State *L) {
4719 4769
4720 4770
4721static const luaL_Reg ssl_methods[] = { 4771static const luaL_Reg ssl_methods[] = {
4722 { "setOptions", &ssl_setOptions }, 4772 { "setOptions", &ssl_setOptions },
4723 { "getOptions", &ssl_getOptions }, 4773 { "getOptions", &ssl_getOptions },
4724 { "clearOptions", &ssl_clearOptions }, 4774 { "clearOptions", &ssl_clearOptions },
4725 { "getPeerCertificate", &ssl_getPeerCertificate }, 4775 { "getPeerCertificate", &ssl_getPeerCertificate },
4726 { "getPeerChain", &ssl_getPeerChain }, 4776 { "getPeerChain", &ssl_getPeerChain },
4727 { "getCipherInfo", &ssl_getCipherInfo }, 4777 { "getCipherInfo", &ssl_getCipherInfo },
4728 { "getHostName", &ssl_getHostName }, 4778 { "getHostName", &ssl_getHostName },
4729 { "setHostName", &ssl_setHostName }, 4779 { "setHostName", &ssl_setHostName },
4780 { "getVersion", &ssl_getVersion },
4781 { "getClientVersion", &ssl_getClientVersion },
4730 { NULL, NULL }, 4782 { NULL, NULL },
4731}; 4783};
4732 4784
@@ -4741,10 +4793,25 @@ static const luaL_Reg ssl_globals[] = {
4741 { NULL, NULL }, 4793 { NULL, NULL },
4742}; 4794};
4743 4795
4796static const integer_Reg ssl_version[] = {
4797 { "SSL2_VERSION", SSL2_VERSION },
4798 { "SSL3_VERSION", SSL3_VERSION },
4799 { "TLS1_VERSION", TLS1_VERSION },
4800#if defined TLS1_1_VERSION
4801 { "TLS1_1_VERSION", TLS1_1_VERSION },
4802#endif
4803#if defined TLS1_2_VERSION
4804 { "TLS1_2_VERSION", TLS1_2_VERSION },
4805#endif
4806 { NULL, 0 },
4807};
4808
4809
4744int luaopen__openssl_ssl(lua_State *L) { 4810int luaopen__openssl_ssl(lua_State *L) {
4745 initall(L); 4811 initall(L);
4746 4812
4747 luaL_newlib(L, ssl_globals); 4813 luaL_newlib(L, ssl_globals);
4814 lib_setintegers(L, ssl_version);
4748 lib_setintegers(L, sx_verify); 4815 lib_setintegers(L, sx_verify);
4749 lib_setintegers(L, sx_option); 4816 lib_setintegers(L, sx_option);
4750 4817