Sirikata
|
00001 // Copyright (c) 2011 Sirikata Authors. All rights reserved. 00002 // Use of this source code is governed by a BSD-style license that can 00003 // be found in the LICENSE file. 00004 00005 #ifndef SIRIKATA_HttpTransferHandler_HPP__ 00006 #define SIRIKATA_HttpTransferHandler_HPP__ 00007 00008 #include <map> 00009 #include <queue> 00010 #include <string> 00011 #include <sirikata/core/util/Platform.hpp> 00012 #include <sirikata/core/transfer/RemoteFileMetadata.hpp> 00013 #include <sirikata/core/transfer/TransferPool.hpp> 00014 #include <sirikata/core/transfer/HttpManager.hpp> 00015 #include <boost/asio.hpp> 00016 #include <sirikata/core/network/Address.hpp> 00017 00018 namespace Sirikata { 00019 namespace Transfer { 00020 00021 /* 00022 * Implements name lookups via HTTP 00023 */ 00024 class SIRIKATA_EXPORT HttpNameHandler 00025 : public NameHandler, public AutoSingleton<HttpNameHandler> { 00026 00027 public: 00028 HttpNameHandler(); 00029 ~HttpNameHandler(); 00030 00031 /* 00032 * Resolves a metadata request via HTTP and calls callback when completed 00033 */ 00034 void resolve(std::tr1::shared_ptr<MetadataRequest> request, NameCallback callback); 00035 00036 /* 00037 * Callback from HttpManager when an http request finishes 00038 */ 00039 void request_finished(std::tr1::shared_ptr<HttpManager::HttpResponse> response, 00040 HttpManager::ERR_TYPE error, const boost::system::error_code& boost_error, 00041 std::tr1::shared_ptr<MetadataRequest> request, NameCallback callback); 00042 00043 static HttpNameHandler& getSingleton(); 00044 static void destroy(); 00045 }; 00046 00047 /* 00048 * Implements chunk downloading via HTTP 00049 */ 00050 class SIRIKATA_EXPORT HttpChunkHandler 00051 : public ChunkHandler, public AutoSingleton<HttpChunkHandler> { 00052 00053 private: 00054 void cache_check_callback(const SparseData* data, std::tr1::shared_ptr<RemoteFileMetadata> file, 00055 std::tr1::shared_ptr<Chunk> chunk, ChunkCallback callback); 00056 00057 public: 00058 HttpChunkHandler(); 00059 ~HttpChunkHandler(); 00060 00061 /* 00062 * Downloads the chunk referenced and calls callback when completed 00063 */ 00064 void get(std::tr1::shared_ptr<RemoteFileMetadata> file, 00065 std::tr1::shared_ptr<Chunk> chunk, ChunkCallback callback); 00066 00067 /* 00068 * Callback from HttpManager when an http request finishes 00069 */ 00070 void request_finished(std::tr1::shared_ptr<HttpManager::HttpResponse> response, 00071 HttpManager::ERR_TYPE error, const boost::system::error_code& boost_error, 00072 std::tr1::shared_ptr<RemoteFileMetadata> file, std::tr1::shared_ptr<Chunk> chunk, 00073 ChunkCallback callback); 00074 00075 static HttpChunkHandler& getSingleton(); 00076 static void destroy(); 00077 }; 00078 00079 } 00080 } 00081 00082 #endif