407 free(buffer); |
407 free(buffer); |
408 BIO_free(bp); |
408 BIO_free(bp); |
409 return 1; |
409 return 1; |
410 } |
410 } |
411 } |
411 } |
|
412 |
|
413 static int meth_getfinished(lua_State *L) |
|
414 { |
|
415 p_ssl ssl = (p_ssl)luaL_checkudata(L, 1, "SSL:Connection"); |
|
416 SSL *conn = ssl->ssl; |
|
417 char *buffer = NULL; |
|
418 size_t len = 0; |
|
419 if ((len = SSL_get_finished(conn, NULL, 0)) != 0) { |
|
420 buffer = malloc(len); |
|
421 if (buffer == NULL) return 0; |
|
422 len = SSL_get_finished(conn, buffer, len); |
|
423 lua_pushlstring(L, buffer, len); |
|
424 free(buffer); |
|
425 return 1; |
|
426 } else { |
|
427 return 0; |
|
428 } |
|
429 } |
412 /*---------------------------------------------------------------------------*/ |
430 /*---------------------------------------------------------------------------*/ |
413 |
431 |
414 |
432 |
415 /** |
433 /** |
416 * SSL metamethods |
434 * SSL metamethods |
424 {"send", meth_send}, |
442 {"send", meth_send}, |
425 {"settimeout", meth_settimeout}, |
443 {"settimeout", meth_settimeout}, |
426 {"want", meth_want}, |
444 {"want", meth_want}, |
427 {"compression", meth_compression}, |
445 {"compression", meth_compression}, |
428 {"getpeercertificate",meth_getpeercertificate}, |
446 {"getpeercertificate",meth_getpeercertificate}, |
|
447 {"getfinished", meth_getfinished}, |
429 {NULL, NULL} |
448 {NULL, NULL} |
430 }; |
449 }; |
431 |
450 |
432 /** |
451 /** |
433 * SSL functions |
452 * SSL functions |