Skip to content

Commit 4b6c3ef

Browse files
jhirsirlubos
authored andcommitted
ext: curl: possibility to pass abort/kill signal
Added a possibility to pass a kill signal pointer, and if that signal is raised; curl will be exiting. Jira: MOSH-143 Signed-off-by: Jani Hirsimäki <[email protected]>
1 parent bf177c7 commit 4b6c3ef

File tree

8 files changed

+54
-2
lines changed

8 files changed

+54
-2
lines changed

ext/curl/include/curl/easy.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ struct curl_blob {
3838

3939
CURL_EXTERN CURL *curl_easy_init(void);
4040
CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
41+
42+
#if defined(CONFIG_NRF_CURL_INTEGRATION)
43+
CURL_EXTERN void curl_easy_nrf_set_kill_signal(
44+
CURL *curl, struct k_poll_signal *kill_signal);
45+
#endif
46+
4147
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
4248
CURL_EXTERN void curl_easy_cleanup(CURL *curl);
4349

ext/curl/include/curl/nrf_curl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66

77
#ifndef NRF_CURL_H
88
#define NRF_CURL_H
9-
int curl_tool_main(int argc, char *argv[]);
9+
int curl_tool_main(int argc, char *argv[], struct k_poll_signal *kill_signal);
1010
#endif

ext/curl/lib/easy.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,20 @@ static CURLcode easy_transfer(struct Curl_multi *multi)
586586
while(!done && !mcode) {
587587
int still_running = 0;
588588

589+
#if defined(CONFIG_NRF_IPERF3_INTEGRATION)
590+
if (multi->kill_signal != NULL) {
591+
int set, res;
592+
593+
k_poll_signal_check(multi->kill_signal, &set, &res);
594+
if (set) {
595+
k_poll_signal_reset(multi->kill_signal);
596+
printk("\nKill signal received - exiting\n");
597+
result = CURLE_ABORTED_BY_CALLBACK;
598+
break;
599+
}
600+
}
601+
#endif
602+
589603
mcode = curl_multi_poll(multi, NULL, 0, 1000, NULL);
590604

591605
if(!mcode)
@@ -678,6 +692,10 @@ static CURLcode easy_perform(struct Curl_easy *data, bool events)
678692

679693
sigpipe_ignore(data, &pipe_st);
680694

695+
#if defined(CONFIG_NRF_CURL_INTEGRATION)
696+
multi->kill_signal = data->kill_signal;
697+
#endif
698+
681699
/* run the transfer */
682700
result = events ? easy_events(multi) : easy_transfer(multi);
683701

@@ -729,6 +747,17 @@ void curl_easy_cleanup(struct Curl_easy *data)
729747
sigpipe_restore(&pipe_st);
730748
}
731749

750+
#if defined(CONFIG_NRF_CURL_INTEGRATION)
751+
void curl_easy_nrf_set_kill_signal(struct Curl_easy *data,
752+
struct k_poll_signal *kill_signal)
753+
{
754+
if (!data)
755+
return;
756+
757+
data->kill_signal = kill_signal;
758+
}
759+
#endif
760+
732761
/*
733762
* curl_easy_getinfo() is an external interface that allows an app to retrieve
734763
* information from a performed transfer and similar.

ext/curl/lib/multihandle.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@ struct Curl_multi {
151151
bool recheckstate; /* see Curl_multi_connchanged */
152152
bool in_callback; /* true while executing a callback */
153153
bool ipv6_works;
154+
155+
#if defined(CONFIG_NRF_CURL_INTEGRATION)
156+
struct k_poll_signal *kill_signal;
157+
#endif
154158
};
155159

156160
#endif /* HEADER_CURL_MULTIHANDLE_H */

ext/curl/lib/urldata.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1920,6 +1920,9 @@ struct Curl_easy {
19201920
iconv_t utf8_cd; /* for translating to UTF8 */
19211921
#endif /* CURL_DOES_CONVERSIONS && HAVE_ICONV */
19221922
unsigned int magic; /* set to a CURLEASY_MAGIC_NUMBER */
1923+
#if defined(CONFIG_NRF_CURL_INTEGRATION)
1924+
struct k_poll_signal *kill_signal;
1925+
#endif
19231926
};
19241927

19251928
#define LIBCURL_NAME "libcurl"

ext/curl/tool/tool_cfgable.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ struct GlobalConfig {
319319
char *help_category; /* The help category, if set */
320320
#if defined(CONFIG_NRF_CURL_INTEGRATION)
321321
bool curr_mdm_traces;
322+
struct k_poll_signal *kill_signal;
322323
#endif
323324
struct OperationConfig *first;
324325
struct OperationConfig *current;

ext/curl/tool/tool_main.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ static void restore_terminal(void)
301301
int wmain(int argc, wchar_t *argv[])
302302
#else
303303
#if defined(CONFIG_NRF_CURL_INTEGRATION)
304-
int curl_tool_main(int argc, char *argv[])
304+
int curl_tool_main(int argc, char *argv[], struct k_poll_signal *kill_signal)
305305
#endif
306306
#endif
307307
{
@@ -345,6 +345,10 @@ int curl_tool_main(int argc, char *argv[])
345345
this point */
346346
result = main_init(&global);
347347
if(!result) {
348+
#if defined(CONFIG_NRF_CURL_INTEGRATION)
349+
global.kill_signal = kill_signal;
350+
#endif
351+
348352
/* Start our curl operation */
349353
result = operate(&global, argc, argv);
350354

ext/curl/tool/tool_operate.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,11 @@ static CURLcode pre_transfer(struct GlobalConfig *global,
343343
}
344344
per->input.fd = per->infd;
345345
}
346+
347+
#if defined(CONFIG_NRF_CURL_INTEGRATION)
348+
curl_easy_nrf_set_kill_signal(per->curl, global->kill_signal);
349+
#endif
350+
346351
return result;
347352
}
348353

0 commit comments

Comments
 (0)