haiku/src/kits/media/FileInterface.cpp

162 lines
4.8 KiB
C++

/***********************************************************************
* AUTHOR: Marcus Overhagen
* FILE: FileInterface.cpp
* DESCR:
***********************************************************************/
/*
* Copyright 2008 Maurice Kalinowski, haiku@kaldience.com
*
* All rights reserved. Distributed under the terms of the MIT License.
*
*/
#include "MediaDebug.h"
#include "DataExchange.h"
#include <string.h>
#include <FileInterface.h>
#include <MimeType.h>
/*************************************************************
* protected BFileInterface
*************************************************************/
BFileInterface::~BFileInterface()
{
}
/*************************************************************
* public BFileInterface
*************************************************************/
/* nothing */
/*************************************************************
* protected BFileInterface
*************************************************************/
BFileInterface::BFileInterface()
: BMediaNode("called by FileInterface")
{
CALLED();
AddNodeKind(B_FILE_INTERFACE);
}
status_t
BFileInterface::HandleMessage(int32 message,
const void *data,
size_t size)
{
CALLED();
status_t rv;
switch(message) {
case FILEINTERFACE_SET_REF:
{
const fileinterface_set_ref_request *request =
(const fileinterface_set_ref_request*) data;
fileinterface_set_ref_reply reply;
entry_ref ref(request->device, request->directory,
request->name);
reply.duration = request->duration;
rv = SetRef(ref, request->create, &reply.duration);
request->SendReply(rv, &reply, sizeof(reply));
return B_OK;
}
case FILEINTERFACE_GET_REF:
{
const fileinterface_get_ref_request *request =
(const fileinterface_get_ref_request*) data;
fileinterface_get_ref_reply reply;
entry_ref resultRef;
rv = GetRef(&resultRef, reply.mimetype);
if (rv == B_OK) {
reply.device = resultRef.device;
reply.directory = resultRef.directory;
strcpy(reply.name, resultRef.name);
}
request->SendReply(rv, &reply, sizeof(reply));
return B_OK;
}
case FILEINTERFACE_SNIFF_REF:
{
const fileinterface_sniff_ref_request *request =
(const fileinterface_sniff_ref_request*) data;
fileinterface_sniff_ref_reply reply;
entry_ref ref(request->device, request->directory,
request->name);
rv = SniffRef(ref, reply.mimetype, &reply.capability);
request->SendReply(rv, &reply, sizeof(reply));
return B_OK;
}
case FILEINTERFACE_GET_FORMATS:
{
const fileinterface_get_formats_request *request =
(const fileinterface_get_formats_request*) data;
fileinterface_get_formats_reply reply;
media_file_format* formats;
area_id area = clone_area("client formats area",
(void**)&formats, B_ANY_ADDRESS, B_WRITE_AREA,
request->data_area);
if (area < 0) {
ERROR("BBufferConsumer::FILEINTERFACE_GET_FORMATS:"
" can't clone area\n");
break;
}
int32 cookie = 0;
while (GetNextFileFormat(&cookie, formats) == B_OK) {
if (cookie >= request->num_formats)
break;
formats += sizeof(media_format);
}
reply.filled_slots = cookie;
request->SendReply(B_OK, &reply, sizeof(reply));
delete_area(area);
return B_OK;
}
default:
return B_ERROR;
}
return B_ERROR;
}
/*************************************************************
* private BFileInterface
*************************************************************/
/*
private unimplemented
BFileInterface::BFileInterface(const BFileInterface &clone)
FileInterface & BFileInterface::operator=(const BFileInterface &clone)
*/
status_t BFileInterface::_Reserved_FileInterface_0(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_1(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_2(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_3(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_4(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_5(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_6(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_7(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_8(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_9(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_10(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_11(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_12(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_13(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_14(void *) { return B_ERROR; }
status_t BFileInterface::_Reserved_FileInterface_15(void *) { return B_ERROR; }