From 9209ccfa40e47f1fd8571c4463777b0e468dfb65 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 31 Aug 2011 08:16:55 +0200 Subject: rtsp_client: allow parameter "kd" to be NULL When the caller isn't interested in the values. --- src/output/raop_output_plugin.c | 4 ++-- src/rtsp_client.c | 20 +++++++++++++++----- src/rtsp_client.h | 1 - 3 files changed, 17 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/output/raop_output_plugin.c b/src/output/raop_output_plugin.c index 51d1d629b..6fd5edeac 100644 --- a/src/output/raop_output_plugin.c +++ b/src/output/raop_output_plugin.c @@ -756,7 +756,7 @@ raop_output_cancel(void *data) kd.data = buf; kd.next = NULL; exec_request(rd->rtspcl, "FLUSH", NULL, NULL, 1, - &kd, &(rd->rtspcl->kd), NULL); + &kd, NULL, NULL); g_mutex_unlock(rd->control_mutex); } @@ -815,7 +815,7 @@ raop_output_close(void *data) g_mutex_lock(rd->control_mutex); exec_request(rd->rtspcl, "TEARDOWN", NULL, NULL, 0, - NULL, &rd->rtspcl->kd, NULL); + NULL, NULL, NULL); g_mutex_unlock(rd->control_mutex); rd->started = 0; diff --git a/src/rtsp_client.c b/src/rtsp_client.c index 7a5e54a1d..cf02911ca 100644 --- a/src/rtsp_client.c +++ b/src/rtsp_client.c @@ -265,7 +265,6 @@ void rtspcl_close(struct rtspcl_data *rtspcld) { rtspcl_disconnect(rtspcld); - free_kd(rtspcld->kd); rtspcl_remove_all_exthds(rtspcld); g_free(rtspcld->session); g_free(rtspcld); @@ -350,7 +349,6 @@ exec_request(struct rtspcl_data *rtspcld, const char *cmd, const char delimiters[] = " "; char *token, *dp; int dsize = 0,rval; - struct key_data *cur_kd = *kd; int timeout = 5000; // msec unit fd_set rdfds; @@ -437,6 +435,15 @@ exec_request(struct rtspcl_data *rtspcld, const char *cmd, return false; } + /* if the caller isn't interested in response headers, put + them on the trash, which is freed before returning from + this function */ + struct key_data *trash = NULL; + if (kd == NULL) + kd = &trash; + + struct key_data *cur_kd = *kd; + struct key_data *new_kd = NULL; while (read_line(rtspcld->fd, line, sizeof(line), timeout, 0) > 0) { timeout = 1000; // once it started, it shouldn't take a long time @@ -473,6 +480,9 @@ exec_request(struct rtspcl_data *rtspcld, const char *cmd, cur_kd = new_kd; } } + + free_kd(trash); + return true; } @@ -481,7 +491,7 @@ rtspcl_set_parameter(struct rtspcl_data *rtspcld, const char *parameter, GError **error_r) { return exec_request(rtspcld, "SET_PARAMETER", "text/parameters", - parameter, 1, NULL, &rtspcld->kd, error_r); + parameter, 1, NULL, NULL, error_r); } void @@ -495,7 +505,7 @@ rtspcl_announce_sdp(struct rtspcl_data *rtspcld, const char *sdp, GError **error_r) { return exec_request(rtspcld, "ANNOUNCE", "application/sdp", sdp, 1, - NULL, &rtspcld->kd, error_r); + NULL, NULL, error_r); } bool @@ -598,7 +608,7 @@ rtspcl_record(struct rtspcl_data *rtspcld, range.next = &rtp; return exec_request(rtspcld, "RECORD", NULL, NULL, 1, &range, - &rtspcld->kd, error_r); + NULL, error_r); } char * diff --git a/src/rtsp_client.h b/src/rtsp_client.h index b5b359750..5b56af9da 100644 --- a/src/rtsp_client.h +++ b/src/rtsp_client.h @@ -45,7 +45,6 @@ struct rtspcl_data { int fd; char url[128]; int cseq; - struct key_data *kd; struct key_data *exthds; char *session; char *transport; -- cgit v1.2.3