summaryrefslogtreecommitdiff
path: root/indra/newview/llappcorehttp.h
blob: 6dc3bb21302461800fb5680e2b7601d9169470ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/**
 * @file llappcorehttp.h
 * @brief Singleton initialization/shutdown class for llcorehttp library
 *
 * $LicenseInfo:firstyear=2012&license=viewerlgpl$
 * Second Life Viewer Source Code
 * Copyright (C) 2012-2013, Linden Research, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation;
 * version 2.1 of the License only.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 * $/LicenseInfo$
 */

#ifndef	_LL_APP_COREHTTP_H_
#define	_LL_APP_COREHTTP_H_


#include "httprequest.h"
#include "httphandler.h"
#include "httpresponse.h"


// This class manages the lifecyle of the core http library.
// Slightly different style than traditional code but reflects
// the use of handler classes and light-weight interface
// object instances of the new libraries.  To be used
// as a singleton and static construction is fine.
class LLAppCoreHttp : public LLCore::HttpHandler
{
public:
	typedef LLCore::HttpRequest::policy_t policy_t;

	enum EAppPolicy
	{
		AP_DEFAULT,
		AP_TEXTURE,
		AP_MESH1,
		AP_MESH2,
		AP_LARGE_MESH,
		AP_UPLOADS,
		AP_COUNT						// Must be last
	};
	
public:
	LLAppCoreHttp();
	~LLAppCoreHttp();
	
	// Initialize the LLCore::HTTP library creating service classes
	// and starting the servicing thread.  Caller is expected to do
	// other initializations (SSL mutex, thread hash function) appropriate
	// for the application.
	void init();

	// Request that the servicing thread stop servicing requests,
	// release resource references and stop.  Request is asynchronous
	// and @see cleanup() will perform a limited wait loop for this
	// request to stop the thread.
	void requestStop();
	
	// Terminate LLCore::HTTP library services.  Caller is expected
	// to have made a best-effort to shutdown the servicing thread
	// by issuing a requestThreadStop() and waiting for completion
	// notification that the stop has completed.
	void cleanup();

	// Notification when the stop request is complete.
	virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response);

	// Retrieve a policy class identifier for desired
	// application function.
	policy_t getPolicy(EAppPolicy policy) const
		{
			return mPolicies[policy];
		}

	// Apply initial or new settings from the environment.
	void refreshSettings(bool initial);
	
private:
	static const F64			MAX_THREAD_WAIT_TIME;
	
private:
	LLCore::HttpRequest *		mRequest;						// Request queue to issue shutdowns
	LLCore::HttpHandle			mStopHandle;
	F64							mStopRequested;
	bool						mStopped;
	policy_t					mPolicies[AP_COUNT];			// Policy class id for each connection set
	U32							mSettings[AP_COUNT];
	boost::signals2::connection mSettingsSignal[AP_COUNT];		// Signals to global settings that affect us
};


#endif	// _LL_APP_COREHTTP_H_