Skip to content

Commit

Permalink
curl_version_info: provide librtmp version
Browse files Browse the repository at this point in the history
Ref: curl#13364 (comment)
Reported-by: talregev on github
Closes curl#13368
  • Loading branch information
bagder committed Apr 15, 2024
1 parent e1f1ec0 commit dde4b38
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 29 deletions.
4 changes: 3 additions & 1 deletion docs/libcurl/curl_version_info.md
Original file line number Diff line number Diff line change
Expand Up @@ -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;
~~~

Expand Down Expand Up @@ -380,4 +383,3 @@ Added in 7.10
# RETURN VALUE
A pointer to a curl_version_info_data struct.
curl_version(3)
1 change: 1 addition & 0 deletions docs/libcurl/symbols-in-versions
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
28 changes: 16 additions & 12 deletions include/curl/curl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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 */
Expand Down Expand Up @@ -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;

Expand Down
20 changes: 19 additions & 1 deletion lib/curl_rtmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 */
2 changes: 2 additions & 0 deletions lib/curl_rtmp.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
28 changes: 13 additions & 15 deletions lib/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@

#ifdef USE_LIBRTMP
#include <librtmp/rtmp.h>
#include "curl_rtmp.h"
#endif

#ifdef HAVE_LIBZ
Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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;
}

0 comments on commit dde4b38

Please sign in to comment.