Mercurial > projects > hoofbaby
view src/platif/hoofbaby.cpp @ 0:3425707ddbf6
Initial import (hopefully this mercurial stuff works...)
author | fraserofthenight |
---|---|
date | Mon, 06 Jul 2009 08:06:28 -0700 |
parents | |
children |
line wrap: on
line source
/** * Hoofbaby -- http://www.dsource.org/projects/hoofbaby * Copyright (C) 2009 Robert Fraser * * This program is free software; you can redistribute it andor * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "platif.h" #include "PltUPnP.h" #include "PltMediaConnect.h" #include "PltHttpServer.h" #include "NptStreams.h" #include <stdlib.h> #include <stdio.h> static Hoofbaby hoofbaby; class HB_InputStream : public NPT_InputStream { private: void* ctx; public: HB_InputStream(void* _ctx) : ctx(_ctx) {} NPT_Result Read(void* buffer, NPT_Size bytes_to_read, NPT_Size* bytes_read = 0) { return hoofbaby.Stream_Read(ctx, buffer, bytes_to_read, bytes_read); } NPT_Result Seek(NPT_Position offset) { return hoofbaby.Stream_Seek(ctx, offset); } NPT_Result Tell(NPT_Position& offset) { return hoofbaby.Stream_Tell(ctx, &offset); } NPT_Result GetSize(NPT_LargeSize& size) { return hoofbaby.Stream_GetSize(ctx, &size); } NPT_Result GetAvailable(NPT_LargeSize& available) { return hoofbaby.Stream_GetAvailable(ctx, &available); } }; class HB_Server : public PLT_MediaConnect { public: HB_Server(const char* _path, const char* _friendly_name) : PLT_MediaConnect(_path, _friendly_name) {} NPT_Result ServeFile(NPT_HttpRequest& request, const NPT_HttpRequestContext& context, NPT_HttpResponse& response, const NPT_String& file_path) { NPT_COMPILER_UNUSED(context); printf("**********************************\n"); printf("ServeFile(%s)\n", file_path.GetChars()); printf("**********************************\n"); fflush(stdout); NPT_Position start, end; PLT_HttpHelper::GetRange(request, start, end); return PLT_FileServer::ServeFile(response, file_path, start, end, !request.GetMethod().Compare("HEAD")); } }; void initHoofbaby(Hoofbaby* interf) { hoofbaby = *interf; } int startServer(const char* path) { PLT_DeviceHostReference device(new HB_Server("D:\\Media\\Videos", "Platinum: Hoofbaby: ")); PLT_UPnP upnp; upnp.AddDevice(device); if (NPT_FAILED(upnp.Start())) return 1; char buf[256]; while (gets(buf)) { if (*buf == 'q') { break; } } upnp.Stop(); return 0; }