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

Reply via email to