#ifndef _CDDB_SERVER_H
#define _CDDB_SERVER_H
#include <NetAddress.h>
#include <NetEndpoint.h>
#include <ObjectList.h>
#include <String.h>
#include <scsi_cmds.h>
struct TrackData {
uint32 trackNumber;
BString title;
BString artist;
};
struct QueryResponseData {
BString category;
BString cddbID;
BString artist;
BString title;
};
struct ReadResponseData {
BString title;
BString artist;
BString genre;
uint32 year;
BObjectList<TrackData, true> tracks;
ReadResponseData()
:
tracks(20)
{
}
};
typedef BObjectList<QueryResponseData, true> QueryResponseList;
class CDDBServer {
public:
CDDBServer(const BString& cddbServer);
status_t Query(uint32 cddbID, const scsi_toc_toc* toc,
QueryResponseList& queryResponses);
status_t Read(const QueryResponseData& diskData,
ReadResponseData& readResponse,
bool verbose = false);
status_t Read(const BString& category,
const BString& cddbID,
const BString& artist,
ReadResponseData& readResponse,
bool verbose = false);
private:
status_t _ParseAddress(const BString& cddbServer);
status_t _OpenConnection();
void _CloseConnection();
status_t _SendCommand(const BString& command,
BString& output);
TrackData* _Track(ReadResponseData& response,
uint32 track) const;
private:
BString fLocalHostName;
BString fLocalUserName;
BString fServerHostname;
int32 fServerPort;
BNetAddress fServerAddress;
BNetEndpoint fConnection;
bool fInitialized;
bool fConnected;
};
#endif