comparison cddb_howto.txt @ 2:5cead4da1db9

Initial import. Seems to work nicely.
author darius
date Wed, 09 Aug 2000 02:18:47 +0000
parents
children
comparison
equal deleted inserted replaced
1:dd6e30f7eb42 2:5cead4da1db9
1
2 USE OF CDDB SERVICE IN YOUR SOFTWARE
3 ------------------------------------
4 Copyright (c) CDDB, Inc.
5
6 @(#)cddb.howto 1.27 98/12/09
7
8
9
10 In this document:
11
12 - WHAT IS THE CDDB
13 - CDDB USE RESTRICTIONS
14 - TWO FORMS OF ACCESS TO THE CDDB
15 - CDDB DISCID
16 - REMOTE CDDB ACCESS
17 - CDDB SUBMISSION
18 - QUESTIONS?
19 - APPENDIX A - CDDB DISCID ALGORITHM
20 - APPENDIX B - CDDB FILE FORMAT
21 - APPENDIX C - CDDB SERVER PROTOCOL
22 - APPENDIX D - OFFICIAL CDDB SOFTWARE DISTRIBUTION SITES
23
24
25
26 WHAT IS THE CDDB
27 ----------------
28
29 CDDB (CD database) is an information database containing artist, disc
30 title, track titles, and other information for digital audio compact
31 discs. Over time, this archive has grown to contain a substantial
32 collection of CD information and is continuing to grow at a rapid rate.
33 This database can be accessed by applications via the CDDB server hosts
34 that have been set up on the Internet around the world.
35
36 The CDDB data format and the CDDB servers are designed to be open, and
37 are used by many client applications requiring CD information. CDDB has
38 become the de facto standard for Internet access of compact disc
39 information.
40
41
42 CDDB USE RESTRICTIONS
43 ---------------------
44
45 Users of CDDB-capable freeware and shareware applications may use the
46 public CDDB servers for free. Commercial uses of CDDB data and/or servers
47 are subject to negotiations with CDDB Inc. Please write to us at
48 licensing@cddb.com for more information.
49
50 If you plan to use CDDB and/or the CDDB servers in your software, please
51 notify support@cddb.com of your intent. Also, we appreciate that you
52 keep us posted as to your development/test progress and release schedules.
53 Before you release your CDDB application we must verify that it properly
54 implements the CDDB functionality. You must provide us with a copy of your
55 software for testing when it is ready. Please do not release your software
56 with CDDB functionality until it has been tested.
57
58 You must explicitly give credit to CDDB, Inc. in your application, both in
59 all documentation that mentions the CDDB functionality in any way, and when
60 the product is operating. The exact details should be obtained from
61 licensing@cddb.com before you release your software.
62
63
64
65 TWO FORMS OF ACCESS TO THE CDDB
66 -------------------------------
67
68 If you are interested in incorporating the use of CDDB in your
69 software, there are two forms of access that you may consider.
70
71 1. Local access
72
73 In this mode your software simply attempts to open local files on
74 the computer to access the CDDB.
75
76 You may store the CD information in the CDDB-native format (See
77 Appendix B), or another format of your choice (for example, the
78 Win95 cdplayer.ini format). Users appreciate a the ability to import
79 CDDB data from and export to a variety of formats.
80
81 Note that the CDDB archive is not available for downloads, therefore
82 this mode is only useful to retrieve CD data that is entered by the
83 user and saved to disk.
84
85 2. Remote access
86
87 In this mode the software must connect to a CDDB server on the
88 network to access the CDDB. There is a CDDB server protocol that
89 the software (also known as the "client") must use to converse with
90 the server.
91
92 This mode allows the client application full access to the entire
93 CD database over the Internet. The data returned is in the CDDB
94 native file format as described in Appendix B.
95
96 You may choose to support only remote access mode, or both remote and
97 local. We do not recommend a local-only application, since it is not
98 very useful.
99
100
101 CDDB DISCID
102 -----------
103
104 Both forms of CDDB access require that the software compute a "disc
105 ID" which is an identifier that is used to access the CDDB. The disc
106 ID is a 8-digit hexadecimal (base-16) number, computed using data from
107 a CD's Table-of-Contents (TOC) in MSF (Minute Second Frame) form. The
108 algorithm is listed below in Appendix A.
109
110 It is crucial that your software compute the disc ID correctly. If it
111 does not generate the correct disc ID, it will not be compatible with CDDB.
112 Moreover, if your software submits CDDB entries with bad disc IDs to the
113 CDDB archives, it could compromise the integrity of the CDDB.
114
115 We suggest installing one of the disc ID checker programs listed on the
116 CDDB web page at http://www.cddb.com/downloads, and then testing the disc
117 ID code in your software by comparing the disc ID generated by the program
118 with that of your software for as large a number of CDs as possible. Bugs
119 in disc ID calculation can be subtle, and history shows that it sometimes
120 takes hundreds of discs to find problems.
121
122
123 REMOTE CDDB ACCESS
124 ------------------
125
126 In order to perform remote access of CDDB servers, your software must be
127 able to communicate with a remote CD server system via HTTP. There are a
128 number of public CDDB servers operating on the Internet. The current list
129 of public servers may be obtained programmatically via the CDDB protocol
130 "sites" command. The permanent server site, cddb.cddb.com has been
131 established in order to provide a reliable source of server site information
132 via the "sites" command. This address may be safely hard-wired into client
133 software for this purpose, as it is guaranteed to exist on a permanent basis.
134 Furthermore, the "cddb.cgi" program is guaranteed to always reside at the
135 following path: /~cddb/cddb.cgi
136
137 Thus, the URL for accessing the server at cddb.cddb.com is:
138
139 http://cddb.cddb.com/~cddb/cddb.cgi
140
141 You should make the CDDB server host (or hosts) user-selectable in your
142 software. DO NOT hard-wire the list of CD database servers into your code.
143 The list of active servers changes over time.
144
145 The CDDB server protocol is described below in Appendix C.
146
147 The CDDB entry returned from the server via a "cddb read" command is in
148 the format described in Appendix B below.
149
150 Some additional notes for accessing CDDB over the Internet:
151
152 Your application should always specify the highest documented protocol
153 level in the "proto=" field of the HTTP command. The highest level currently
154 specified is "4". Lower protocol levels will work, but are only provided
155 for compatibility with older CDDB applications. If you do not use the
156 highest available protocol level, certain important features will not be
157 available to your application.
158
159 Make sure to use the proper arguments in the "hello=" command. The user
160 and hostname arguments should be that of the user's email address, not
161 some fixed hard-coded value. The application name and version should be
162 that of your application, not that of another existing application.
163
164 We consider the use of the "cddb query" command mandatory for all CDDB
165 clients. It is not valid to issue a "cddb read" command without issuing
166 a prior "cddb query" and receiving a good response, as it may yield incorrect
167 results. In addition, it is required that clients support close matches
168 (aka "fuzzy" matches, or response code 211) and multiple exact matches
169 (response code 210) in response to a query.
170
171 The proper way to handle multiple exact/fuzzy matches is to present the
172 entire list of matches to the user and to let the user choose between them.
173 Matches are listed in the order of best fit for the user's disc, so they
174 should be presented to the user in the order they are listed by the server.
175
176 The suggested algorithm for obtaining the list of server sites is
177 as follows. The application should attempt to get the list from
178 cddb.cddb.com with the "sites" command the first time the user runs the
179 program. After the initial download of the site list, the application
180 should periodically attempt to download the site list, or at least
181 provide the user with some method of downloading the list on-demand.
182 Should the user be unable to subsequently download the list of sites
183 due to temporary network perturbation, the application should attempt
184 to download the site list from one of the sites in its current list. All
185 of the official CDDB server sites will contain a valid list of servers,
186 though cddb.cddb.com is the only site which is guaranteed to always exist.
187
188 We do strongly suggest that you provide your users with the capability of
189 choosing CDDB server sites as described above. However, for some applications
190 this may not be feasible. If you do not wish to offer this functionality,
191 you may safely hard-code "cddb.cddb.com" in your application as the sole
192 CDDB site to access. This will deprive your users of the option to choose
193 a site near their locale for optimal response, but that is your choice.
194
195 PLEASE NOTE: older versions of the CDDB specification describe two methods
196 of accessing the CDDB servers: HTTP mode and CDDBP mode. CDDBP mode is
197 being deprecated in favor of HTTP mode, so new applications should be sure
198 to only implement the HTTP mode of access. All text describing CDDBP
199 mode has been removed from this document.
200
201
202 CDDB SUBMISSION
203 ---------------
204
205 Your software may allow users to enter CDDB data and then submit it to the
206 CDDB archives. The method of submission is to transmit the entry to the
207 database through a CGI program at the following URL:
208
209 http://hostname.cddb.com/~cddb/submit.cgi
210
211 where "hostname.cddb.com" is one of the hosts listed in the CDDB server
212 "sites" command, and also cddb.cddb.com.
213
214 Submissions are made through the CGI program as follows. You must only use
215 the "POST" method of sending data; "GET" is not supported. There are several
216 HTTP "Entity-Header" fields that must be included in the data followed by a
217 blank line, followed by the "Entity-Body" (a.k.a the CDDB entry) in the
218 format described in Appendix B below. The required header fields are:
219
220 Category: CDDB_category
221 Discid: CDDB_discid
222 User-Email: user@domain
223 Submit-Mode: test_or_submit
224 Content-Length: length_of_CDDB_entry
225
226 Where:
227
228 - "CDDB_category" is one of the valid CDDB categories listed by the CDDB
229 server "cddb lscat" command. Invalid categories will result in the entry
230 being rejected.
231
232 - "CDDB_discid" is the 8-digit hex CDDB disc ID of the entry as described in
233 the "CDDB Discid" section below. This must be the same disc ID that appears
234 in the "DISCID=" section of the entry being submitted. If not, the entry
235 will be rejected.
236
237 - "user@domain" is the valid email address of the user submitting the entry.
238 This is required in case a submission failure notice must be sent to the
239 user.
240
241 - "test_or_submit" is the word "test" or "submit" (without the surrounding
242 quotes) to indicate whether the submission is a test submission or a real
243 submission to the database, respectively. See below for an explanation of
244 test submissions.
245
246 - "length_of_CDDB_entry" is the size in bytes of the CDDB entry being
247 submitted. This number does not include the length of the header or the
248 blank line separating the HTTP header and the CDDB entry.
249
250 There are several additional optional HTTP header fields that may also
251 be specified:
252
253 Charset: character_set_of_CDDB_entry
254 X-Cddbd-Note: message for user
255
256 Where:
257
258 - "character_set_of_CDDB_entry" is one of ISO-8859-1 or US-ASCII (lower case
259 may be used if desired). This specifies to the CDDB server which character
260 set the CDDB entry has been encoded in. If your application knows the
261 user's character set, then you should specify it here. Only these two
262 character sets are supported currently. DO NOT specify the character set
263 if your application does not have any way of verifying the user's character
264 set (i.e. do not guess; it's better not to specify it at all).
265
266 - "message for user" is an arbitrary message to be included at the top of
267 any rejection notice that may be sent to the submitting user.
268
269 An example submission showing the HTTP command, "Entity-Header" and "Entity-
270 Body" follows:
271
272 POST /~cddb/submit.cgi HTTP/1.0
273 Category: rock
274 Discid: 2a09310a
275 User-Email: joe@joeshost.joesdomain.com
276 Submit-Mode: submit
277 Charset: ISO-8859-1
278 X-Cddbd-Note: Problems with Super CD Player? Send email to support@supercd.com.
279 Content-Length: 820
280
281 # xmcd
282 # Copyright (c) 1998 CDDB Inc.
283 #
284 # Track frame offsets:
285 [ data omitted in this example for brevity ]
286 PLAYORDER=
287
288 Note the blank line between the "Content-Length" header field and the
289 "# xmcd" which marks the beginning of the CDDB entry.
290
291 When your application submits an entry through the CGI program, it will
292 respond with a 3-digit response code indicating whether or not the entry has
293 been forwarded to the CDDB server for inclusion in the database, followed
294 by a textual description of the response code. For example:
295
296 200 OK, submission has been sent.
297 400 Internal error: failed to forward submission.
298 500 Missing required header information.
299
300 These are but a few of the possible responses. See the description of the
301 CDDB server protocol in Appendix C for more information on handling response
302 codes.
303
304 The body of the CDDB entry being submitted should be sent verbatim as
305 described in Appendix B. DO NOT encode the data in any way before transmitting
306 it; data must be sent as raw text. For example, Windows programmers should not
307 use the Windows URL encode function prior to calling the submit CGI program.
308 Doing so may lead to corrupt data being sent and also possibly to rejected
309 submissions.
310
311 You may implement a button or somesuch in your software's user interface
312 to initiate submissions. Rejected submissions are automatically returned
313 via email to the sender specified in the "User-Email" header field with an
314 explanation of the reason for the rejection.
315
316 Please do not allow a user to submit CD database entries that have
317 completely unfilled contents (i.e., blank information in the disc
318 artist/title as well as the track titles). Please design your client
319 with this in mind. An example minimum requirement that a CD player client
320 should meet is listed below:
321
322 1. Don't allow the "send" or "submit" feature to be activated if
323 the CD database information form is not edited at all.
324 2. Check that the disc artist/title contains something (that the user
325 typed in).
326 3. Don't submit a default string if a field is not filled in
327 (e.g. If track 3 is not filled in, submit a blank "TTITLE3=" line.)
328 If you must use a default string, please use "track N" where N
329 is the track number.
330
331 Before you release your software, please be sure that it produces
332 submissions that adhere to the CDDB file format, and that the frame
333 offset, disc length, and disc ID information are correctly computed.
334 For testing, please make your software send submissions with the
335 "Submit-Mode" HTTP header field set to "test".
336
337 CDDB submissions sent in test mode will be sanity-checked by the CDDB server
338 and pass/fail confirmation sent back to the submitter, but will not actually
339 be deposited in the CD database. Please DO NOT send submisions in "submit"
340 mode until your application has been approved by the CDDB support group.
341
342 When you feel your application is ready to support submissions, please contact
343 us at support@cddb.com. We will provide you with our qualification
344 procedure, which involves submitting a number of entries of different types.
345 Once qualified, your application will be permitted to submit to the database.
346
347
348 QUESTIONS?
349 ----------
350
351 Please send any questions or comments to support@cddb.com.
352
353 APPENDIX A - CDDB DISCID ALGORITHM
354 ----------------------------------
355
356 The following is a C code example that illustrates how to generate the
357 CDDB disc ID. Examples in other programming languages may be found on
358 the CDDB web site at http://www.cddb.com/downloads. A text description
359 of the algorithm follows, which should contain the necessary information
360 to code the algorithm in any programming language.
361
362
363 struct toc {
364 int min;
365 int sec;
366 int frame;
367 };
368
369 struct toc cdtoc[100];
370
371 int
372 read_cdtoc_from_drive(void)
373 {
374 /* Do whatever is appropriate to read the TOC of the CD
375 * into the cdtoc[] structure array.
376 */
377 return (tot_trks);
378 }
379
380 int
381 cddb_sum(int n)
382 {
383 int ret;
384
385 /* For backward compatibility this algorithm must not change */
386
387 ret = 0;
388
389 while (n > 0) {
390 ret = ret + (n % 10);
391 n = n / 10;
392 }
393
394 return (ret);
395 }
396
397 unsigned long
398 cddb_discid(int tot_trks)
399 {
400 int i,
401 t = 0,
402 n = 0;
403
404 /* For backward compatibility this algorithm must not change */
405
406 i = 0;
407
408 while (i < tot_trks) {
409 n = n + cddb_sum((cdtoc[i].min * 60) + cdtoc[i].sec);
410 i++;
411 }
412
413 t = ((cdtoc[tot_trks].min * 60) + cdtoc[tot_trks].sec) -
414 ((cdtoc[0].min * 60) + cdtoc[0].sec);
415
416 return ((n % 0xff) << 24 | t << 8 | tot_trks);
417 }
418
419 main()
420 {
421 int tot_trks;
422
423 tot_trks = read_cdtoc_from_drive();
424 printf("The discid is %08x", cddb_discid(tot_trks));
425 }
426
427
428 This code assumes that your compiler and architecture support 32-bit
429 integers.
430
431 The cddb_discid function computes the discid based on the CD's TOC data
432 in MSF form. The frames are ignored for this purpose. The function is
433 passed a parameter of tot_trks (which is the total number of tracks on
434 the CD), and returns the discid integer number.
435
436 It is assumed that cdtoc[] is an array of data structures (records)
437 containing the fields min, sec and frame, which are the minute, second
438 and frame offsets (the starting location) of each track. This
439 information is read from the TOC of the CD. There are actually
440 tot_trks + 1 "active" elements in the array, the last one being the
441 offset of the lead-out (also known as track 0xAA).
442
443 The function loops through each track in the TOC, and for each track
444 it takes the (M * 60) + S (total offset in seconds) of the track and
445 feeds it to cddb_sum() function, which simply adds the value of each digit
446 in the decimal string representation of the number. A running sum of this
447 result for each track is kept in the variable n.
448
449 At the end of the loop:
450 1. t is calculated by subtracting the (M * 60) + S offset of the lead-out
451 minus the (M * 60) + S offset of first track (yielding the length of
452 the disc in seconds).
453
454 2. The result of (n modulo FFh) is left-shifted by 24 bits.
455
456 3. t is left shifted by 8.
457
458 The bitwise-OR operation of result 2., 3. and the tot_trks number is
459 used as the discid.
460
461 The discid is represented in hexadecimal form for the purpose of
462 xmcd cddb file names and the DISCID= field in the xmcd cddb file itself.
463 If the hexadecimal string is less than 8 characters long, it is
464 zero-padded to 8 characters (i.e., 3a8f07 becomes 003a8f07). All
465 alpha characters in the string should be in lower case, where
466 applicable.
467
468 Important note for clients using the MS-Windows MCI interface:
469
470 The Windows MCI interface does not provide the MSF location of the
471 lead-out. Thus, you must compute the lead-out location by taking the
472 starting position of the last track and add the length of the last track
473 to it. However, the MCI interface returns the length of the last track
474 as ONE FRAME SHORT of the actual length found in the CD's TOC. In most
475 cases this does not affect the disc ID generated, because we truncate
476 the frame count when computing the disc ID anyway. However, if the
477 lead-out track has an actual a frame count of 0, the computed quantity
478 (based on the MSF data returned from the MCI interface) would result in
479 the seconds being one short and the frame count be 74. For example,
480 a CD with the last track at an offset of 48m 32s 12f and having a
481 track length of 2m 50s 63f has a lead-out offset of 51m 23s 0f. Windows
482 MCI incorrectly reports the length as 2m 50s 62f, which would yield a
483 lead-out offset of 51m 22s 74f, which causes the resulting truncated
484 disc length to be off by one second. This will cause an incorrect disc
485 ID to be generated. You should thus add one frame to the length of the
486 last track when computing the location of the lead-out.
487
488 The easiest way for Windows clients to compute the lead-out given information
489 in MSF format is like this:
490
491 (offset_minutes * 60 * 75) + (offset_seconds * 75) + offset_frames +
492 (length_minutes * 60 * 75) + (length_seconds * 75) + length_frames + 1 = X
493
494 Where X is the offset of the lead-out in frames. To find the lead-out in
495 seconds, simply divide by 75 and discard the remainder.
496
497
498 APPENDIX B - CDDB FILE FORMAT
499 -----------------------------
500
501 Database entries must be in the ISO-8859-1 character set (the 8-bit ASCII
502 extension also known as "Latin alphabet #1" or ISO-Latin-1). Lines must
503 always be terminated by a newline/linefeed (ctrl-J, or 0Ah) character
504 or a carriage return character (ctrl-M, or 0Dh) followed by a newline/linefeed
505 character. All lines in a database entry must be less than or equal to 80
506 bytes in length, including the terminating character(s). Database entries
507 with lines that are longer will be considered invalid. There must be no
508 blank lines in a database entry.
509
510 Lines that begin with # are comments. Comments should appear only at the
511 top of the file before any keywords. Comments in the body of the file are
512 subject to removal when submitted for inclusion to the database. Comments
513 may consist only of characters in the set:
514
515 { tab (09h); space (20h) through tilde (7Eh) inclusive }
516
517 Comments should be ignored by applications using the database file, with
518 several exceptions described below.
519
520 The beginning of the first line in a database entry should consist of the
521 string "# xmcd". This string identifies the file as an xmcd format CD
522 database file. More text can appear after the "xmcd", but is unnecessary.
523
524 The comments should also contain the string "# Track frame offsets:" followed
525 by the list of track offsets (the # of frames from the beginning of the CD)
526 obtained from the table of contents on the CD itself, with any amount of white
527 space between the "#" and the offset. There should be no other comments
528 interspersed between the list of track offsets. This list must follow the
529 initial identifier string described above. Following the offset list should
530 be at least one blank comment.
531
532 After the offset list, the following string should appear:
533
534 "# Disc length: N seconds"
535
536 where the number of seconds in the CD's play length is substituted for "N".
537 The number of seconds should be computed by dividing the total number of
538 1/75th second frames in the CD by 75 and truncating any remainder. This number
539 should not be rounded.
540
541 Note for Windows programmers:
542
543 The disc length provided by the Windows MCI interface should not be used here.
544 Instead, the lead-out (address of the N+1th track) should be used. Since the
545 MCI interface does not provide the address of the lead-out, it should be
546 computed by adding the length of the last track to the offset of the last
547 track and truncating (not rounding) any remaining fraction of a second. Note
548 that the MCI interface yields an incorrect track offset which must be
549 corrected by adding one frame to the total frame count when performing the
550 disc length computation. For more information, see Appendix A.
551
552 After the disc length, the following string should appear:
553
554 "# Revision: N"
555
556 where the database entry revision (decimal integer) is substituted for "N".
557
558 Files missing a revision are assumed to have a revision revision level of 0.
559 The revision is used for database management when comparing two entries in
560 order to determine which is the most recent. Client programs which allow the
561 user to modify a database entry should increment the revision when the user
562 submits a modified entry for inclusion in the database.
563
564 After the revision, the following string should appear:
565
566 "# Submitted via: client_name client_version optional_comments"
567
568 where the name of the client submitting the entry is substituted for
569 "client_name", the version of the client is substituted for "client_version",
570 and "optional_comments" is any sequence of legal characters. Clients which
571 allow users to modify database entries read from the database should update
572 this string with their own information before submitting.
573
574 The "client_version" field has a very specific format which should be observed:
575
576 [leading text]version_number[release type][level]
577
578 Where:
579
580 Leading text: is any string which does not include numbers.
581 Version number and level: is any (possibly) decimal-separated list of
582 positive numbers.
583 Release type: is a string of the form:
584 alpha, a, beta, b, patchlevel, patch, pl
585 Level: is a positive number.
586
587 For example:
588
589 release:2.35.1alpha7
590 v4.0PL0
591 2.4
592
593 The only required portion of the version field is the version number. The
594 other parts are optional, though it is strongly recommended that the release
595 type field be filled in if relevant. Strict version checking may be
596 applied by software which evaluates the submitter revision, so it is wise
597 to make it clear when a release is beta, etc.
598
599 Following the comments is the disc data. Each line of disc data consists
600 of the format "KEYWORD=data", where "KEYWORD" is a valid keyword as described
601 below and "data" is any string consisting of characters in the set:
602
603 { space (20h) through tilde (7Eh) inclusive; no-break-space (A0h) through
604 y-umlaut (FFh) inclusive }
605
606 Newlines (0Ah), tabs (09h) and backslashes (2Fh) may be represented by the
607 two-character sequences "\n", "\t" and "\\" respectively. Client programs must
608 translate these sequences to the appropriate characters when displaying
609 disc data.
610
611 All of the applicable keywords must be present in the file. They must appear
612 in the file in the order shown below. Multiple occurrences of the same keyword
613 indicate that the data contained on those lines should be concatenated; this
614 applies to any of the textual fields. There is no practical limit to the size
615 of any of the textual fields or a database entry itself, though the CDDB server
616 software may place a restriction on especially large entries. Valid keywords
617 are as follows:
618
619 DISCID: The data following this keyword should contain the 8-byte disc ID.
620 indicated by the track offsets in the comment section. The algorithm
621 for generating the disc ID is explained in Appendix A.
622
623 DTITLE: Technically, this may consist of any data, but by convention contains
624 the artist and disc title (in that order) separated by a "/" with a
625 single space on either side to separate it from the text. If the "/"
626 is absent, it is implied that the artist and disc title are the same.
627
628 TTITLEN:There must be one of these for each track in the CD. The track
629 number should be substituted for the "N", starting with 0. This field
630 should contain the title of the Nth track on the CD.
631
632 EXTD: This field contains the "extended data" for the CD. This is intended
633 to be used as a place for interesting information related to the CD,
634 such as credits, et cetera. If there is more than one of these lines
635 in the file, the data is concatenated. This allows for extended data
636 of arbitrary length.
637
638 EXTTN: This field contains the "extended track data" for track "N". There
639 must be one of these for each track in the CD. The track number
640 should be substituted for the "N", starting with 0. This field is
641 intended to be used as a place for interesting information related to
642 the Nth track, such as the author and other credits, or lyrics. If
643 there is more than one of these lines in the file, the data is
644 concatenated. This allows for extended data of arbitrary length.
645
646 PLAYORDER:
647 This field contains a comma-separated list of track numbers which
648 represent a programmed track play order. This field is generally
649 stripped of data in non-local database entries. Applications that
650 submit entries for addition to the main database should strip this
651 keyword of data.
652
653
654 An example database entry follows:
655
656 # xmcd
657 # Copyright (C) 1993-1998 CDDB, Inc.
658 #
659 # Track frame offsets:
660 # 150
661 # 47275
662 # 76072
663 # 89507
664 # 117547
665 # 136377
666 # 157530
667 #
668 # Disc length: 2663 seconds
669 #
670 # Revision: 2
671 # Submitted via: xmcd 2.3beta PL0
672 #
673 DISCID=470a6507
674 DTITLE=Led Zeppelin / Presence
675 TTITLE0=Achilles' Last Stand
676 TTITLE1=For Your Life
677 TTITLE2=Royal Orleans
678 TTITLE3=Nobody's Fault But Mine
679 TTITLE4=Candy Store Rock
680 TTITLE5=Hots On For Nowhere
681 TTITLE6=Tea For One
682 EXTD=Producer: Jimmy Page\nExecutive Producer: Peter Gr
683 EXTD=ant\n\nUPC: 7567-90329-2\nLABEL: Atlantic Recordin
684 EXTD=g Corporation\nYEAR: 1976
685 EXTT0=Jimmy Page and Robert Plant
686 EXTT1=Jimmy Page and Robert Plant
687 EXTT2=John Bonham, John Paul Jones, Jimmy Page and\nRob
688 EXTT2=ert Plant
689 EXTT3=Jimmy Page and Robert Plant
690 EXTT4=Jimmy Page and Robert Plant
691 EXTT5=Jimmy Page and Robert Plant
692 EXTT6=Jimmy Page and Robert Plant
693 PLAYORDER=
694
695 Please note that the EXTD section above is split into three pieces. When
696 displayed to the user, it should appear like this:
697
698 Producer: Jimmy Page
699 Executive Producer: Peter Grant
700
701 UPC: 7567-90329-2
702 LABEL: Atlantic Recording Corporation
703 YEAR: 1976
704
705
706 APPENDIX C - CDDB SERVER PROTOCOL
707 ---------------------------------
708
709
710 CDDB Protocol
711 -------------
712
713
714 Notation:
715 -> : client to server
716 <- : server to client
717
718 terminating marker: `.' character in the beginning of a line
719
720
721 Server response code (three digit code):
722
723 First digit:
724 1xx Informative message
725 2xx Command OK
726 3xx Command OK so far, continue
727 4xx Command OK, but cannot be performed for some specified reasons
728 5xx Command unimplemented, incorrect, or program error
729
730 Second digit:
731 x0x Ready for further commands
732 x1x More server-to-client output follows (until terminating marker)
733 x2x More client-to-server input follows (until terminating marker)
734 x3x Connection will close
735
736 Third digit:
737 xx[0-9] Command-specific code
738
739 It is best if client applications treat response codes generically when
740 possible, rather than having hard-coded "expected" or known codes in the
741 application. Here is the suggested method for generically handling error
742 codes:
743
744 20x - OK, command successful. No action necessary.
745 21x - OK, prepare to read data from the server. If unexpected you can
746 disconnect, but it's probably an error on the app's part so retrying
747 in that case is not indicated.
748 22x - OK, prepare to give the server data. If unexpected, treat as above.
749 23x - OK, connection closing at client's request.
750
751 40x - Command failed due to server error or permission problem. Reconnecting
752 to a different server might help.
753 41x - Command failed, as above. Information follows regarding the problem,
754 so client should read it and perhaps display it. Reconnect as above.
755 43x - Command failed, as 40x. Connection is dropped by the server. Reconnect
756 as 40x.
757
758 50x - Command failed due to client error. Retrying in any fashion is probably
759 pointless, because a bug in the client is usually indicated.
760 51x - As above, with explanatory information following.
761 53x - Some sort of client error forced the server to disconnect. Connection is
762 dropped. Retry might help, because this code is often due to a timeout
763 condition or some other limit that gets reset upon reconnect.
764
765 It is okay to ignore the 'x' portion of an error code, but if there are
766 specific ones that you want to react to, you can. Just don't preclude
767 reacting to general codes at any time. Any 2-level codes that don't appear
768 here, such as "42x" are either not possible or will not be seen by clients.
769 You might want to have a general default case for these; consider them a
770 server error indicating a serious problem.
771
772
773 CDDB Protocol Level 1:
774 ----------------------
775
776 Initial client-server handshake:
777 --------------------------------
778 Note: This command is not used directly in HTTP mode. It is implied by
779 the "hello=" field in the HTTP query. See Addendum A below for more
780 information. It is described here only as a reference.
781
782 Client command:
783 -> cddb hello username hostname clientname version
784
785 username:
786 Login name of user. Example: johndoe
787 hostname:
788 Host name of client. Example: abc.fubar.com
789 clientname:
790 The name of the connecting client. Example: xmcd, cda, EasyCD,
791 et cetera. Do not use the name of another client which already
792 exists.
793 version:
794 Version number of client software. Example: v1.0PL0
795
796 Server response:
797 <- code hello and welcome username@hostname running clientname version
798
799 code:
800 200 Handshake successful
801 431 Handshake not successful, closing connection
802 402 Already shook hands
803
804
805 CDDB lscat:
806 ----------
807 Client command:
808 -> cddb lscat
809
810 Server response:
811 <- code Okay category list follows
812 <- category
813 <- category
814 <- (more categories...)
815 <- .
816
817 code:
818 210 Okay category list follows (until terminating marker)
819 category:
820 CD category. Example: rock
821
822
823 CDDB query:
824 -----------
825 Client command:
826 -> cddb query discid ntrks off1 off2 ... nsecs
827
828 discid:
829 CD disc ID number. Example: f50a3b13
830 ntrks:
831 Total number of tracks on CD.
832 off1, off2, ...:
833 Frame offset of the starting location of each track.
834 nsecs:
835 Total playing length of CD in seconds.
836
837 Server response:
838 <- code categ discid dtitle
839 or
840 <- code close matches found
841 <- categ discid dtitle
842 <- categ discid dtitle
843 <- (more matches...)
844 <- .
845
846 code:
847 200 Found exact match
848 211 Found inexact matches, list follows (until terminating marker)
849 202 No match found
850 403 Database entry is corrupt
851 409 No handshake
852 categ:
853 CD category. Example: rock
854 discid:
855 CD disc ID number of the found entry. Example: f50a3b13
856 dtitle:
857 The Disc Artist and Disc Title (The DTITLE line). For example:
858 Pink Floyd / The Dark Side of the Moon
859
860
861 CDDB read:
862 ----------
863 Client command:
864 -> cddb read categ discid
865
866 categ:
867 CD category. Example: rock
868 discid:
869 CD disc ID number. Example: f50a3b13
870
871 Server response:
872 <- code categ discid
873 <- # xmcd CD database file
874 <- # ...
875 <- (CDDB data...)
876 <- .
877 or
878 <- code categ discid No such CD entry in database
879
880 code:
881 210 OK, CDDB database entry follows (until terminating marker)
882 401 Specified CDDB entry not found.
883 402 Server error.
884 403 Database entry is corrupt.
885 409 No handshake.
886 417 Access limit exceeded, explanation follows (until marker)
887 categ:
888 CD category. Example: rock
889 discid:
890 CD disc ID number. Example: f50a3b13
891
892
893 Help information:
894 -----------------
895 Client command:
896 -> help
897 or
898 -> help cmd
899
900 cmd:
901 CDDB command. Example: quit
902
903 or
904
905 -> help cmd subcmd
906
907 cmd:
908 CDDB command. Example: cddb
909 subcmd:
910 CDDB command argument. Example: query
911
912 Server response:
913 <- code Help information follows
914 <- (help data ...)
915 <- .
916 or
917 <- code no help information available
918
919 code:
920 210 OK, help information follows (until terminating marker)
921 401 No help information available
922
923
924 Message of the day:
925 ------------------
926 Client command:
927 -> motd
928
929 Server response:
930 <- code Last modified: date MOTD follows (until terminating marker)
931 <- (message text)
932 <- .
933
934 code:
935 210 Last modified: 05/31/96 06:31:14 MOTD follows (until terminating marker)
936 401 No message of the day available
937 date:
938 The date the text of the message of the day was modified. The date
939 appears in the following format:
940
941 05/31/96 06:31:14
942
943 This value may be used by client software as a message timestamp
944 for purposes of determining if it has already been displayed. This
945 format was chosen because it is more easily parsed than the standard
946 ctime() format.
947
948
949 Server protocol level:
950 ----------------------
951 Note: This command is not used directly in HTTP mode. It is implied by
952 the "proto=" field in the HTTP query. See Addendum A below for more
953 information. It is described here only as a reference.
954
955 Client command:
956 -> proto [level]
957
958 level:
959 The (numerical) protocol level to set the server to.
960
961 Server response:
962 <- code CDDB protocol level: current cur_level, supported supported_level
963 or
964 <- code OK, protocol version now: cur_level
965
966 code:
967 200 CDDB protocol level: current cur_level, supported supp_level
968 201 OK, protocol version now: cur_level
969 501 Illegal protocol level.
970 502 Protocol level already cur_level.
971 cur_level:
972 The current protocol level at which the server is running.
973 supported_level:
974 The maximum supported protocol level.
975
976
977 Server sites:
978 --------------
979 Client command:
980 -> sites
981
982 Server response:
983 <- code OK, site information follows (until terminating `.')
984 <- (data)
985 <- .
986
987 code:
988 210 Ok, site information follows
989 401 No site information available.
990
991 The data format is as follows:
992 site port latitude longitude description
993
994 The fields are as follows:
995 site:
996 The Internet address of the remote site.
997 port:
998 The port at which the server resides on that site.
999 latitude:
1000 The latitude of the server site. The format is as follows:
1001 CDDD.MM
1002 Where "C" is the compass direction (N, S), "DDD" is the
1003 degrees, and "MM" is the minutes.
1004 longitude:
1005 The longitude of the server site. Format is as above, except
1006 the compass direction must be one of (E, W).
1007 description:
1008 A short description of the geographical location of the site.
1009
1010 Example:
1011 ca.us.cddb.com 888 N037.23 W122.01 Fremont, CA USA
1012
1013
1014 Server status:
1015 --------------
1016 Client command:
1017 -> stat
1018
1019 Server response:
1020 <- code OK, status information follows (until terminating `.')
1021 <- (data)
1022 <- .
1023
1024 code:
1025 210 Ok, status information follows
1026
1027 The possible data is as follows:
1028 current proto: <current_level>
1029 An integer representing the server's current operating protocol
1030 level.
1031 max proto: <max_level>
1032 The maximum supported protocol level.
1033 gets: <yes | no>
1034 Whether or not the client is allowed to get log information,
1035 according to the string "yes" or "no".
1036 updates: <yes | no>
1037 Whether or not the client is allowed to initiate a database
1038 update, according to the string "yes" or "no".
1039 posting: <yes | no>
1040 Whether or not the client is allowed to post new entries,
1041 according to the string "yes" or "no".
1042 quotes: <yes | no>
1043 Whether or not quoted arguments are enabled, according to
1044 the string "yes" or "no".
1045 current users: <num_users>
1046 The number of users currently connected to the server.
1047 max users: <num_max_users>
1048 The number of users that can concurrently connect to the server.
1049 strip ext: <yes | no>
1050 Whether or not extended data is stripped by the server before
1051 presented to the user.
1052 Database entries: <num_db_entries>
1053 The total number of entries in the database.
1054 Database entries by category:
1055 This field is followed by a list of catgories and the number
1056 of entries in that category. Each entry is of the following
1057 format:
1058
1059 <white space>catgory: <num_db_entries>
1060
1061 The list of entries is terminated by the first line that does
1062 not begin with white space.
1063
1064 Pending file transmissions:
1065 This field is followed by a list of sites that are fed new
1066 database entries at periodic intervals, and the number of
1067 entries that have yet to be transmitted to that site.
1068 Each entry is of the following format:
1069
1070 <white space>site: <num_db_entries>
1071
1072 The list of entries is terminated by the first line that does
1073 not begin with white space.
1074
1075 This list may grow as needed, so clients must expect possible
1076 unrecognizable data. Also, additional fields may be added to
1077 the currently existing lines, although no existing fields will
1078 be removed or change position.
1079
1080
1081 Server version:
1082 ---------------
1083 Client command:
1084 -> ver
1085
1086 Server response:
1087 <- code servername version copyright
1088 or
1089 <- code Version information follows
1090
1091 code:
1092 200 Version information.
1093 211 OK, version information follows (until terminating marker)
1094 version:
1095 Server version. Example: v1.0PL0
1096 copyright:
1097 Copyright string. Example: Copyright (c) 1996 Steve Scherf
1098
1099
1100 Server users:
1101 -------------
1102 Client command:
1103 -> whom
1104
1105 Server response:
1106 <- code User list follows
1107
1108 code:
1109 210 OK, user list follows (until terminating marker)
1110 401 No user information available.
1111
1112
1113 Reserved errors:
1114 ----------------
1115
1116 The following error codes are reserved, and will never be returned as a
1117 response to a CDDB protocol command. They are intended to be used internally
1118 by clients that have a need for generating pseudo-responses.
1119
1120 600-699
1121
1122
1123 CDDB Protocol Level 2:
1124 ----------------------
1125
1126 In all respects, protocol level 2 is the same as level 1, with the exceptions
1127 listed below.
1128
1129 Arguments to commands may be surrounded by double quotes. All characters
1130 within the quotes, including white space, are included in the argument. All
1131 white space is replaced by the `_' (2Dh) character by the server. White space
1132 is defined as ` ' (20h) and `^I' (control-I, or 09h).
1133
1134 Arguments containing quotes that should not be interpreted with the special
1135 meaning described above should be escaped with a preceding backslash character,
1136 or '\' (5Ch). If an actual backslash appears in an argument, it should be
1137 escaped with a preceding backslash. In both cases, the preceding backslash
1138 will be removed from the input before being interpreted.
1139
1140
1141 CDDB Protocol Level 3:
1142 ----------------------
1143
1144 Protocol level 3 is the same as level 2, with the exception listed below.
1145
1146 The output of the "sites" command has changed to meet the folowing description:
1147
1148 The data format is as follows:
1149 site protocol port address latitude longitude description
1150
1151 The fields are as follows:
1152 site:
1153 The Internet address of the remote site.
1154 protocol:
1155 The transfer protocol used to access the site. Sites specified
1156 as "cddbp" protocol sites are listed only for compatibility
1157 with older clients. Newer clients should ignore these and
1158 only pay attention to "http" sites.
1159 port:
1160 The port at which the server resides on that site.
1161 address:
1162 Any additional addressing information needed to access the
1163 server. For example, for HTTP protocol servers, this would be
1164 the path to the CDDB server CGI script. This field will be
1165 "-" if no additional addressing information is needed.
1166 latitude:
1167 The latitude of the server site. The format is as follows:
1168 CDDD.MM
1169 Where "C" is the compass direction (N, S), "DDD" is the
1170 degrees, and "MM" is the minutes.
1171 longitude:
1172 The longitude of the server site. Format is as above, except
1173 the compass direction must be one of (E, W).
1174 description:
1175 A short description of the geographical location of the site.
1176
1177 Example:
1178 ca.us.cddb.com cddbp 888 - N037.23 W122.01 Fremont, CA USA
1179 ca.us.cddb.com http 80 /~cddb/cddb.cgi N037.23 W122.01 Fremont, CA USA
1180
1181 Note that a site may appear once for each type of protocol it supports for
1182 accessing the server.
1183
1184
1185 CDDB Protocol Level 4:
1186 ----------------------
1187
1188 Protocol level 4 is the same as level 3, with the exception listed below.
1189
1190 The output of the "cddb query" command may result in multiple exact matches.
1191 A new response code, 210, has been added to indicate that more than one
1192 exact match has been found.
1193
1194 Server response:
1195 ----------------
1196 <- code exact matches found
1197 <- categ discid dtitle
1198 <- categ discid dtitle
1199 <- (more matches...)
1200 <- .
1201
1202 code:
1203 210 Found exact matches, list follows (until terminating marker)
1204 417 Database access limit exceeded, explanation follows (until marker)
1205
1206
1207 Addendum A: CDDB Protocol Under HTTP:
1208 -------------------------------------
1209
1210 Accessing a CDDB server CGI script is done by encapsulating the CDDB protocol
1211 command in the HTTP protocol. The only limitation is that a single command
1212 may be executed per connection, since HTTP is not truly interactive. For the
1213 server to be accessed in this way, it must reside on the target host at a
1214 known URL which is accessible by the host HTTP server. The client program
1215 must connect to the HTTP server on the target host and issue an HTTP command
1216 with the appropriate CDDB protocol command encapsulated within.
1217
1218 Commands may be submitted to servers in CGI mode using either the "GET" or
1219 "POST" HTTP commands. Both methods are supported, and there is no real
1220 difference between how both are to be used other than the syntactical
1221 difference between the two methods. The "POST" method may provide the ability
1222 to issue longer commands, though, depending on the architecture of the HTTP
1223 server on the remote system.
1224
1225 The server command must be sent as part of the "Request-URI" in the case
1226 of the "GET" method, and as the "Entity-Body" in the case of the "POST"
1227 method. In both cases, the command must be of the following form:
1228
1229 cmd=server+command&hello=joe+my.host.com+clientname+version&proto=1
1230
1231 Where the text following the "cmd=" represents the CDDB Protocol command to
1232 be executed, the text following the "hello=" represents the arguments to
1233 the "cddb hello" command that is implied by this operation, and the
1234 text following the "proto=" represents the argument to the "proto" command
1235 that is implied by this operation.
1236
1237 The "+" characters in the input represent spaces, and will be translated
1238 by the server before performing the request. Special characters may be
1239 represented by the sequence "%XX" where "XX" is a two-digit hex number
1240 corresponding to the ASCII (ISO-8859-1) sequence of that character. The
1241 "&" characters denote separations between the command, hello and proto
1242 arguments. Newlines and carriage returns must not appear anywhere in the
1243 string except at the end.
1244
1245 For example, should user "joe" on system "my.host.com" be running CDclient
1246 version 2.1, a read request for his currenly playing CD might look like this:
1247
1248 cmd=cddb+read+rock+12345678&hello=joe+my.host.com+CDclient+2.1&proto=4
1249
1250 The server will perform the implied "proto" and "cddb hello" commands,
1251 and then perform the requested "cddb read" command.
1252
1253 Server response to the command is encapsulated in the HTTP server response,
1254 and appears in the "Entity-Body". Note that the HTTP response "Entity-Header"
1255 is not guaranteed to contain a "Content-Length" field, so clients should be
1256 prepared to accept variable length input. The header will always contain a
1257 Mime "Content-Type" field which describes the body of data as "text/plain".
1258
1259 Here is an example HTTP-mode request, including the necessary HTTP protocol:
1260
1261 GET /~cddb/cddb.cgi?cmd=help&hello=steve+cddb.com+CDclient+2.1&proto=4 HTTP/1.0
1262
1263 For more detailed information on HTTP and Mime, see RFC 1945 and RFC 1521,
1264 as well as later amendments to those RFCs.
1265
1266
1267 APPENDIX D - OFFICIAL CDDB SOFTWARE DISTRIBUTION SITES
1268 ------------------------------------------------------
1269
1270 All CDDB-related software and other files are distributed via the
1271 CDDB web page (under "Downloads"):
1272
1273 http://www.cddb.com/