annotate stream/stream_cddb.c @ 30643:81099607ec11

Add names to anonymous structs sh_common, sh_audio, sh_video, sh_sub.
author diego
date Sun, 21 Feb 2010 20:02:50 +0000
parents 16d7ef2f04e5
children 7e2f58933cc1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
1 /*
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
2 * CDDB HTTP protocol
30426
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
3 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
4 * Copyright (C) 2002 Bertrand Baudet <bertrand_baudet@yahoo.com>
6474
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
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
8 *
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
9 * discid computation by Jeremy D. Zawodny
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
10 * Copyright (c) 1998-2000 Jeremy D. Zawodny <Jeremy@Zawodny.com>
30426
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
11 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
12 * This file is part of MPlayer.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
13 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
14 * MPlayer is free software; you can redistribute it and/or modify
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
15 * it under the terms of the GNU General Public License as published by
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
16 * the Free Software Foundation; either version 2 of the License, or
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
17 * (at your option) any later version.
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
18 *
30426
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
19 * MPlayer is distributed in the hope that it will be useful,
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
22 * GNU General Public License for more details.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
23 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
24 * You should have received a copy of the GNU General Public License along
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
25 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29263
diff changeset
26 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
27 */
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
28
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
29 #include "config.h"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
30
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
31 #include <stdio.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
32 #include <stdlib.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
33 #include <fcntl.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
34 #include <stdarg.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
35 #include <errno.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
36 #include <unistd.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
37 #include <string.h>
25792
0bf5384fb82c Fix compilation failue:
ulion
parents: 25780
diff changeset
38 #include <limits.h>
27727
48c1ae64255b Replace preprocessor check for WIN32 with checks for __MINGW32__ and __CYGWIN__.
diego
parents: 27461
diff changeset
39 #if defined(__MINGW32__) || defined(__CYGWIN__)
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
40 #ifdef __MINGW32__
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
41 #define mkdir(a,b) mkdir(a)
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
42 #endif
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
43 #include <windows.h>
28402
c884d17bd005 Convert HAVE_WINSOCK2_H into a 0/1 definition.
diego
parents: 27727
diff changeset
44 #if HAVE_WINSOCK2_H
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
45 #include <winsock2.h>
17446
9604131f9196 Cygwin compilation fix
diego
parents: 17044
diff changeset
46 #endif
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
47 #else
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
48 #include <netdb.h>
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
49 #include <sys/ioctl.h>
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
50 #endif
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
51 #include <sys/types.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
52 #include <sys/stat.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
53
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
54 #include "mp_msg.h"
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
55 #include "help_mp.h"
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
56
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
57 #if defined(__linux__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
58 #include <linux/cdrom.h>
21848
3ff1eade91f9 GNU/kFreeBSD support, closes Bugzilla #704.
diego
parents: 20587
diff changeset
59 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
60 #include <sys/cdio.h>
27727
48c1ae64255b Replace preprocessor check for WIN32 with checks for __MINGW32__ and __CYGWIN__.
diego
parents: 27461
diff changeset
61 #elif defined(__MINGW32__) || defined(__CYGWIN__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
62 #include <ddk/ntddcdrm.h>
30613
e04602bd557a Add missing 'defined' for __bsdi__.
komh
parents: 30426
diff changeset
63 #elif defined(__bsdi__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
64 #include <dvd.h>
25393
454ab8a40f1c Support cddb on darwin.
ulion
parents: 23734
diff changeset
65 #elif defined(__APPLE__) || defined(__DARWIN__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
66 #include <IOKit/storage/IOCDTypes.h>
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
67 #include <IOKit/storage/IOCDMediaBSDClient.h>
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
68 #include "mpbswap.h"
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
69 #endif
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
70
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
71 #include "cdd.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16967
diff changeset
72 #include "version.h"
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
73 #include "stream.h"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
74 #include "network.h"
25948
e8945e43a36f #include just libavutil/common.h, not all of libavutil/intreadwrite.h.
diego
parents: 25796
diff changeset
75 #include "libavutil/common.h"
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
76
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
77 #define DEFAULT_FREEDB_SERVER "freedb.freedb.org"
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
78 #define DEFAULT_CACHE_DIR "/.cddb/"
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
79
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
80 stream_t* open_cdda(char *dev, char *track);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
81
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
82 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
83 static int cdtoc_last_track;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
84
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
85 int read_toc(const char *dev)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
86 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
87 int first = 0, last = -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
88 int i;
27727
48c1ae64255b Replace preprocessor check for WIN32 with checks for __MINGW32__ and __CYGWIN__.
diego
parents: 27461
diff changeset
89 #if defined(__MINGW32__) || defined(__CYGWIN__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
90 HANDLE drive;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
91 DWORD r;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
92 CDROM_TOC toc;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
93 char device[10];
20586
d9558d78179d cosmetics: move WIN32 read_toc code to allow for summarizing more common
reimar
parents: 20583
diff changeset
94
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
95 sprintf(device, "\\\\.\\%s", dev);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
96 drive = CreateFile(device, GENERIC_READ, FILE_SHARE_READ, NULL,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
97 OPEN_EXISTING, 0, 0);
20586
d9558d78179d cosmetics: move WIN32 read_toc code to allow for summarizing more common
reimar
parents: 20583
diff changeset
98
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
99 if (!DeviceIoControl(drive, IOCTL_CDROM_READ_TOC, NULL, 0, &toc,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
100 sizeof(CDROM_TOC), &r, 0)) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
101 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadTOC);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
102 return 0;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
103 }
20586
d9558d78179d cosmetics: move WIN32 read_toc code to allow for summarizing more common
reimar
parents: 20583
diff changeset
104
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
105 first = toc.FirstTrack - 1; last = toc.LastTrack;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
106 for (i = first; i <= last; i++) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
107 cdtoc[i].min = toc.TrackData[i].Address[1];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
108 cdtoc[i].sec = toc.TrackData[i].Address[2];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
109 cdtoc[i].frame = toc.TrackData[i].Address[3];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
110 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
111 CloseHandle(drive);
20586
d9558d78179d cosmetics: move WIN32 read_toc code to allow for summarizing more common
reimar
parents: 20583
diff changeset
112
d9558d78179d cosmetics: move WIN32 read_toc code to allow for summarizing more common
reimar
parents: 20583
diff changeset
113 #else
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
114 int drive;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
115 drive = open(dev, O_RDONLY | O_NONBLOCK);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
116 if (drive < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
117 return drive;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
118 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
119
20587
128b2dc39f57 More code shuffling
reimar
parents: 20586
diff changeset
120 #if defined(__linux__) || defined(__bsdi__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
121 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
122 struct cdrom_tochdr tochdr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
123 ioctl(drive, CDROMREADTOCHDR, &tochdr);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
124 first = tochdr.cdth_trk0 - 1; last = tochdr.cdth_trk1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
125 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
126 for (i = first; i <= last; i++) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
127 struct cdrom_tocentry tocentry;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
128 tocentry.cdte_track = (i == last) ? 0xAA : i + 1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
129 tocentry.cdte_format = CDROM_MSF;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
130 ioctl(drive, CDROMREADTOCENTRY, &tocentry);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
131 cdtoc[i].min = tocentry.cdte_addr.msf.minute;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
132 cdtoc[i].sec = tocentry.cdte_addr.msf.second;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
133 cdtoc[i].frame = tocentry.cdte_addr.msf.frame;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
134 }
21848
3ff1eade91f9 GNU/kFreeBSD support, closes Bugzilla #704.
diego
parents: 20587
diff changeset
135 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
136 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
137 struct ioc_toc_header tochdr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
138 ioctl(drive, CDIOREADTOCHEADER, &tochdr);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
139 first = tochdr.starting_track - 1; last = tochdr.ending_track;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
140 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
141 for (i = first; i <= last; i++) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
142 struct ioc_read_toc_single_entry tocentry;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
143 tocentry.track = (i == last) ? 0xAA : i + 1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
144 tocentry.address_format = CD_MSF_FORMAT;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
145 ioctl(drive, CDIOREADTOCENTRY, &tocentry);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
146 cdtoc[i].min = tocentry.entry.addr.msf.minute;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
147 cdtoc[i].sec = tocentry.entry.addr.msf.second;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
148 cdtoc[i].frame = tocentry.entry.addr.msf.frame;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
149 }
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
150 #elif defined(__NetBSD__) || defined(__OpenBSD__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
151 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
152 struct ioc_toc_header tochdr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
153 ioctl(drive, CDIOREADTOCHEADER, &tochdr);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
154 first = tochdr.starting_track - 1; last = tochdr.ending_track;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
155 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
156 for (i = first; i <= last; i++) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
157 struct ioc_read_toc_entry tocentry;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
158 struct cd_toc_entry toc_buffer;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
159 tocentry.starting_track = (i == last) ? 0xAA : i + 1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
160 tocentry.address_format = CD_MSF_FORMAT;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
161 tocentry.data = &toc_buffer;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
162 tocentry.data_len = sizeof(toc_buffer);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
163 ioctl(drive, CDIOREADTOCENTRYS, &tocentry);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
164 cdtoc[i].min = toc_buffer.addr.msf.minute;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
165 cdtoc[i].sec = toc_buffer.addr.msf.second;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
166 cdtoc[i].frame = toc_buffer.addr.msf.frame;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
167 }
25393
454ab8a40f1c Support cddb on darwin.
ulion
parents: 23734
diff changeset
168 #elif defined(__APPLE__) || defined(__DARWIN__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
169 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
170 dk_cd_read_toc_t tochdr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
171 uint8_t buf[4];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
172 uint8_t buf2[100 * sizeof(CDTOCDescriptor) + sizeof(CDTOC)];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
173 memset(&tochdr, 0, sizeof(tochdr));
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
174 tochdr.bufferLength = sizeof(buf);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
175 tochdr.buffer = &buf;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
176 if (!ioctl(drive, DKIOCCDREADTOC, &tochdr)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
177 && tochdr.bufferLength == sizeof(buf)) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
178 first = buf[2] - 1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
179 last = buf[3];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
180 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
181 if (last >= 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
182 memset(&tochdr, 0, sizeof(tochdr));
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
183 tochdr.bufferLength = sizeof(buf2);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
184 tochdr.buffer = &buf2;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
185 tochdr.format = kCDTOCFormatTOC;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
186 if (ioctl(drive, DKIOCCDREADTOC, &tochdr)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
187 || tochdr.bufferLength < sizeof(CDTOC))
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
188 last = -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
189 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
190 if (last >= 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
191 CDTOC *cdToc = (CDTOC *)buf2;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
192 CDTrackInfo lastTrack;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
193 dk_cd_read_track_info_t trackInfoParams;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
194 for (i = first; i < last; ++i) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
195 CDMSF msf = CDConvertTrackNumberToMSF(i + 1, cdToc);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
196 cdtoc[i].min = msf.minute;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
197 cdtoc[i].sec = msf.second;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
198 cdtoc[i].frame = msf.frame;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
199 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
200 memset(&trackInfoParams, 0, sizeof(trackInfoParams));
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
201 trackInfoParams.addressType = kCDTrackInfoAddressTypeTrackNumber;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
202 trackInfoParams.bufferLength = sizeof(lastTrack);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
203 trackInfoParams.address = last;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
204 trackInfoParams.buffer = &lastTrack;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
205 if (!ioctl(drive, DKIOCCDREADTRACKINFO, &trackInfoParams)) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
206 CDMSF msf = CDConvertLBAToMSF(be2me_32(lastTrack.trackStartAddress)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
207 + be2me_32(lastTrack.trackSize));
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
208 cdtoc[last].min = msf.minute;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
209 cdtoc[last].sec = msf.second;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
210 cdtoc[last].frame = msf.frame;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
211 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
212 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
213 }
20587
128b2dc39f57 More code shuffling
reimar
parents: 20586
diff changeset
214 #endif
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
215 close(drive);
20581
bfcc98ad59ba Factor out common code in stream_cddb read_toc function.
reimar
parents: 20579
diff changeset
216 #endif
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
217 for (i = first; i <= last; i++)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
218 cdtoc[i].frame += (cdtoc[i].min * 60 + cdtoc[i].sec) * 75;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
219 return last;
7269
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
220 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
221
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
222 /**
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
223 \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
224 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
225 \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
226 \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
227 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
228 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
229 */
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
230 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
231 {
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
232 cdtoc_last_track = 0;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
233 if (mp_msg_test(MSGT_IDENTIFY, MSGL_INFO)) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
234 int i, min, sec, frame;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
235 cdtoc_last_track = read_toc(dev);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
236 if (cdtoc_last_track < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
237 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToOpenDevice,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
238 dev);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
239 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
240 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
241 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_CDDA_TRACKS=%d\n", cdtoc_last_track);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
242 for (i = 1; i <= cdtoc_last_track; i++) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
243 frame = cdtoc[i].frame - cdtoc[i-1].frame;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
244 sec = frame / 75;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
245 frame -= sec * 75;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
246 min = sec / 60;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
247 sec -= min * 60;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
248 mp_msg(MSGT_IDENTIFY, MSGL_INFO,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
249 "ID_CDDA_TRACK_%d_MSF=%02d:%02d:%02d\n", i, min, sec, frame);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
250 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
251 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
252 return cdtoc_last_track;
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
253 }
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
254
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
255 unsigned int cddb_sum(int n)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
256 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
257 unsigned int ret;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
258
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
259 ret = 0;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
260 while (n > 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
261 ret += (n % 10);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
262 n /= 10;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
263 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
264 return ret;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
265 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
266
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
267 unsigned long cddb_discid(int tot_trks)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
268 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
269 unsigned int i, t = 0, n = 0;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
270
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
271 i = 0;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
272 while (i < (unsigned int)tot_trks) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
273 n = n + cddb_sum((cdtoc[i].min * 60) + cdtoc[i].sec);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
274 i++;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
275 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
276 t = ((cdtoc[tot_trks].min * 60) + cdtoc[tot_trks].sec) -
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
277 ((cdtoc[0].min * 60) + cdtoc[0].sec);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
278 return (n % 0xff) << 24 | t << 8 | tot_trks;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
279 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
280
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
281
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
282
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
283 int cddb_http_request(char *command,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
284 int (*reply_parser)(HTTP_header_t*, cddb_data_t*),
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
285 cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
286 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
287 char request[4096];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
288 int fd, ret = 0;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
289 URL_t *url;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
290 HTTP_header_t *http_hdr;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
291
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
292 if (reply_parser == NULL || command == NULL || cddb_data == NULL)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
293 return -1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
294
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
295 sprintf(request, "http://%s/~cddb/cddb.cgi?cmd=%s%s&proto=%d",
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
296 cddb_data->freedb_server, command, cddb_data->cddb_hello,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
297 cddb_data->freedb_proto_level);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
298 mp_msg(MSGT_OPEN, MSGL_INFO,"Request[%s]\n", request);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
299
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
300 url = url_new(request);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
301 if (url == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
302 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NotAValidURL);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
303 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
304 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
305
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
306 fd = http_send_request(url,0);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
307 if (fd < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
308 mp_msg(MSGT_DEMUX, MSGL_ERR,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
309 MSGTR_MPDEMUX_CDDB_FailedToSendHTTPRequest);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
310 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
311 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
312
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
313 http_hdr = http_read_response(fd);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
314 if (http_hdr == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
315 mp_msg(MSGT_DEMUX, MSGL_ERR,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
316 MSGTR_MPDEMUX_CDDB_FailedToReadHTTPResponse);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
317 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
318 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
319
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
320 http_debug_hdr(http_hdr);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
321 mp_msg(MSGT_OPEN, MSGL_INFO,"body=[%s]\n", http_hdr->body);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
322
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
323 switch (http_hdr->status_code) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
324 case 200:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
325 ret = reply_parser(http_hdr, cddb_data);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
326 break;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
327 case 400:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
328 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_HTTPErrorNOTFOUND);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
329 break;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
330 default:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
331 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_HTTPErrorUnknown);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
332 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
333
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
334 http_free(http_hdr);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
335 url_free(url);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
336
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
337 return ret;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
338 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
339
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
340 int cddb_read_cache(cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
341 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
342 char file_name[100];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
343 struct stat stats;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
344 int file_fd, ret;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
345 size_t file_size;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
346
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
347 if (cddb_data == NULL || cddb_data->cache_dir == NULL)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
348 return -1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
349
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
350 sprintf(file_name, "%s%08lx", cddb_data->cache_dir, cddb_data->disc_id);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
351
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
352 file_fd = open(file_name, O_RDONLY
27727
48c1ae64255b Replace preprocessor check for WIN32 with checks for __MINGW32__ and __CYGWIN__.
diego
parents: 27461
diff changeset
353 #if defined(__MINGW32__) || defined(__CYGWIN__)
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
354 | O_BINARY
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
355 #endif
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
356 );
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
357 if (file_fd < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
358 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NoCacheFound);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
359 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
360 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
361
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
362 ret = fstat(file_fd, &stats);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
363 if (ret < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
364 perror("fstat");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
365 file_size = 4096;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
366 } else {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
367 file_size = stats.st_size < UINT_MAX ? stats.st_size : UINT_MAX - 1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
368 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
369
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
370 cddb_data->xmcd_file = malloc(file_size + 1);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
371 if (cddb_data->xmcd_file == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
372 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
373 close(file_fd);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
374 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
375 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
376 cddb_data->xmcd_file_size = read(file_fd, cddb_data->xmcd_file, file_size);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
377 if (cddb_data->xmcd_file_size != file_size) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
378 mp_msg(MSGT_DEMUX, MSGL_WARN,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
379 MSGTR_MPDEMUX_CDDB_NotAllXMCDFileHasBeenRead);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
380 close(file_fd);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
381 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
382 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
383 cddb_data->xmcd_file[cddb_data->xmcd_file_size] = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
384
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
385 close(file_fd);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
386
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
387 return 0;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
388 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
389
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
390 int cddb_write_cache(cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
391 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
392 // We have the file, save it for cache.
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
393 struct stat file_stat;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
394 char file_name[100];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
395 int file_fd, ret;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
396 int wrote = 0;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
397
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
398 if (cddb_data == NULL || cddb_data->cache_dir == NULL)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
399 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
400
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
401 // Check if the CDDB cache dir exist
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
402 ret = stat(cddb_data->cache_dir, &file_stat);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
403 if (ret < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
404 // Directory not present, create it.
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
405 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
406 #ifdef __MINGW32__
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
407 if (ret < 0 && errno != EEXIST) {
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
408 #else
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
409 if (ret < 0) {
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
410 #endif
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
411 perror("mkdir");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
412 mp_msg(MSGT_DEMUX, MSGL_ERR,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
413 MSGTR_MPDEMUX_CDDB_FailedToCreateDirectory,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
414 cddb_data->cache_dir);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
415 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
416 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
417 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
418
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
419 sprintf(file_name, "%s%08lx", cddb_data->cache_dir, cddb_data->disc_id);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
420
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
421 file_fd = creat(file_name, S_IRUSR | S_IWUSR);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
422 if (file_fd < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
423 perror("create");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
424 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
425 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
426
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
427 wrote = write(file_fd, cddb_data->xmcd_file, cddb_data->xmcd_file_size);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
428 if (wrote < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
429 perror("write");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
430 close(file_fd);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
431 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
432 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
433 if ((unsigned int) wrote != cddb_data->xmcd_file_size) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
434 mp_msg(MSGT_DEMUX, MSGL_WARN, MSGTR_MPDEMUX_CDDB_NotAllXMCDFileHasBeenWritten);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
435 close(file_fd);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
436 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
437 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
438
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
439 close(file_fd);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
440
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
441 return 0;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
442 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
443
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
444 int cddb_read_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
445 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
446 unsigned long disc_id;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
447 char category[100];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
448 char *ptr = NULL, *ptr2 = NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
449 int ret, status;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
450
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
451 if (http_hdr == NULL || cddb_data == NULL)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
452 return -1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
453
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
454 ret = sscanf(http_hdr->body, "%d ", &status);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
455 if (ret != 1) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
456 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
457 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
458 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
459
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
460 switch (status) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
461 case 210:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
462 ret = sscanf(http_hdr->body, "%d %99s %08lx", &status,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
463 category, &disc_id);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
464 if (ret != 3) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
465 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
466 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
467 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
468 // Check if it's a xmcd database file
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
469 ptr = strstr(http_hdr->body, "# xmcd");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
470 if (ptr == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
471 mp_msg(MSGT_DEMUX, MSGL_ERR,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
472 MSGTR_MPDEMUX_CDDB_InvalidXMCDDatabaseReturned);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
473 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
474 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
475 ptr = strdup(ptr);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
476 // Ok found the beginning of the file
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
477 // look for the end
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
478 ptr2 = strstr(ptr, "\n.\r\n");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
479 if (!ptr2)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
480 ptr2 = strstr(ptr, "\n.\n");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
481 if (ptr2) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
482 ptr2++;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
483 } else {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
484 mp_msg(MSGT_DEMUX, MSGL_FIXME, "Unable to find '.'\n");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
485 ptr2 = ptr + strlen(ptr); //return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
486 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
487 // Ok found the end
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
488 // do a sanity check
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
489 if (http_hdr->body_size < (unsigned int)(ptr2 - ptr)) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
490 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_UnexpectedFIXME);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
491 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
492 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
493 cddb_data->xmcd_file = ptr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
494 cddb_data->xmcd_file_size = ptr2 - ptr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
495 cddb_data->xmcd_file[cddb_data->xmcd_file_size] = '\0';
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
496 return cddb_write_cache(cddb_data);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
497 default:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
498 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
499 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
500 return 0;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
501 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
502
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
503 int cddb_request_titles(cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
504 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
505 char command[1024];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
506 sprintf(command, "cddb+read+%s+%08lx",
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
507 cddb_data->category, cddb_data->disc_id);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
508 return cddb_http_request(command, cddb_read_parse, cddb_data);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
509 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
510
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
511 int cddb_parse_matches_list(HTTP_header_t *http_hdr, cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
512 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
513 char album_title[100];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
514 char *ptr = NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
515 int ret;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
516
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
517 ptr = strstr(http_hdr->body, "\n");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
518 if (ptr == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
519 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_UnableToFindEOL);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
520 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
521 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
522 ptr++;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
523 // We have a list of exact/inexact matches, so which one do we use?
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
524 // So let's take the first one.
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
525 ret = sscanf(ptr, "%99s %08lx %99s", cddb_data->category,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
526 &(cddb_data->disc_id), album_title);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
527 if (ret != 3) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
528 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
529 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
530 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
531 ptr = strstr(http_hdr->body, album_title);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
532 if (ptr != NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
533 char *ptr2;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
534 int len;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
535 ptr2 = strstr(ptr, "\n");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
536 if (ptr2 == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
537 len = (http_hdr->body_size)-(ptr-(http_hdr->body));
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
538 } else {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
539 len = ptr2-ptr+1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
540 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
541 len = FFMIN(sizeof(album_title) - 1, len);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
542 strncpy(album_title, ptr, len);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
543 album_title[len]='\0';
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
544 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
545 mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
546 album_title);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
547 return 0;
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
548 }
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
549
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
550 int cddb_query_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
551 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
552 char album_title[100];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
553 char *ptr = NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
554 int ret, status;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
555
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
556 ret = sscanf(http_hdr->body, "%d ", &status);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
557 if (ret != 1) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
558 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
559 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
560 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
561
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
562 switch (status) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
563 case 200:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
564 // Found exact match
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
565 ret = sscanf(http_hdr->body, "%d %99s %08lx %99s", &status,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
566 cddb_data->category, &(cddb_data->disc_id), album_title);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
567 if (ret != 4) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
568 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
569 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
570 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
571 ptr = strstr(http_hdr->body, album_title);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
572 if (ptr != NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
573 char *ptr2;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
574 int len;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
575 ptr2 = strstr(ptr, "\n");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
576 if (ptr2 == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
577 len = (http_hdr->body_size)-(ptr-(http_hdr->body));
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
578 } else {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
579 len = ptr2-ptr+1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
580 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
581 len = FFMIN(sizeof(album_title) - 1, len);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
582 strncpy(album_title, ptr, len);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
583 album_title[len]='\0';
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
584 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
585 mp_msg(MSGT_DEMUX, MSGL_STATUS,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
586 MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
587 return cddb_request_titles(cddb_data);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
588 case 202:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
589 // No match found
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
590 mp_msg(MSGT_DEMUX, MSGL_WARN, MSGTR_MPDEMUX_CDDB_AlbumNotFound);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
591 break;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
592 case 210:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
593 // Found exact matches, list follows
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
594 cddb_parse_matches_list(http_hdr, cddb_data);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
595 return cddb_request_titles(cddb_data);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
596 /*
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
597 body=[210 Found exact matches, list follows (until terminating `.')
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
598 misc c711930d Santana / Supernatural
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
599 rock c711930d Santana / Supernatural
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
600 blues c711930d Santana / Supernatural
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
601 .]
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
602 */
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
603 case 211:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
604 // Found inexact matches, list follows
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
605 cddb_parse_matches_list(http_hdr, cddb_data);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
606 return cddb_request_titles(cddb_data);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
607 case 500:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
608 mp_msg(MSGT_DEMUX, MSGL_FIXME,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
609 MSGTR_MPDEMUX_CDDB_ServerReturnsCommandSyntaxErr);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
610 break;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
611 default:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
612 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
613 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
614 return -1;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
615 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
616
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
617 int cddb_proto_level_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
618 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
619 int max;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
620 int ret, status;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
621 char *ptr;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
622
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
623 ret = sscanf(http_hdr->body, "%d ", &status);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
624 if (ret != 1) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
625 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
626 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
627 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
628
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
629 switch (status) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
630 case 210:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
631 ptr = strstr(http_hdr->body, "max proto:");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
632 if (ptr == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
633 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
634 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
635 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
636 ret = sscanf(ptr, "max proto: %d", &max);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
637 if (ret != 1) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
638 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
639 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
640 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
641 cddb_data->freedb_proto_level = max;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
642 return 0;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
643 default:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
644 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
645 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
646 return -1;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
647 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
648
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
649 int cddb_get_proto_level(cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
650 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
651 return cddb_http_request("stat", cddb_proto_level_parse, cddb_data);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
652 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
653
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
654 int cddb_freedb_sites_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
655 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
656 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
657
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
658 ret = sscanf(http_hdr->body, "%d ", &status);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
659 if (ret != 1) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
660 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
661 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
662 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
663
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
664 switch (status) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
665 case 210:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
666 // TODO: Parse the sites
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
667 ret = cddb_data->anonymous; // For gcc complaining about unused parameter.
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
668 return 0;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
669 case 401:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
670 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_NoSitesInfoAvailable);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
671 break;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
672 default:
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
673 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
674 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
675 return -1;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
676 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
677
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
678 int cddb_get_freedb_sites(cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
679 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
680 return cddb_http_request("sites", cddb_freedb_sites_parse, cddb_data);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
681 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
682
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
683 void cddb_create_hello(cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
684 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
685 char host_name[51];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
686 char *user_name;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
687
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
688 if (cddb_data->anonymous) { // Default is anonymous
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
689 /* Note from Eduardo Pérez Ureta <eperez@it.uc3m.es> :
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
690 * We don't send current user/host name in hello to prevent spam.
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
691 * Software that sends this is considered spyware
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
692 * that most people don't like.
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
693 */
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
694 user_name = "anonymous";
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
695 strcpy(host_name, "localhost");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
696 } else {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
697 if (gethostname(host_name, 50) < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
698 strcpy(host_name, "localhost");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
699 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
700 user_name = getenv("LOGNAME");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
701 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
702 sprintf(cddb_data->cddb_hello, "&hello=%s+%s+%s+%s",
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
703 user_name, host_name, "MPlayer", VERSION);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
704 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
705
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
706 int cddb_retrieve(cddb_data_t *cddb_data)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
707 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
708 char offsets[1024], command[1024];
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
709 char *ptr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
710 unsigned int i, time_len;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
711 int ret;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
712
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
713 ptr = offsets;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
714 for (i = 0; i < cddb_data->tracks ; i++) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
715 ptr += sprintf(ptr, "%d+", cdtoc[i].frame);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
716 if (ptr-offsets > sizeof offsets - 40) break;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
717 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
718 ptr[0] = 0;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
719 time_len = (cdtoc[cddb_data->tracks].frame)/75;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
720
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
721 cddb_data->freedb_server = DEFAULT_FREEDB_SERVER;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
722 cddb_data->freedb_proto_level = 1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
723 cddb_data->xmcd_file = NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
724
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
725 cddb_create_hello(cddb_data);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
726 if (cddb_get_proto_level(cddb_data) < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
727 mp_msg(MSGT_DEMUX, MSGL_ERR,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
728 MSGTR_MPDEMUX_CDDB_FailedToGetProtocolLevel);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
729 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
730 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
731
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
732 //cddb_get_freedb_sites(&cddb_data);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
733
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
734 sprintf(command, "cddb+query+%08lx+%d+%s%d", cddb_data->disc_id,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
735 cddb_data->tracks, offsets, time_len);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
736 ret = cddb_http_request(command, cddb_query_parse, cddb_data);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
737 if (ret < 0)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
738 return -1;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
739
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
740 if (cddb_data->cache_dir != NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
741 free(cddb_data->cache_dir);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
742 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
743 return 0;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
744 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
745
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
746 int cddb_resolve(const char *dev, char **xmcd_file)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
747 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
748 char cddb_cache_dir[] = DEFAULT_CACHE_DIR;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
749 char *home_dir = NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
750 cddb_data_t cddb_data;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
751
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
752 if (cdtoc_last_track <= 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
753 cdtoc_last_track = read_toc(dev);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
754 if (cdtoc_last_track < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
755 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToOpenDevice,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
756 dev);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
757 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
758 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
759 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
760 cddb_data.tracks = cdtoc_last_track;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
761 cddb_data.disc_id = cddb_discid(cddb_data.tracks);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
762 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
763
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
764 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDB_DISCID=%08lx\n",
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
765 cddb_data.disc_id);
27174
ee63b09aedc9 Add disc ID to -identify output.
diego
parents: 26756
diff changeset
766
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
767 // Check if there is a CD in the drive
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
768 // FIXME: That's not really a good way to check
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
769 if (cddb_data.disc_id == 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
770 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NoCDInDrive);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
771 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
772 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
773
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
774 home_dir = getenv("HOME");
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
775 #ifdef __MINGW32__
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
776 if (home_dir == NULL)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
777 home_dir = getenv("USERPROFILE");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
778 if (home_dir == NULL)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
779 home_dir = getenv("HOMEPATH");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
780 // Last resort, store the cddb cache in the mplayer directory
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
781 if (home_dir == NULL)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
782 home_dir = (char *)get_path("");
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
783 #endif
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
784 if (home_dir == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
785 cddb_data.cache_dir = NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
786 } else {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
787 cddb_data.cache_dir = malloc(strlen(home_dir)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
788 + strlen(cddb_cache_dir) + 1);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
789 if (cddb_data.cache_dir == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
790 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
791 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
792 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
793 sprintf(cddb_data.cache_dir, "%s%s", home_dir, cddb_cache_dir);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
794 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
795
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
796 // Check for a cached file
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
797 if (cddb_read_cache(&cddb_data) < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
798 // No Cache found
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
799 if (cddb_retrieve(&cddb_data) < 0) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
800 return -1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
801 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
802 }
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
803
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
804 if (cddb_data.xmcd_file != NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
805 // printf("%s\n", cddb_data.xmcd_file);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
806 *xmcd_file = cddb_data.xmcd_file;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
807 return 0;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
808 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
809
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
810 return -1;
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
811 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
812
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
813 /***************
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
814 * xmcd parser *
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
815 ***************/
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
816 char *xmcd_parse_dtitle(cd_info_t *cd_info, char *line)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
817 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
818 char *ptr, *album;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
819 ptr = strstr(line, "DTITLE=");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
820 if (ptr != NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
821 ptr += 7;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
822 album = strstr(ptr, "/");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
823 if (album == NULL)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
824 return NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
825 cd_info->album = malloc(strlen(album + 2) + 1);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
826 if (cd_info->album == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
827 return NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
828 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
829 strcpy(cd_info->album, album + 2);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
830 album--;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
831 album[0] = '\0';
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
832 cd_info->artist = malloc(strlen(ptr) + 1);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
833 if (cd_info->artist == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
834 return NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
835 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
836 strcpy(cd_info->artist, ptr);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
837 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
838 return ptr;
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
839 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
840
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
841 char *xmcd_parse_dgenre(cd_info_t *cd_info, char *line)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
842 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
843 char *ptr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
844 ptr = strstr(line, "DGENRE=");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
845 if (ptr != NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
846 ptr += 7;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
847 cd_info->genre = malloc(strlen(ptr)+1);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
848 if (cd_info->genre == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
849 return NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
850 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
851 strcpy(cd_info->genre, ptr);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
852 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
853 return ptr;
6697
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
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
856 char *xmcd_parse_ttitle(cd_info_t *cd_info, char *line)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
857 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
858 unsigned int track_nb;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
859 unsigned long sec, off;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
860 char *ptr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
861 ptr = strstr(line, "TTITLE");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
862 if (ptr != NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
863 ptr += 6;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
864 // Here we point to the track number
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
865 track_nb = atoi(ptr);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
866 ptr = strstr(ptr, "=");
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
867 if (ptr == NULL)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
868 return NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
869 ptr++;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
870
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
871 sec = cdtoc[track_nb].frame;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
872 off = cdtoc[track_nb + 1].frame - sec + 1;
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
873
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
874 cd_info_add_track(cd_info, ptr, track_nb + 1,
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
875 (unsigned int) (off / (60 * 75)),
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
876 (unsigned int) ((off / 75) % 60),
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
877 (unsigned int) (off % 75),
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
878 sec, off);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
879 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
880 return ptr;
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
881 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
882
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
883 cd_info_t *cddb_parse_xmcd(char *xmcd_file)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
884 {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
885 cd_info_t *cd_info = NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
886 int length, pos = 0;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
887 char *ptr, *ptr2;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
888 unsigned int audiolen;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
889 if (xmcd_file == NULL)
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
890 return NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
891
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
892 cd_info = cd_info_new();
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
893 if (cd_info == NULL) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
894 return NULL;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
895 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
896
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
897 length = strlen(xmcd_file);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
898 ptr = xmcd_file;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
899 while (ptr != NULL && pos < length) {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
900 // Read a line
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
901 ptr2 = ptr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
902 while(ptr2[0] != '\0' && ptr2[0] != '\r' && ptr2[0] != '\n')
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
903 ptr2++;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
904 if (ptr2[0] == '\0') {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
905 break;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
906 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
907 ptr2[0] = '\0';
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
908 // Ignore comments
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
909 if (ptr[0] != '#') {
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
910 // Search for the album title
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
911 if (xmcd_parse_dtitle(cd_info, ptr))
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
912 ;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
913 // Search for the genre
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
914 else if (xmcd_parse_dgenre(cd_info, ptr))
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
915 ;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
916 // Search for a track title
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
917 else if (xmcd_parse_ttitle(cd_info, ptr))
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
918 audiolen++; // <-- audiolen++ to shut up gcc warning
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
919 }
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
920 if (ptr2[1] == '\n')
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
921 ptr2++;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
922 pos = (ptr2 + 1) - ptr;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
923 ptr = ptr2 + 1;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
924 }
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
925
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
926 audiolen = cdtoc[cd_info->nb_tracks].frame-cdtoc[0].frame;
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
927 cd_info->min = (unsigned int) (audiolen / (60 * 75));
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
928 cd_info->sec = (unsigned int) ((audiolen / 75) % 60);
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
929 cd_info->msec = (unsigned int) (audiolen % 75);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28402
diff changeset
930
30629
16d7ef2f04e5 cosmetics: K&R coding style, indent with 4 spaces, no tabs
diego
parents: 30613
diff changeset
931 return cd_info;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
932 }