libssh2: use `libssh2_session_callback_set2()` with v1.11.1

To avoid a local hack to pass function pointers and to avoid
deprecation warnings when building with libssh2 v1.11.1 or newer:
```
lib/vssh/libssh2.c:3324:5: warning: 'libssh2_session_callback_set' is deprecated: since libssh2 1.11.1. Use libssh2_session_callback_set2() [-Wdeprecated-declarations]
lib/vssh/libssh2.c:3326:5: warning: 'libssh2_session_callback_set' is deprecated: since libssh2 1.11.1. Use libssh2_session_callback_set2() [-Wdeprecated-declarations]
```
Ref: https://github.com/curl/curl-for-win/actions/runs/7609484879/job/20720821100#step:3:4982

Ref: https://github.com/libssh2/libssh2/pull/1285
Ref: c0f69548be
Reviewed-by: Daniel Stenberg
Closes #12754
This commit is contained in:
Viktor Szakats 2024-01-22 11:21:10 +00:00
Родитель cdd905a985
Коммит 02f91d5b64
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5ABD165E2AEF201
1 изменённых файлов: 22 добавлений и 12 удалений

Просмотреть файл

@ -3289,6 +3289,27 @@ static CURLcode ssh_connect(struct Curl_easy *data, bool *done)
#ifndef CURL_DISABLE_PROXY
if(conn->http_proxy.proxytype == CURLPROXY_HTTPS) {
/*
Setup libssh2 callbacks to make it read/write TLS from the socket.
ssize_t
recvcb(libssh2_socket_t sock, void *buffer, size_t length,
int flags, void **abstract);
ssize_t
sendcb(libssh2_socket_t sock, const void *buffer, size_t length,
int flags, void **abstract);
*/
#if LIBSSH2_VERSION_NUM >= 0x010b01
infof(data, "Uses HTTPS proxy");
libssh2_session_callback_set2(sshc->ssh_session,
LIBSSH2_CALLBACK_RECV,
(libssh2_cb_generic *)ssh_tls_recv);
libssh2_session_callback_set2(sshc->ssh_session,
LIBSSH2_CALLBACK_SEND,
(libssh2_cb_generic *)ssh_tls_send);
#else
/*
* This crazy union dance is here to avoid assigning a void pointer a
* function pointer as it is invalid C. The problem is of course that
@ -3309,22 +3330,11 @@ static CURLcode ssh_connect(struct Curl_easy *data, bool *done)
sshsend.sendptr = ssh_tls_send;
infof(data, "Uses HTTPS proxy");
/*
Setup libssh2 callbacks to make it read/write TLS from the socket.
ssize_t
recvcb(libssh2_socket_t sock, void *buffer, size_t length,
int flags, void **abstract);
ssize_t
sendcb(libssh2_socket_t sock, const void *buffer, size_t length,
int flags, void **abstract);
*/
libssh2_session_callback_set(sshc->ssh_session,
LIBSSH2_CALLBACK_RECV, sshrecv.recvp);
libssh2_session_callback_set(sshc->ssh_session,
LIBSSH2_CALLBACK_SEND, sshsend.sendp);
#endif
/* Store the underlying TLS recv/send function pointers to be used when
reading from the proxy */