Sirikata
libcore/include/sirikata/core/transfer/HttpTransferHandler.hpp
Go to the documentation of this file.
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