Hi Ronald,
> src/service.c | 94 ++++++++++++++++++++++++++++++++++++++++++++------------
> 1 files changed, 74 insertions(+), 20 deletions(-)
>
> diff --git a/src/service.c b/src/service.c
> index 851db34..c3fc0c6 100644
> --- a/src/service.c
> +++ b/src/service.c
> @@ -55,6 +55,7 @@
> #define CONTENT_TYPE_APP_SMIL "Content-Type:
> \"application/smil\";charset=utf-8"
>
> #define MAX_ATTACHMENTS_NUMBER 25
> +#define MAX_ATTEMPTS 3
>
> #define uninitialized_var(x) x = x
>
> @@ -98,6 +99,7 @@ struct mms_request {
> gsize data_size;
> int fd;
> guint16 status;
> + guint16 attempt;
> struct mms_service *service;
> mms_request_result_cb_t result_cb;
> struct mms_message *msg;
> @@ -526,6 +528,8 @@ static struct mms_request *create_request(enum
> mms_request_type type,
>
> request->status = 0;
>
> + request->attempt = 0;
> +
> return request;
> }
>
> @@ -1656,17 +1660,22 @@ int mms_service_set_bearer_handler(struct mms_service
> *service,
> return 0;
> }
>
> -static void deactivate_bearer(struct mms_service *service)
> +static inline gboolean bearer_is_active(struct mms_service *service)
> {
> - DBG("service %p", service);
> -
> if (service->bearer_setup == TRUE)
> - return;
> -
> - if (service->bearer_active == FALSE)
> - return;
> + return FALSE;
>
> if (service->bearer_handler == NULL)
> + return FALSE;
> +
> + return service->bearer_active;
> +}
> +
> +static void deactivate_bearer(struct mms_service *service)
> +{
> + DBG("service %p", service);
> +
> + if (bearer_is_active(service) == FALSE)
> return;
>
> DBG("service %p", service);
> @@ -1798,16 +1807,42 @@ exit:
> munmap(pdu, len);
> }
>
> +static gboolean mms_requeue_request(struct mms_request *request)
> +{
> + request->attempt += 1;
> +
> + if (request->attempt == MAX_ATTEMPTS)
> + return FALSE;
> +
> + if (request->type == MMS_REQUEST_TYPE_GET) {
> + request->fd = open(request->data_path, O_WRONLY | O_TRUNC,
> + S_IWUSR | S_IRUSR);
> + if (request->fd < 0)
> + return FALSE;
> + }
> +
> + g_queue_push_tail(request->service->request_queue, request);
> +
> + return TRUE;
> +}
> +
> static gboolean web_get_cb(GWebResult *result, gpointer user_data)
> {
> gsize written;
> gsize chunk_size;
> struct mms_request *request = user_data;
> - struct mms_service *service;
> const guint8 *chunk;
>
> - if (g_web_result_get_chunk(result, &chunk, &chunk_size) == FALSE)
> - goto error;
> + if (g_web_result_get_chunk(result, &chunk, &chunk_size) == FALSE) {
> + mms_error("Fail to get data chunk");
> +
> + close(request->fd);
> +
> + if (mms_requeue_request(request) == FALSE)
> + unlink(request->data_path);
> +
> + goto exit;
> + }
>
> if (chunk_size == 0) {
> close(request->fd);
> @@ -1826,26 +1861,35 @@ static gboolean web_get_cb(GWebResult *result,
> gpointer user_data)
>
> if (written != chunk_size) {
> mms_error("only %zd/%zd bytes written\n", written, chunk_size);
> - goto error;
> +
> + close(request->fd);
> + unlink(request->data_path);
> +
> + goto complete;
> }
>
same here. I do not like this. Please make clean and small changes that
are not re-factoring major pieces. If re-factoring seems to be needed,
please separate them out so they can be reviewed.
Regards
Marcel
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono