425 return 1; |
425 return 1; |
426 } else { |
426 } else { |
427 return 0; |
427 return 0; |
428 } |
428 } |
429 } |
429 } |
|
430 |
|
431 static int meth_getpeerfinished(lua_State *L) |
|
432 { |
|
433 p_ssl ssl = (p_ssl)luaL_checkudata(L, 1, "SSL:Connection"); |
|
434 SSL *conn = ssl->ssl; |
|
435 char *buffer = NULL; |
|
436 size_t len = 0; |
|
437 if ((len = SSL_get_peer_finished(conn, NULL, 0)) != 0) { |
|
438 buffer = malloc(len); |
|
439 if (buffer == NULL) return 0; |
|
440 len = SSL_get_peer_finished(conn, buffer, len); |
|
441 lua_pushlstring(L, buffer, len); |
|
442 free(buffer); |
|
443 return 1; |
|
444 } else { |
|
445 return 0; |
|
446 } |
|
447 } |
|
448 |
430 /*---------------------------------------------------------------------------*/ |
449 /*---------------------------------------------------------------------------*/ |
431 |
450 |
432 |
451 |
433 /** |
452 /** |
434 * SSL metamethods |
453 * SSL metamethods |
443 {"settimeout", meth_settimeout}, |
462 {"settimeout", meth_settimeout}, |
444 {"want", meth_want}, |
463 {"want", meth_want}, |
445 {"compression", meth_compression}, |
464 {"compression", meth_compression}, |
446 {"getpeercertificate",meth_getpeercertificate}, |
465 {"getpeercertificate",meth_getpeercertificate}, |
447 {"getfinished", meth_getfinished}, |
466 {"getfinished", meth_getfinished}, |
|
467 {"getpeerfinished", meth_getpeerfinished}, |
448 {NULL, NULL} |
468 {NULL, NULL} |
449 }; |
469 }; |
450 |
470 |
451 /** |
471 /** |
452 * SSL functions |
472 * SSL functions |