Skip to content

Commit e275826

Browse files
authored
add curl handler pre-invoke-callback to c-libcurl (#21654)
1 parent d29a4be commit e275826

File tree

9 files changed

+43
-0
lines changed

9 files changed

+43
-0
lines changed

modules/openapi-generator/src/main/resources/C-libcurl/apiClient.c.mustache

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ apiClient_t *apiClient_create() {
1111
apiClient->basePath = strdup("{{{basePath}}}");
1212
apiClient->sslConfig = NULL;
1313
apiClient->curlConfig = NULL;
14+
apiClient->curl_pre_invoke_func = NULL;
1415
apiClient->dataReceived = NULL;
1516
apiClient->dataReceivedLen = 0;
1617
apiClient->data_callback_func = NULL;
@@ -67,6 +68,7 @@ apiClient_t *apiClient_create_with_base_path(const char *basePath
6768
apiClient->curlConfig->keepidle = 120;
6869
apiClient->curlConfig->keepintvl = 60;
6970

71+
apiClient->curl_pre_invoke_func = NULL;
7072
apiClient->dataReceived = NULL;
7173
apiClient->dataReceivedLen = 0;
7274
apiClient->data_callback_func = NULL;
@@ -155,6 +157,8 @@ void apiClient_free(apiClient_t *apiClient) {
155157
apiClient->curlConfig = NULL;
156158
}
157159

160+
apiClient->curl_pre_invoke_func = NULL;
161+
158162
free(apiClient);
159163
}
160164

@@ -564,6 +568,10 @@ void apiClient_invoke(apiClient_t *apiClient,
564568
curl_easy_setopt(handle, CURLOPT_VERBOSE, apiClient->curlConfig->verbose);
565569
}
566570

571+
if(apiClient->curl_pre_invoke_func) {
572+
apiClient->curl_pre_invoke_func(handle);
573+
}
574+
567575
res = curl_easy_perform(handle);
568576

569577
curl_slist_free_all(headers);

modules/openapi-generator/src/main/resources/C-libcurl/apiClient.h.mustache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ typedef struct apiClient_t {
3232
char *basePath;
3333
sslConfig_t *sslConfig;
3434
curlConfig_t *curlConfig;
35+
void (*curl_pre_invoke_func)(CURL *);
3536
void *dataReceived;
3637
long dataReceivedLen;
3738
void (*data_callback_func)(void **, long *);

samples/client/others/c/bearerAuth/include/apiClient.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ typedef struct apiClient_t {
3232
char *basePath;
3333
sslConfig_t *sslConfig;
3434
curlConfig_t *curlConfig;
35+
void (*curl_pre_invoke_func)(CURL *);
3536
void *dataReceived;
3637
long dataReceivedLen;
3738
void (*data_callback_func)(void **, long *);

samples/client/others/c/bearerAuth/src/apiClient.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ apiClient_t *apiClient_create() {
1111
apiClient->basePath = strdup("http://api.example.com/v1");
1212
apiClient->sslConfig = NULL;
1313
apiClient->curlConfig = NULL;
14+
apiClient->curl_pre_invoke_func = NULL;
1415
apiClient->dataReceived = NULL;
1516
apiClient->dataReceivedLen = 0;
1617
apiClient->data_callback_func = NULL;
@@ -44,6 +45,7 @@ apiClient_t *apiClient_create_with_base_path(const char *basePath
4445
apiClient->curlConfig->keepidle = 120;
4546
apiClient->curlConfig->keepintvl = 60;
4647

48+
apiClient->curl_pre_invoke_func = NULL;
4749
apiClient->dataReceived = NULL;
4850
apiClient->dataReceivedLen = 0;
4951
apiClient->data_callback_func = NULL;
@@ -71,6 +73,8 @@ void apiClient_free(apiClient_t *apiClient) {
7173
apiClient->curlConfig = NULL;
7274
}
7375

76+
apiClient->curl_pre_invoke_func = NULL;
77+
7478
free(apiClient);
7579
}
7680

@@ -419,6 +423,10 @@ void apiClient_invoke(apiClient_t *apiClient,
419423
curl_easy_setopt(handle, CURLOPT_VERBOSE, apiClient->curlConfig->verbose);
420424
}
421425

426+
if(apiClient->curl_pre_invoke_func) {
427+
apiClient->curl_pre_invoke_func(handle);
428+
}
429+
422430
res = curl_easy_perform(handle);
423431

424432
curl_slist_free_all(headers);

samples/client/petstore/c-useJsonUnformatted/include/apiClient.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ typedef struct apiClient_t {
3232
char *basePath;
3333
sslConfig_t *sslConfig;
3434
curlConfig_t *curlConfig;
35+
void (*curl_pre_invoke_func)(CURL *);
3536
void *dataReceived;
3637
long dataReceivedLen;
3738
void (*data_callback_func)(void **, long *);

samples/client/petstore/c-useJsonUnformatted/src/apiClient.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ apiClient_t *apiClient_create() {
1111
apiClient->basePath = strdup("http://petstore.swagger.io/v2");
1212
apiClient->sslConfig = NULL;
1313
apiClient->curlConfig = NULL;
14+
apiClient->curl_pre_invoke_func = NULL;
1415
apiClient->dataReceived = NULL;
1516
apiClient->dataReceivedLen = 0;
1617
apiClient->data_callback_func = NULL;
@@ -46,6 +47,7 @@ apiClient_t *apiClient_create_with_base_path(const char *basePath
4647
apiClient->curlConfig->keepidle = 120;
4748
apiClient->curlConfig->keepintvl = 60;
4849

50+
apiClient->curl_pre_invoke_func = NULL;
4951
apiClient->dataReceived = NULL;
5052
apiClient->dataReceivedLen = 0;
5153
apiClient->data_callback_func = NULL;
@@ -98,6 +100,8 @@ void apiClient_free(apiClient_t *apiClient) {
98100
apiClient->curlConfig = NULL;
99101
}
100102

103+
apiClient->curl_pre_invoke_func = NULL;
104+
101105
free(apiClient);
102106
}
103107

@@ -456,6 +460,10 @@ void apiClient_invoke(apiClient_t *apiClient,
456460
curl_easy_setopt(handle, CURLOPT_VERBOSE, apiClient->curlConfig->verbose);
457461
}
458462

463+
if(apiClient->curl_pre_invoke_func) {
464+
apiClient->curl_pre_invoke_func(handle);
465+
}
466+
459467
res = curl_easy_perform(handle);
460468

461469
curl_slist_free_all(headers);

samples/client/petstore/c/include/apiClient.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ typedef struct apiClient_t {
3232
char *basePath;
3333
sslConfig_t *sslConfig;
3434
curlConfig_t *curlConfig;
35+
void (*curl_pre_invoke_func)(CURL *);
3536
void *dataReceived;
3637
long dataReceivedLen;
3738
void (*data_callback_func)(void **, long *);

samples/client/petstore/c/src/apiClient.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ apiClient_t *apiClient_create() {
1111
apiClient->basePath = strdup("http://petstore.swagger.io/v2");
1212
apiClient->sslConfig = NULL;
1313
apiClient->curlConfig = NULL;
14+
apiClient->curl_pre_invoke_func = NULL;
1415
apiClient->dataReceived = NULL;
1516
apiClient->dataReceivedLen = 0;
1617
apiClient->data_callback_func = NULL;
@@ -46,6 +47,7 @@ apiClient_t *apiClient_create_with_base_path(const char *basePath
4647
apiClient->curlConfig->keepidle = 120;
4748
apiClient->curlConfig->keepintvl = 60;
4849

50+
apiClient->curl_pre_invoke_func = NULL;
4951
apiClient->dataReceived = NULL;
5052
apiClient->dataReceivedLen = 0;
5153
apiClient->data_callback_func = NULL;
@@ -98,6 +100,8 @@ void apiClient_free(apiClient_t *apiClient) {
98100
apiClient->curlConfig = NULL;
99101
}
100102

103+
apiClient->curl_pre_invoke_func = NULL;
104+
101105
free(apiClient);
102106
}
103107

@@ -456,6 +460,10 @@ void apiClient_invoke(apiClient_t *apiClient,
456460
curl_easy_setopt(handle, CURLOPT_VERBOSE, apiClient->curlConfig->verbose);
457461
}
458462

463+
if(apiClient->curl_pre_invoke_func) {
464+
apiClient->curl_pre_invoke_func(handle);
465+
}
466+
459467
res = curl_easy_perform(handle);
460468

461469
curl_slist_free_all(headers);

samples/client/petstore/c/unit-tests/manual-PetAPI.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
#include <stdlib.h>
33
#include <string.h>
44
#include <assert.h>
5+
#include <curl/curl.h>
56
#include "../api/PetAPI.h"
67

8+
void preInvokeFunc(CURL *curl);
79

810
#define EXAMPLE_CATEGORY_NAME "Example Category"
911
#define EXAMPLE_CATEGORY_ID 5
@@ -16,10 +18,15 @@
1618
#define EXAMPLE_TAG_2_ID 542353
1719
#define EXAMPLE_PET_ID 1234 // Set to 0 to generate a new pet
1820

21+
void preInvokeFunc(CURL *curl) {
22+
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
23+
printf("CURL pre-invoke function called - verbose mode enabled\n");
24+
}
1925

2026
int main() {
2127
// Add pet test
2228
apiClient_t *apiClient = apiClient_create();
29+
apiClient->curl_pre_invoke_func = preInvokeFunc;
2330

2431
char *categoryName = malloc(strlen(EXAMPLE_CATEGORY_NAME) + 1);
2532
strcpy(categoryName, EXAMPLE_CATEGORY_NAME);

0 commit comments

Comments
 (0)