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
below exist */
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;
~~~
@ -380,4 +383,3 @@ Added in 7.10
# RETURN VALUE
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_TENTH 7.77.0
CURLVERSION_THIRD 7.12.0
CURLVERSION_TWELFTH 8.8.0
CURLWARNING 7.66.0
CURLWS_BINARY 7.86.0
CURLWS_CLOSE 7.86.0

View File

@ -3038,17 +3038,18 @@ CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share);
*/
typedef enum {
CURLVERSION_FIRST,
CURLVERSION_SECOND,
CURLVERSION_THIRD,
CURLVERSION_FOURTH,
CURLVERSION_FIFTH,
CURLVERSION_SIXTH,
CURLVERSION_SEVENTH,
CURLVERSION_EIGHTH,
CURLVERSION_NINTH,
CURLVERSION_TENTH,
CURLVERSION_ELEVENTH,
CURLVERSION_FIRST, /* 7.10 */
CURLVERSION_SECOND, /* 7.11.1 */
CURLVERSION_THIRD, /* 7.12.0 */
CURLVERSION_FOURTH, /* 7.16.1 */
CURLVERSION_FIFTH, /* 7.57.0 */
CURLVERSION_SIXTH, /* 7.66.0 */
CURLVERSION_SEVENTH, /* 7.70.0 */
CURLVERSION_EIGHTH, /* 7.72.0 */
CURLVERSION_NINTH, /* 7.75.0 */
CURLVERSION_TENTH, /* 7.77.0 */
CURLVERSION_ELEVENTH, /* 7.87.0 */
CURLVERSION_TWELFTH, /* 8.8.0 */
CURLVERSION_LAST /* never actually use this */
} CURLversion;
@ -3057,7 +3058,7 @@ typedef enum {
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
from above. */
#define CURLVERSION_NOW CURLVERSION_ELEVENTH
#define CURLVERSION_NOW CURLVERSION_TWELFTH
struct curl_version_info_data {
CURLversion age; /* age of the returned struct */
@ -3117,6 +3118,9 @@ struct curl_version_info_data {
/* These fields were added in CURLVERSION_ELEVENTH */
/* feature_names is terminated by an entry with a NULL feature name */
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;

View File

@ -35,8 +35,10 @@
#include "warnless.h"
#include <curl/curl.h>
#include <librtmp/rtmp.h>
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"
#if defined(_WIN32) && !defined(USE_LWIPSOCK)
@ -341,4 +343,20 @@ static ssize_t rtmp_send(struct Curl_easy *data, int sockindex,
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 */

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_rtmps;
extern const struct Curl_handler Curl_handler_rtmpts;
void Curl_rtmp_version(char *version, size_t len);
#endif
#endif /* HEADER_CURL_RTMP_H */

View File

@ -55,6 +55,7 @@
#ifdef USE_LIBRTMP
#include <librtmp/rtmp.h>
#include "curl_rtmp.h"
#endif
#ifdef HAVE_LIBZ
@ -238,20 +239,8 @@ char *curl_version(void)
src[i++] = h3_version;
#endif
#ifdef USE_LIBRTMP
{
char suff[2];
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;
}
Curl_rtmp_version(rtmp_version, sizeof(rtmp_version));
src[i++] = rtmp_version;
#endif
#ifdef USE_HYPER
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, /* Hyper version */
NULL, /* gsasl version */
feature_names
feature_names,
NULL /* rtmp version */
};
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. */
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;
}