curl_version_info: provide librtmp version

Ref: https://github.com/curl/curl/pull/13364#issuecomment-2054151942
Reported-by: talregev on github
Closes #13368
This commit is contained in:
Daniel Stenberg 2024-04-15 08:31:59 +02:00
parent e1f1ec028a
commit dde4b3855e
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
6 changed files with 54 additions and 29 deletions

View File

@ -104,6 +104,9 @@ typedef struct {
/* when 'age' is CURLVERSION_ELEVENTH or higher (>= 7.87.0), the members /* when 'age' is CURLVERSION_ELEVENTH or higher (>= 7.87.0), the members
below exist */ below exist */
const char *const *feature_names; /* Feature names. */ const char *const *feature_names; /* Feature names. */
/* when 'age' is CURLVERSION_TWELFTH or higher (>= 8.8.0), the members
below exist */
const char *const *rtmp_version; /* human readable string */
} curl_version_info_data; } curl_version_info_data;
~~~ ~~~
@ -380,4 +383,3 @@ Added in 7.10
# RETURN VALUE # RETURN VALUE
A pointer to a curl_version_info_data struct. A pointer to a curl_version_info_data struct.
curl_version(3)

View File

@ -1130,6 +1130,7 @@ CURLVERSION_SEVENTH 7.70.0
CURLVERSION_SIXTH 7.66.0 CURLVERSION_SIXTH 7.66.0
CURLVERSION_TENTH 7.77.0 CURLVERSION_TENTH 7.77.0
CURLVERSION_THIRD 7.12.0 CURLVERSION_THIRD 7.12.0
CURLVERSION_TWELFTH 8.8.0
CURLWARNING 7.66.0 CURLWARNING 7.66.0
CURLWS_BINARY 7.86.0 CURLWS_BINARY 7.86.0
CURLWS_CLOSE 7.86.0 CURLWS_CLOSE 7.86.0

View File

@ -3038,17 +3038,18 @@ CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share);
*/ */
typedef enum { typedef enum {
CURLVERSION_FIRST, CURLVERSION_FIRST, /* 7.10 */
CURLVERSION_SECOND, CURLVERSION_SECOND, /* 7.11.1 */
CURLVERSION_THIRD, CURLVERSION_THIRD, /* 7.12.0 */
CURLVERSION_FOURTH, CURLVERSION_FOURTH, /* 7.16.1 */
CURLVERSION_FIFTH, CURLVERSION_FIFTH, /* 7.57.0 */
CURLVERSION_SIXTH, CURLVERSION_SIXTH, /* 7.66.0 */
CURLVERSION_SEVENTH, CURLVERSION_SEVENTH, /* 7.70.0 */
CURLVERSION_EIGHTH, CURLVERSION_EIGHTH, /* 7.72.0 */
CURLVERSION_NINTH, CURLVERSION_NINTH, /* 7.75.0 */
CURLVERSION_TENTH, CURLVERSION_TENTH, /* 7.77.0 */
CURLVERSION_ELEVENTH, CURLVERSION_ELEVENTH, /* 7.87.0 */
CURLVERSION_TWELFTH, /* 8.8.0 */
CURLVERSION_LAST /* never actually use this */ CURLVERSION_LAST /* never actually use this */
} CURLversion; } CURLversion;
@ -3057,7 +3058,7 @@ typedef enum {
meant to be a built-in version number for what kind of struct the caller meant to be a built-in version number for what kind of struct the caller
expects. If the struct ever changes, we redefine the NOW to another enum expects. If the struct ever changes, we redefine the NOW to another enum
from above. */ from above. */
#define CURLVERSION_NOW CURLVERSION_ELEVENTH #define CURLVERSION_NOW CURLVERSION_TWELFTH
struct curl_version_info_data { struct curl_version_info_data {
CURLversion age; /* age of the returned struct */ CURLversion age; /* age of the returned struct */
@ -3117,6 +3118,9 @@ struct curl_version_info_data {
/* These fields were added in CURLVERSION_ELEVENTH */ /* These fields were added in CURLVERSION_ELEVENTH */
/* feature_names is terminated by an entry with a NULL feature name */ /* feature_names is terminated by an entry with a NULL feature name */
const char * const *feature_names; const char * const *feature_names;
/* These fields were added in CURLVERSION_TWELFTH */
const char *rtmp_version; /* human readable string. */
}; };
typedef struct curl_version_info_data curl_version_info_data; typedef struct curl_version_info_data curl_version_info_data;

View File

@ -35,8 +35,10 @@
#include "warnless.h" #include "warnless.h"
#include <curl/curl.h> #include <curl/curl.h>
#include <librtmp/rtmp.h> #include <librtmp/rtmp.h>
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h" #include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h" #include "memdebug.h"
#if defined(_WIN32) && !defined(USE_LWIPSOCK) #if defined(_WIN32) && !defined(USE_LWIPSOCK)
@ -341,4 +343,20 @@ static ssize_t rtmp_send(struct Curl_easy *data, int sockindex,
return num; return num;
} }
void Curl_rtmp_version(char *version, size_t len)
{
char suff[2];
if(RTMP_LIB_VERSION & 0xff) {
suff[0] = (RTMP_LIB_VERSION & 0xff) + 'a' - 1;
suff[1] = '\0';
}
else
suff[0] = '\0';
msnprintf(version, len, "librtmp/%d.%d%s",
RTMP_LIB_VERSION >> 16, (RTMP_LIB_VERSION >> 8) & 0xff,
suff);
}
#endif /* USE_LIBRTMP */ #endif /* USE_LIBRTMP */

View File

@ -30,6 +30,8 @@ extern const struct Curl_handler Curl_handler_rtmpe;
extern const struct Curl_handler Curl_handler_rtmpte; extern const struct Curl_handler Curl_handler_rtmpte;
extern const struct Curl_handler Curl_handler_rtmps; extern const struct Curl_handler Curl_handler_rtmps;
extern const struct Curl_handler Curl_handler_rtmpts; extern const struct Curl_handler Curl_handler_rtmpts;
void Curl_rtmp_version(char *version, size_t len);
#endif #endif
#endif /* HEADER_CURL_RTMP_H */ #endif /* HEADER_CURL_RTMP_H */

View File

@ -55,6 +55,7 @@
#ifdef USE_LIBRTMP #ifdef USE_LIBRTMP
#include <librtmp/rtmp.h> #include <librtmp/rtmp.h>
#include "curl_rtmp.h"
#endif #endif
#ifdef HAVE_LIBZ #ifdef HAVE_LIBZ
@ -238,20 +239,8 @@ char *curl_version(void)
src[i++] = h3_version; src[i++] = h3_version;
#endif #endif
#ifdef USE_LIBRTMP #ifdef USE_LIBRTMP
{ Curl_rtmp_version(rtmp_version, sizeof(rtmp_version));
char suff[2]; src[i++] = rtmp_version;
if(RTMP_LIB_VERSION & 0xff) {
suff[0] = (RTMP_LIB_VERSION & 0xff) + 'a' - 1;
suff[1] = '\0';
}
else
suff[0] = '\0';
msnprintf(rtmp_version, sizeof(rtmp_version), "librtmp/%d.%d%s",
RTMP_LIB_VERSION >> 16, (RTMP_LIB_VERSION >> 8) & 0xff,
suff);
src[i++] = rtmp_version;
}
#endif #endif
#ifdef USE_HYPER #ifdef USE_HYPER
msnprintf(hyper_buf, sizeof(hyper_buf), "Hyper/%s", hyper_version()); msnprintf(hyper_buf, sizeof(hyper_buf), "Hyper/%s", hyper_version());
@ -568,7 +557,8 @@ static curl_version_info_data version_info = {
NULL, /* zstd version */ NULL, /* zstd version */
NULL, /* Hyper version */ NULL, /* Hyper version */
NULL, /* gsasl version */ NULL, /* gsasl version */
feature_names feature_names,
NULL /* rtmp version */
}; };
curl_version_info_data *curl_version_info(CURLversion stamp) curl_version_info_data *curl_version_info(CURLversion stamp)
@ -676,5 +666,13 @@ curl_version_info_data *curl_version_info(CURLversion stamp)
feature_names[n] = NULL; /* Terminate array. */ feature_names[n] = NULL; /* Terminate array. */
version_info.features = features; version_info.features = features;
#ifdef USE_LIBRTMP
{
static char rtmp_version[30];
Curl_rtmp_version(rtmp_version, sizeof(rtmp_version));
version_info.rtmp_version = rtmp_version;
}
#endif
return &version_info; return &version_info;
} }