xref: /haiku/src/bin/cddb_lookup/cddb_server.h (revision e81a954787e50e56a7f06f72705b7859b6ab06d1)
1 /*
2  * Copyright 2008-2016, 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 #ifndef _CDDB_SERVER_H
9 #define _CDDB_SERVER_H
10 
11 
12 #include <NetAddress.h>
13 #include <NetEndpoint.h>
14 #include <ObjectList.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 	BObjectList<TrackData> tracks;
44 
45 	ReadResponseData()
46 		:
47 		tracks(20, true)
48 	{
49 	}
50 };
51 
52 
53 typedef BObjectList<QueryResponseData> QueryResponseList;
54 
55 
56 class CDDBServer {
57 public:
58 								CDDBServer(const BString& cddbServer);
59 
60 	// CDDB commands interface.
61 			status_t			Query(uint32 cddbID, const scsi_toc_toc* toc,
62 									QueryResponseList& queryResponses);
63 			status_t			Read(const QueryResponseData& diskData,
64 									ReadResponseData& readResponse,
65 									bool verbose = false);
66 			status_t			Read(const BString& category,
67 									const BString& cddbID,
68 									const BString& artist,
69 									ReadResponseData& readResponse,
70 									bool verbose = false);
71 
72 private:
73 			status_t 			_ParseAddress(const BString& cddbServer);
74 
75 			status_t			_OpenConnection();
76 			void				_CloseConnection();
77 
78 			status_t			_SendCommand(const BString& command,
79 									BString& output);
80 			TrackData*			_Track(ReadResponseData& response,
81 									uint32 track) const;
82 
83 private:
84 			BString				fLocalHostName;
85 			BString				fLocalUserName;
86 			BNetAddress			fServerAddress;
87 			BNetEndpoint		fConnection;
88 			bool				fInitialized;
89 			bool				fConnected;
90 };
91 
92 
93 #endif  // _CDDB_SERVER_H
94