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