xref: /haiku/src/bin/cddb_lookup/cddb_server.h (revision a5a3b2d9a3d95cbae71eaf371708c73a1780ac0d)
1 /*
2  * Copyright 2008-2009, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *              Bruno Albuquerque, bga@bug-br.org.br
7  */
8 
9 #ifndef _CDDB_SERVER_H
10 #define _CDDB_SERVER_H
11 
12 #include <List.h>
13 #include <NetAddress.h>
14 #include <NetEndpoint.h>
15 #include <String.h>
16 
17 #include <scsi_cmds.h>
18 
19 
20 // CD track specific data.
21 struct TrackData {
22 	uint32 trackNumber;
23 	BString title;
24 	BString artist;
25 };
26 
27 
28 // Query command response.
29 struct QueryResponseData {
30 	BString category;
31 	BString cddbId;
32 	BString artist;
33 	BString title;
34 };
35 
36 
37 // Read command response.
38 struct ReadResponseData {
39 	BString title;
40 	BString artist;
41 	BString genre;
42 	uint32 year;
43 	BList tracks; // TrackData items.
44 };
45 
46 
47 class CDDBServer {
48 public:
49 				CDDBServer(const BString& cddbServer);
50 
51 	// CDDB commands interface.
52 	status_t	Query(uint32 cddbId, const scsi_toc_toc* toc,
53 		BList* queryResponse);
54 	status_t	Read(QueryResponseData* diskData,
55 		ReadResponseData* readResponse);
56 
57 private:
58 	status_t 		_ParseAddress(const BString& cddbServer);
59 
60 	status_t		_OpenConnection();
61 	void			_CloseConnection();
62 
63 	status_t		_SendCddbCommand(const BString& command, BString* output);
64 
65 	BString			fLocalHostName;
66 	BString			fLocalUserName;
67 	BNetAddress		fCddbServerAddr;
68 	BNetEndpoint	fConnection;
69 	bool			fInitialized;
70 	bool			fConnected;
71 };
72 
73 #endif  // _CDDB_SERVER_H
74