From 961135a83d63b56055e8c2c71d16c175bdf78520 Mon Sep 17 00:00:00 2001 From: waker Date: Mon, 8 Oct 2012 22:12:58 +0200 Subject: mms: improved aborting, increased timeout length --- plugins/mms/mmsplug.c | 47 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) (limited to 'plugins/mms/mmsplug.c') diff --git a/plugins/mms/mmsplug.c b/plugins/mms/mmsplug.c index 3d2e3faf..928a527d 100644 --- a/plugins/mms/mmsplug.c +++ b/plugins/mms/mmsplug.c @@ -26,6 +26,7 @@ static DB_functions_t *deadbeef; typedef struct { DB_vfs_t *vfs; + char *fname; mmsx_t *stream; const mms_io_t *io; int need_abort; @@ -49,35 +50,61 @@ const char * mms_bandwidth_strs[]={"14.4 Kbps (Modem)", "19.2 Kbps (Modem)", static DB_FILE * mms_open (const char *fname) { MMS_FILE *fp = malloc (sizeof (MMS_FILE)); + memset (fp, 0, sizeof (MMS_FILE)); fp->io = mms_get_default_io_impl(); - fp->stream = mmsx_connect ((mms_io_t *)fp->io, fp, fname, 1544000, &fp->need_abort); - if (!fp->stream) { - free (fp); - return NULL; - } + fp->fname = strdup (fname); fp->vfs = &plugin; return (DB_FILE*)fp; } static void mms_close (DB_FILE *stream) { +// fprintf (stderr, "\033[0;32mmms_close was called\033[37;0m\n"); assert (stream); - mmsx_close (((MMS_FILE *)stream)->stream); + MMS_FILE *fp = (MMS_FILE *)stream; + if (fp->stream) { + mmsx_close (fp->stream); + } + if (fp->fname) { + free (fp->fname); + } free (stream); } +static int +mms_ensure_connected (MMS_FILE *fp) { + if (!fp->stream) { + fp->stream = mmsx_connect ((mms_io_t *)fp->io, fp, fp->fname, 1544000, &fp->need_abort); + if (!fp->stream) { + return -1; + } + } + return 0; +} + static size_t mms_read (void *ptr, size_t size, size_t nmemb, DB_FILE *stream) { assert (stream); assert (ptr); + int connect_err = mms_ensure_connected ((MMS_FILE *)stream); + if (connect_err < 0) { + return connect_err; + } MMS_FILE *fp = (MMS_FILE *)stream; int res = mmsx_read ((mms_io_t *)fp->io, fp->stream, ptr, size * nmemb); + if (fp->need_abort) { + return -1; + } return res; } static int mms_seek (DB_FILE *stream, int64_t offset, int whence) { assert (stream); + int connect_err = mms_ensure_connected ((MMS_FILE *)stream); + if (connect_err < 0) { + return connect_err; + } MMS_FILE *fp = (MMS_FILE *)stream; return mmsx_seek ((mms_io_t *)fp->io, fp->stream, offset, whence); } @@ -85,6 +112,10 @@ mms_seek (DB_FILE *stream, int64_t offset, int whence) { static int64_t mms_tell (DB_FILE *stream) { assert (stream); + int connect_err = mms_ensure_connected ((MMS_FILE *)stream); + if (connect_err < 0) { + return connect_err; + } return mmsx_get_current_pos (((MMS_FILE *)stream)->stream); } @@ -98,6 +129,10 @@ mms_rewind (DB_FILE *stream) { static int64_t mms_getlength (DB_FILE *stream) { assert (stream); + int connect_err = mms_ensure_connected ((MMS_FILE *)stream); + if (connect_err < 0) { + return connect_err; + } MMS_FILE *f = (MMS_FILE *)stream; return mmsx_get_length (f->stream); } -- cgit v1.2.3 From 0b7dbebd8acf3091196a3e375b91a8e517df14f1 Mon Sep 17 00:00:00 2001 From: waker Date: Mon, 8 Oct 2012 22:31:33 +0200 Subject: mms: debug printfs --- plugins/mms/mmsplug.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'plugins/mms/mmsplug.c') diff --git a/plugins/mms/mmsplug.c b/plugins/mms/mmsplug.c index 928a527d..cb339a96 100644 --- a/plugins/mms/mmsplug.c +++ b/plugins/mms/mmsplug.c @@ -59,7 +59,7 @@ mms_open (const char *fname) { static void mms_close (DB_FILE *stream) { -// fprintf (stderr, "\033[0;32mmms_close was called\033[37;0m\n"); + //fprintf (stderr, "\033[0;32mmms_close was called\033[37;0m\n"); assert (stream); MMS_FILE *fp = (MMS_FILE *)stream; if (fp->stream) { @@ -156,6 +156,7 @@ mms_is_streaming (void) { static void mms_abort (DB_FILE *fp) { + //fprintf (stderr, "\033[0;35mabort called\033[37;0m\n"); ((MMS_FILE *)fp)->need_abort = 1; } -- cgit v1.2.3