annotate libmpdemux/cddb.c @ 16977:31679bcf4256

synced with 1.1153
author gpoirier
date Fri, 11 Nov 2005 15:56:56 +0000
parents 32e2c59c8e86
children 6ff3379a0862
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
1 /*
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
2 * CDDB HTTP protocol
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
3 * by Bertrand Baudet <bertrand_baudet@yahoo.com>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
4 * (C) 2002, MPlayer team.
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
5 *
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
6 * Implementation follow the freedb.howto1.06.txt specification
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
7 * from http://freedb.freedb.org
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
8 *
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
9 * discid computation by Jeremy D. Zawodny
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
10 * Copyright (c) 1998-2000 Jeremy D. Zawodny <Jeremy@Zawodny.com>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
11 * Code release under GPL
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
12 *
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
13 */
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
14
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
15 #include "config.h"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
16
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9801
diff changeset
17 #if defined(HAVE_CDDA) && defined(MPLAYER_NETWORK)
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
18
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
19 #include <stdio.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
20 #include <stdlib.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
21 #include <fcntl.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
22 #include <stdarg.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
23 #include <errno.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
24 #include <unistd.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
25 #include <string.h>
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
26 #ifdef WIN32
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
27 #ifdef __MINGW32__
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
28 #define mkdir(a,b) mkdir(a)
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
29 #endif
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
30 #include <windows.h>
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
31 #include <winsock2.h>
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
32 #else
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
33 #include <netdb.h>
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
34 #include <sys/ioctl.h>
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
35 #endif
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
36 #include <sys/types.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
37 #include <sys/stat.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
38
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
39 #include "mp_msg.h"
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
40 #include "help_mp.h"
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
41
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
42 #if defined(__linux__)
7269
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
43 #include <linux/cdrom.h>
15566
3758536dcef3 DragonFly BSD support
diego
parents: 12289
diff changeset
44 #elif defined(__FreeBSD__) || defined(__bsdi__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
7269
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
45 #include <sys/cdio.h>
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
46 #elif defined(WIN32)
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
47 #include <ddk/ntddcdrm.h>
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
48 #endif
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
49
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
50 #include "cdd.h"
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
51 #include "../version.h"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
52 #include "stream.h"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
53 #include "network.h"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
54
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
55 #define DEFAULT_FREEDB_SERVER "freedb.freedb.org"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
56 #define DEFAULT_CACHE_DIR "/.cddb/"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
57
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
58 stream_t* open_cdda(char *dev, char *track);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
59
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
60 static cd_toc_t cdtoc[100];
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
61 static int cdtoc_last_track;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
62
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
63 #if defined(__linux__)
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
64 int
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
65 read_toc(const char *dev) {
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
66 int drive;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
67 struct cdrom_tochdr tochdr;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
68 struct cdrom_tocentry tocentry;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
69 int i;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
70
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
71 drive = open(dev, O_RDONLY | O_NONBLOCK);
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
72 if( drive<0 ) {
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
73 return drive;
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
74 }
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
75
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
76 ioctl(drive, CDROMREADTOCHDR, &tochdr);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
77 for (i = tochdr.cdth_trk0; i <= tochdr.cdth_trk1; i++) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
78 tocentry.cdte_track = i;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
79 tocentry.cdte_format = CDROM_MSF;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
80 ioctl(drive, CDROMREADTOCENTRY, &tocentry);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
81 cdtoc[i-1].min = tocentry.cdte_addr.msf.minute;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
82 cdtoc[i-1].sec = tocentry.cdte_addr.msf.second;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
83 cdtoc[i-1].frame = tocentry.cdte_addr.msf.frame;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
84 cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
85 cdtoc[i-1].frame += cdtoc[i-1].sec*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
86 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
87 tocentry.cdte_track = 0xAA;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
88 tocentry.cdte_format = CDROM_MSF;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
89 ioctl(drive, CDROMREADTOCENTRY, &tocentry);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
90 cdtoc[tochdr.cdth_trk1].min = tocentry.cdte_addr.msf.minute;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
91 cdtoc[tochdr.cdth_trk1].sec = tocentry.cdte_addr.msf.second;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
92 cdtoc[tochdr.cdth_trk1].frame = tocentry.cdte_addr.msf.frame;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
93 cdtoc[tochdr.cdth_trk1].frame += cdtoc[tochdr.cdth_trk1].min*60*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
94 cdtoc[tochdr.cdth_trk1].frame += cdtoc[tochdr.cdth_trk1].sec*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
95 close(drive);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
96 return tochdr.cdth_trk1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
97 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
98
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
99 #elif defined(WIN32)
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
100 int
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
101 read_toc(const char *dev) {
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
102 HANDLE drive;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
103 DWORD r;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
104 CDROM_TOC toc;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
105 char device[10];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
106 int i;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
107
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
108 sprintf(device, "\\\\.\\%s", dev);
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
109 drive = CreateFile(device, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
110
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
111 if(!DeviceIoControl(drive, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, sizeof(CDROM_TOC), &r, 0)) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
112 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadTOC);
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
113 return 0;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
114 }
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
115
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
116 for (i = toc.FirstTrack; i <= toc.LastTrack; i++) {
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
117 toc.FirstTrack = i;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
118 cdtoc[i-1].min = toc.TrackData[i - 1].Address[1];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
119 cdtoc[i-1].sec = toc.TrackData[i - 1].Address[2];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
120 cdtoc[i-1].frame = toc.TrackData[i - 1].Address[3];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
121 cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
122 cdtoc[i-1].frame += cdtoc[i-1].sec*75;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
123 }
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
124 toc.FirstTrack = 0xAA;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
125 cdtoc[toc.LastTrack].min = toc.TrackData[toc.LastTrack].Address[1];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
126 cdtoc[toc.LastTrack].sec = toc.TrackData[toc.LastTrack].Address[2];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
127 cdtoc[toc.LastTrack].frame = toc.TrackData[toc.LastTrack].Address[3];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
128 cdtoc[toc.LastTrack].frame += cdtoc[toc.LastTrack].min*60*75;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
129 cdtoc[toc.LastTrack].frame += cdtoc[toc.LastTrack].sec*75;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
130 CloseHandle(drive);
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
131 return toc.LastTrack;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
132 }
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
133
15566
3758536dcef3 DragonFly BSD support
diego
parents: 12289
diff changeset
134 #elif defined(__FreeBSD__) || defined(__bsdi__) || defined(__DragonFly__)
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
135 int
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
136 read_toc(const char *dev) {
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
137 int drive;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
138 struct ioc_toc_header tochdr;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
139 struct ioc_read_toc_single_entry tocentry;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
140 int i;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
141
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
142 drive = open(dev, O_RDONLY | O_NONBLOCK);
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
143 if( drive<0 ) {
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
144 return drive;
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
145 }
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
146
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
147 ioctl(drive, CDIOREADTOCHEADER, &tochdr);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
148 for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
149 tocentry.track = i;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
150 tocentry.address_format = CD_MSF_FORMAT;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
151 ioctl(drive, CDIOREADTOCENTRY, &tocentry);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
152 cdtoc[i-1].min = tocentry.entry.addr.msf.minute;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
153 cdtoc[i-1].sec = tocentry.entry.addr.msf.second;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
154 cdtoc[i-1].frame = tocentry.entry.addr.msf.frame;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
155 cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
156 cdtoc[i-1].frame += cdtoc[i-1].sec*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
157 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
158 tocentry.track = 0xAA;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
159 tocentry.address_format = CD_MSF_FORMAT;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
160 ioctl(drive, CDIOREADTOCENTRY, &tocentry);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
161 cdtoc[tochdr.ending_track].min = tocentry.entry.addr.msf.minute;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
162 cdtoc[tochdr.ending_track].sec = tocentry.entry.addr.msf.second;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
163 cdtoc[tochdr.ending_track].frame = tocentry.entry.addr.msf.frame;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
164 cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].min*60*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
165 cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].sec*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
166 close(drive);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
167 return tochdr.ending_track;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
168 }
7269
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
169
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
170 #elif defined(__NetBSD__) || defined(__OpenBSD__)
8609
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
171 int
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
172 read_toc(const char *dev) {
8609
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
173 int drive;
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
174 struct ioc_toc_header tochdr;
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
175 struct ioc_read_toc_entry tocentry;
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
176 int i;
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
177 struct cd_toc_entry toc_buffer;
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
178
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
179 drive = open(dev, O_RDONLY | O_NONBLOCK);
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
180 if( drive<0 ) {
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
181 return drive;
8609
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
182 }
7269
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
183
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
184 ioctl(drive, CDIOREADTOCHEADER, &tochdr);
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
185 for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
186 tocentry.starting_track = i;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
187 tocentry.address_format = CD_MSF_FORMAT;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
188 tocentry.data = &toc_buffer;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
189 tocentry.data_len = sizeof(toc_buffer);
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
190 ioctl(drive, CDIOREADTOCENTRYS, &tocentry);
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
191 cdtoc[i-1].min = toc_buffer.addr.msf.minute;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
192 cdtoc[i-1].sec = toc_buffer.addr.msf.second;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
193 cdtoc[i-1].frame = toc_buffer.addr.msf.frame;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
194 cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
195 cdtoc[i-1].frame += cdtoc[i-1].sec*75;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
196 }
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
197 tocentry.starting_track = 0xAA;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
198 tocentry.address_format = CD_MSF_FORMAT;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
199 ioctl(drive, CDIOREADTOCENTRYS, &tocentry);
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
200 cdtoc[tochdr.ending_track].min = toc_buffer.addr.msf.minute;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
201 cdtoc[tochdr.ending_track].sec = toc_buffer.addr.msf.second;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
202 cdtoc[tochdr.ending_track].frame = toc_buffer.addr.msf.frame;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
203 cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].min*60*75;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
204 cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].sec*75;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
205 close(drive);
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
206 return tochdr.ending_track;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
207 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
208 #endif
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
209
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
210 /**
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
211 \brief Reads TOC from CD in the given device and prints the number of tracks
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
212 and the length of each track in minute:second:frame format.
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
213 \param *dev the device to analyse
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
214 \return if the command line -identify is given, returns the last track of
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
215 the TOC or -1 if the TOC can't be read,
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
216 otherwise just returns 0 and let cddb_resolve the TOC
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
217 */
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
218 int cdd_identify(const char *dev)
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
219 {
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
220 cdtoc_last_track = 0;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
221 if (identify)
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
222 {
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
223 int i, min, sec, frame;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
224 cdtoc_last_track = read_toc(dev);
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
225 if (cdtoc_last_track < 0) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
226 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToOpenDevice, dev);
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
227 return -1;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
228 }
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
229 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_CDDA_TRACKS=%d\n", cdtoc_last_track);
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
230 for (i = 1; i <= cdtoc_last_track; i++)
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
231 {
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
232 frame = cdtoc[i].frame - cdtoc[i-1].frame;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
233 sec = frame / 75;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
234 frame -= sec * 75;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
235 min = sec / 60;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
236 sec -= min * 60;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
237 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_CDDA_TRACK_%d_MSF=%02d:%02d:%02d\n", i, min, sec, frame);
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
238 }
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
239 }
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
240 return cdtoc_last_track;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
241 }
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
242
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
243 unsigned int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
244 cddb_sum(int n) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
245 unsigned int ret;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
246
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
247 ret = 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
248 while (n > 0) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
249 ret += (n % 10);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
250 n /= 10;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
251 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
252 return ret;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
253 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
254
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
255 unsigned long
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
256 cddb_discid(int tot_trks) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
257 unsigned int i, t = 0, n = 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
258
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
259 i = 0;
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
260 while (i < (unsigned int)tot_trks) {
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
261 n = n + cddb_sum((cdtoc[i].min * 60) + cdtoc[i].sec);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
262 i++;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
263 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
264 t = ((cdtoc[tot_trks].min * 60) + cdtoc[tot_trks].sec) -
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
265 ((cdtoc[0].min * 60) + cdtoc[0].sec);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
266 return ((n % 0xff) << 24 | t << 8 | tot_trks);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
267 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
268
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
269
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
270
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
271 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
272 cddb_http_request(char *command, int (*reply_parser)(HTTP_header_t*,cddb_data_t*), cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
273 char request[4096];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
274 int fd, ret = 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
275 URL_t *url;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
276 HTTP_header_t *http_hdr;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
277
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
278 if( reply_parser==NULL || command==NULL || cddb_data==NULL ) return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
279
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
280 sprintf( request, "http://%s/~cddb/cddb.cgi?cmd=%s%s&proto=%d", cddb_data->freedb_server, command, cddb_data->cddb_hello, cddb_data->freedb_proto_level );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
281 printf("Request[%s]\n", request );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
282
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
283 url = url_new(request);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
284 if( url==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
285 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NotAValidURL);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
286 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
287 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
288
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 10121
diff changeset
289 fd = http_send_request(url,0);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
290 if( fd<0 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
291 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToSendHTTPRequest);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
292 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
293 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
294
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
295 http_hdr = http_read_response( fd );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
296 if( http_hdr==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
297 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadHTTPResponse);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
298 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
299 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
300
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
301 http_debug_hdr(http_hdr);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
302 printf("body=[%s]\n", http_hdr->body );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
303
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
304 switch(http_hdr->status_code) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
305 case 200:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
306 ret = reply_parser(http_hdr, cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
307 break;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
308 case 400:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
309 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_HTTPErrorNOTFOUND);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
310 break;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
311 default:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
312 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_HTTPErrorUnknown);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
313 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
314
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
315 http_free( http_hdr );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
316 url_free( url );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
317
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
318 return ret;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
319 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
320
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
321 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
322 cddb_read_cache(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
323 char file_name[100];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
324 struct stat stats;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
325 int file_fd, ret;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
326 size_t file_size;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
327
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
328 if( cddb_data==NULL || cddb_data->cache_dir==NULL ) return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
329
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
330 sprintf( file_name, "%s%08lx", cddb_data->cache_dir, cddb_data->disc_id);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
331
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
332 file_fd = open(file_name, O_RDONLY
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
333 #ifdef WIN32
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
334 | O_BINARY
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
335 #endif
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
336 );
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
337 if( file_fd<0 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
338 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NoCacheFound);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
339 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
340 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
341
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
342 ret = fstat( file_fd, &stats );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
343 if( ret<0 ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
344 perror("fstat");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
345 file_size = 4096;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
346 } else {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
347 file_size = stats.st_size;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
348 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
349
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
350 cddb_data->xmcd_file = (char*)malloc(file_size);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
351 if( cddb_data->xmcd_file==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
352 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
353 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
354 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
355 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
356 cddb_data->xmcd_file_size = read(file_fd, cddb_data->xmcd_file, file_size);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
357 if( cddb_data->xmcd_file_size!=file_size ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
358 mp_msg(MSGT_DEMUX, MSGL_WARN, MSGTR_MPDEMUX_CDDB_NotAllXMCDFileHasBeenRead);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
359 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
360 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
361 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
362
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
363 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
364
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
365 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
366 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
367
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
368 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
369 cddb_write_cache(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
370 // We have the file, save it for cache.
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
371 struct stat file_stat;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
372 char file_name[100];
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
373 int file_fd, ret;
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
374 int wrote=0;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
375
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
376 if( cddb_data==NULL || cddb_data->cache_dir==NULL ) return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
377
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
378 // Check if the CDDB cache dir exist
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
379 ret = stat( cddb_data->cache_dir, &file_stat );
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
380 if( ret<0 ) {
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
381 // Directory not present, create it.
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
382 ret = mkdir( cddb_data->cache_dir, 0755 );
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
383 #ifdef __MINGW32__
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
384 if( ret<0 && errno != EEXIST ) {
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
385 #else
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
386 if( ret<0 ) {
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
387 #endif
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
388 perror("mkdir");
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
389 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToCreateDirectory, cddb_data->cache_dir);
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
390 return -1;
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
391 }
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
392 }
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
393
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
394 sprintf( file_name, "%s%08lx", cddb_data->cache_dir, cddb_data->disc_id );
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
395
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
396 file_fd = creat(file_name, S_IREAD|S_IWRITE);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
397 if( file_fd<0 ) {
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
398 perror("create");
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
399 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
400 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
401
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
402 wrote = write(file_fd, cddb_data->xmcd_file, cddb_data->xmcd_file_size);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
403 if( wrote<0 ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
404 perror("write");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
405 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
406 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
407 }
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
408 if( (unsigned int)wrote!=cddb_data->xmcd_file_size ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
409 mp_msg(MSGT_DEMUX, MSGL_WARN, MSGTR_MPDEMUX_CDDB_NotAllXMCDFileHasBeenWritten);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
410 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
411 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
412 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
413
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
414 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
415
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
416 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
417 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
418
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
419 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
420 cddb_read_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
421 unsigned long disc_id;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
422 char category[100];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
423 char *ptr=NULL, *ptr2=NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
424 int ret, status;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
425
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
426 if( http_hdr==NULL || cddb_data==NULL ) return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
427
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
428 ret = sscanf( http_hdr->body, "%d ", &status);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
429 if( ret!=1 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
430 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
431 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
432 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
433
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
434 switch(status) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
435 case 210:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
436 ret = sscanf( http_hdr->body, "%d %s %08lx", &status, category, &disc_id);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
437 if( ret!=3 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
438 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
439 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
440 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
441 // Check if it's a xmcd database file
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
442 ptr = strstr(http_hdr->body, "# xmcd");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
443 if( ptr==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
444 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_InvalidXMCDDatabaseReturned);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
445 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
446 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
447 // Ok found the beginning of the file
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
448 // look for the end
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
449 ptr2 = strstr(ptr, "\r\n.\r\n");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
450 if( ptr2==NULL ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
451 ptr2 = strstr(ptr, "\n.\n");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
452 if( ptr2==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
453 mp_msg(MSGT_DEMUX, MSGL_FIXME, "Unable to find '.'\n");
8557
97cf659a4c38 - fixed uninitialized offsets[]
arpi
parents: 7953
diff changeset
454 ptr2=ptr+strlen(ptr); //return -1;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
455 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
456 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
457 // Ok found the end
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
458 // do a sanity check
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7746
diff changeset
459 if( http_hdr->body_size<(unsigned int)(ptr2-ptr) ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
460 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_UnexpectedFIXME);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
461 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
462 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
463 cddb_data->xmcd_file = ptr;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
464 cddb_data->xmcd_file_size = ptr2-ptr+2;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
465 cddb_data->xmcd_file[cddb_data->xmcd_file_size] = '\0';
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
466 // Avoid the http_free function to free the xmcd file...save a mempcy...
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
467 http_hdr->body = NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
468 http_hdr->body_size = 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
469 return cddb_write_cache(cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
470 default:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
471 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
472 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
473 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
474 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
475
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
476 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
477 cddb_request_titles(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
478 char command[1024];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
479 sprintf( command, "cddb+read+%s+%08lx", cddb_data->category, cddb_data->disc_id);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
480 return cddb_http_request(command, cddb_read_parse, cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
481 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
482
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
483 int
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
484 cddb_parse_matches_list(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) {
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
485 char album_title[100];
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
486 char *ptr = NULL;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
487 int ret;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
488
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
489 ptr = strstr(http_hdr->body, "\n");
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
490 if( ptr==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
491 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_UnableToFindEOL);
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
492 return -1;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
493 }
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
494 ptr++;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
495 // We have a list of exact/inexact matches, so which one do we use?
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
496 // So let's take the first one.
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
497 ret = sscanf(ptr, "%s %08lx %s", cddb_data->category, &(cddb_data->disc_id), album_title);
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
498 if( ret!=3 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
499 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
500 return -1;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
501 }
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
502 ptr = strstr(http_hdr->body, album_title);
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
503 if( ptr!=NULL ) {
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
504 char *ptr2;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
505 int len;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
506 ptr2 = strstr(ptr, "\n");
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
507 if( ptr2==NULL ) {
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
508 len = (http_hdr->body_size)-(ptr-(http_hdr->body));
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
509 } else {
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
510 len = ptr2-ptr+1;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
511 }
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
512 strncpy(album_title, ptr, len);
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
513 album_title[len-2]='\0';
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
514 }
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
515 mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title);
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
516 return 0;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
517 }
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
518
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
519 int
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
520 cddb_query_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
521 char album_title[100];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
522 char *ptr = NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
523 int ret, status;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
524
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
525 ret = sscanf( http_hdr->body, "%d ", &status);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
526 if( ret!=1 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
527 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
528 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
529 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
530
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
531 switch(status) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
532 case 200:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
533 // Found exact match
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
534 ret = sscanf(http_hdr->body, "%d %s %08lx %s", &status, cddb_data->category, &(cddb_data->disc_id), album_title);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
535 if( ret!=4 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
536 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
537 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
538 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
539 ptr = strstr(http_hdr->body, album_title);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
540 if( ptr!=NULL ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
541 char *ptr2;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
542 int len;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
543 ptr2 = strstr(ptr, "\n");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
544 if( ptr2==NULL ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
545 len = (http_hdr->body_size)-(ptr-(http_hdr->body));
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
546 } else {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
547 len = ptr2-ptr+1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
548 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
549 strncpy(album_title, ptr, len);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
550 album_title[len-2]='\0';
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
551 }
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
552 mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
553 return cddb_request_titles(cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
554 case 202:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
555 // No match found
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
556 mp_msg(MSGT_DEMUX, MSGL_WARN, MSGTR_MPDEMUX_CDDB_AlbumNotFound);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
557 break;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
558 case 210:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
559 // Found exact matches, list follows
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
560 cddb_parse_matches_list(http_hdr, cddb_data);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
561 return cddb_request_titles(cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
562 /*
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
563 body=[210 Found exact matches, list follows (until terminating `.')
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
564 misc c711930d Santana / Supernatural
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
565 rock c711930d Santana / Supernatural
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
566 blues c711930d Santana / Supernatural
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
567 .]
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
568 */
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
569 case 211:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
570 // Found inexact matches, list follows
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
571 cddb_parse_matches_list(http_hdr, cddb_data);
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
572 return cddb_request_titles(cddb_data);
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
573 case 500:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
574 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_ServerReturnsCommandSyntaxErr);
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
575 break;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
576 default:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
577 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
578 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
579 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
580 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
581
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
582 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
583 cddb_proto_level_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
584 int max;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
585 int ret, status;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
586 char *ptr;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
587
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
588 ret = sscanf( http_hdr->body, "%d ", &status);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
589 if( ret!=1 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
590 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
591 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
592 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
593
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
594 switch(status) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
595 case 210:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
596 ptr = strstr(http_hdr->body, "max proto:");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
597 if( ptr==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
598 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
599 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
600 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
601 ret = sscanf(ptr, "max proto: %d", &max);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
602 if( ret!=1 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
603 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
604 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
605 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
606 cddb_data->freedb_proto_level = max;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
607 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
608 default:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
609 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
610 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
611 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
612 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
613
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
614 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
615 cddb_get_proto_level(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
616 return cddb_http_request("stat", cddb_proto_level_parse, cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
617 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
618
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
619 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
620 cddb_freedb_sites_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
621 int ret, status;
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
622
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
623 ret = sscanf( http_hdr->body, "%d ", &status);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
624 if( ret!=1 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
625 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
626 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
627 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
628
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
629 switch(status) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
630 case 210:
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
631 // TODO: Parse the sites
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
632 ret = cddb_data->anonymous; // For gcc complaining about unused parameter.
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
633 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
634 case 401:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
635 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_NoSitesInfoAvailable);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
636 break;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
637 default:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
638 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
639 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
640 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
641 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
642
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
643 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
644 cddb_get_freedb_sites(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
645 return cddb_http_request("sites", cddb_freedb_sites_parse, cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
646 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
647
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
648 void
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
649 cddb_create_hello(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
650 char host_name[51];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
651 char *user_name;
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
652
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
653 if( cddb_data->anonymous ) { // Default is anonymous
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
654 /* Note from Eduardo Pérez Ureta <eperez@it.uc3m.es> :
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
655 * We don't send current user/host name in hello to prevent spam.
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
656 * Software that sends this is considered spyware
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
657 * that most people don't like.
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
658 */
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
659 user_name = "anonymous";
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
660 strcpy(host_name, "localhost");
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
661 } else {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
662 if( gethostname(host_name, 50)<0 ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
663 strcpy(host_name, "localhost");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
664 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
665 user_name = getenv("LOGNAME");
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
666 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
667 sprintf( cddb_data->cddb_hello, "&hello=%s+%s+%s+%s", user_name, host_name, "MPlayer", VERSION );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
668 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
669
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
670 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
671 cddb_retrieve(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
672 char offsets[1024], command[1024];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
673 char *ptr;
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
674 unsigned int i, time_len;
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
675 int ret;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
676
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
677 ptr = offsets;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
678 for( i=0; i<cddb_data->tracks ; i++ ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
679 ptr += sprintf(ptr, "%d+", cdtoc[i].frame );
12289
e197979a0883 potentially exploitable buffer overflow with maliciously crafted cd toc
rfelker
parents: 11965
diff changeset
680 if (ptr-offsets > sizeof offsets - 40) break;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
681 }
8557
97cf659a4c38 - fixed uninitialized offsets[]
arpi
parents: 7953
diff changeset
682 ptr[0]=0;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
683 time_len = (cdtoc[cddb_data->tracks].frame)/75;
8557
97cf659a4c38 - fixed uninitialized offsets[]
arpi
parents: 7953
diff changeset
684
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
685 cddb_data->freedb_server = DEFAULT_FREEDB_SERVER;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
686 cddb_data->freedb_proto_level = 1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
687 cddb_data->xmcd_file = NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
688
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
689 cddb_create_hello(cddb_data);
6475
837ca6fd4adf Checked the return value when retrieving the protocol level.
bertrand
parents: 6474
diff changeset
690 if( cddb_get_proto_level(cddb_data)<0 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
691 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToGetProtocolLevel);
6475
837ca6fd4adf Checked the return value when retrieving the protocol level.
bertrand
parents: 6474
diff changeset
692 return -1;
837ca6fd4adf Checked the return value when retrieving the protocol level.
bertrand
parents: 6474
diff changeset
693 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
694
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
695 //cddb_get_freedb_sites(&cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
696
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
697 sprintf(command, "cddb+query+%08lx+%d+%s%d", cddb_data->disc_id, cddb_data->tracks, offsets, time_len );
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
698 ret = cddb_http_request(command, cddb_query_parse, cddb_data);
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
699 if( ret<0 ) return -1;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
700
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
701 if( cddb_data->cache_dir!=NULL ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
702 free(cddb_data->cache_dir);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
703 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
704 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
705 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
706
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
707 int
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
708 cddb_resolve(const char *dev, char **xmcd_file) {
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
709 char cddb_cache_dir[] = DEFAULT_CACHE_DIR;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
710 char *home_dir = NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
711 cddb_data_t cddb_data;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
712
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
713 if (cdtoc_last_track <= 0)
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
714 {
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
715 cdtoc_last_track = read_toc(dev);
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
716 if (cdtoc_last_track < 0) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
717 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToOpenDevice, dev);
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
718 return -1;
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
719 }
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
720 }
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
721 cddb_data.tracks = cdtoc_last_track;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
722 cddb_data.disc_id = cddb_discid(cddb_data.tracks);
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
723 cddb_data.anonymous = 1; // Don't send user info by default
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
724
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
725 // Check if there is a CD in the drive
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
726 // FIXME: That's not really a good way to check
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
727 if( cddb_data.disc_id==0 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
728 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NoCDInDrive);
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
729 return -1;
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
730 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
731
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
732 home_dir = getenv("HOME");
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
733 #ifdef __MINGW32__
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
734 if( home_dir==NULL ) home_dir = getenv("USERPROFILE");
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
735 if( home_dir==NULL ) home_dir = getenv("HOMEPATH");
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
736 // Last resort, store the cddb cache in the mplayer directory
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
737 if( home_dir==NULL ) home_dir = (char *)get_path("");
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
738 #endif
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
739 if( home_dir==NULL ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
740 cddb_data.cache_dir = NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
741 } else {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
742 cddb_data.cache_dir = (char*)malloc(strlen(home_dir)+strlen(cddb_cache_dir)+1);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
743 if( cddb_data.cache_dir==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
744 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
745 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
746 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
747 sprintf(cddb_data.cache_dir, "%s%s", home_dir, cddb_cache_dir );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
748 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
749
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
750 // Check for a cached file
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
751 if( cddb_read_cache(&cddb_data)<0 ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
752 // No Cache found
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
753 if( cddb_retrieve(&cddb_data)<0 ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
754 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
755 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
756 }
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
757
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
758 if( cddb_data.xmcd_file!=NULL ) {
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
759 // printf("%s\n", cddb_data.xmcd_file );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
760 *xmcd_file = cddb_data.xmcd_file;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
761 return 0;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
762 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
763
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
764 return -1;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
765 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
766
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
767 /*******************************************************************************************************************
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
768 *
7431
e46eeafcd4df Moved all the cdinfo specific from cddb to a standalone file(cdinfo.c), so
bertrand
parents: 7269
diff changeset
769 * xmcd parser
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
770 *
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
771 *******************************************************************************************************************/
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
772 char*
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
773 xmcd_parse_dtitle(cd_info_t *cd_info, char *line) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
774 char *ptr, *album;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
775 ptr = strstr(line, "DTITLE=");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
776 if( ptr!=NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
777 ptr += 7;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
778 album = strstr(ptr, "/");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
779 if( album==NULL ) return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
780 cd_info->album = (char*)malloc(strlen(album+2)+1);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
781 if( cd_info->album==NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
782 return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
783 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
784 strcpy( cd_info->album, album+2 );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
785 album--;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
786 album[0] = '\0';
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
787 cd_info->artist = (char*)malloc(strlen(ptr)+1);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
788 if( cd_info->artist==NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
789 return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
790 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
791 strcpy( cd_info->artist, ptr );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
792 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
793 return ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
794 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
795
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
796 char*
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
797 xmcd_parse_dgenre(cd_info_t *cd_info, char *line) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
798 char *ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
799 ptr = strstr(line, "DGENRE=");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
800 if( ptr!=NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
801 ptr += 7;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
802 cd_info->genre = (char*)malloc(strlen(ptr)+1);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
803 if( cd_info->genre==NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
804 return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
805 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
806 strcpy( cd_info->genre, ptr );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
807 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
808 return ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
809 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
810
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
811 char*
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
812 xmcd_parse_ttitle(cd_info_t *cd_info, char *line) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
813 unsigned int track_nb;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
814 unsigned long sec, off;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
815 char *ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
816 ptr = strstr(line, "TTITLE");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
817 if( ptr!=NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
818 ptr += 6;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
819 // Here we point to the track number
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
820 track_nb = atoi(ptr);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
821 ptr = strstr(ptr, "=");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
822 if( ptr==NULL ) return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
823 ptr++;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
824
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
825 sec = cdtoc[track_nb].frame;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
826 off = cdtoc[track_nb+1].frame-sec+1;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
827
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
828 cd_info_add_track( cd_info, ptr, track_nb+1, (unsigned int)(off/(60*75)), (unsigned int)((off/75)%60), (unsigned int)(off%75), sec, off );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
829 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
830 return ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
831 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
832
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
833 cd_info_t*
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
834 cddb_parse_xmcd(char *xmcd_file) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
835 cd_info_t *cd_info = NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
836 int length, pos = 0;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
837 char *ptr, *ptr2;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
838 unsigned int audiolen;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
839 if( xmcd_file==NULL ) return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
840
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
841 cd_info = cd_info_new();
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
842 if( cd_info==NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
843 return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
844 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
845
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
846 length = strlen(xmcd_file);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
847 ptr = xmcd_file;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
848 while( ptr!=NULL && pos<length ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
849 // Read a line
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
850 ptr2 = ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
851 while( ptr2[0]!='\0' && ptr2[0]!='\r' && ptr2[0]!='\n' ) ptr2++;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
852 if( ptr2[0]=='\0' ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
853 break;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
854 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
855 ptr2[0] = '\0';
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
856 // Ignore comments
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
857 if( ptr[0]!='#' ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
858 // Search for the album title
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
859 if( xmcd_parse_dtitle(cd_info, ptr) );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
860 // Search for the genre
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
861 else if( xmcd_parse_dgenre(cd_info, ptr) );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
862 // Search for a track title
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7746
diff changeset
863 else if( xmcd_parse_ttitle(cd_info, ptr) ) audiolen++; // <-- audiolen++ to shut up gcc warning
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
864 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
865 if( ptr2[1]=='\n' ) ptr2++;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
866 pos = (ptr2+1)-ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
867 ptr = ptr2+1;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
868 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
869
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
870 audiolen = cdtoc[cd_info->nb_tracks].frame-cdtoc[0].frame;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
871 cd_info->min = (unsigned int)(audiolen/(60*75));
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
872 cd_info->sec = (unsigned int)((audiolen/75)%60);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
873 cd_info->msec = (unsigned int)(audiolen%75);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
874
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
875 return cd_info;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
876 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
877
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
878 #endif