/usr/include/pion/net/WebService.hpp is in libpion-net-dev 4.0.7+dfsg-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
| 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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | // ------------------------------------------------------------------
// pion-net: a C++ framework for building lightweight HTTP interfaces
// ------------------------------------------------------------------
// Copyright (C) 2007-2008 Atomic Labs, Inc.  (http://www.atomiclabs.com)
//
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
//
#ifndef __PION_WEBSERVICE_HEADER__
#define __PION_WEBSERVICE_HEADER__
#include <boost/noncopyable.hpp>
#include <pion/PionConfig.hpp>
#include <pion/PionException.hpp>
#include <pion/PionAlgorithms.hpp>
#include <pion/net/HTTPRequest.hpp>
#include <pion/net/TCPConnection.hpp>
#include <string>
namespace pion {	// begin namespace pion
namespace net {		// begin namespace net (Pion Network Library)
///
/// WebService: interface class for web services
/// 
class WebService :
	private boost::noncopyable
{
public:
	/// exception thrown if the service does not recognize a configuration option
	class UnknownOptionException : public PionException {
	public:
		UnknownOptionException(const std::string& name)
			: PionException("Option not recognized by web service: ", name) {}
	};
	/// default constructor
	WebService(void) {}
	/// virtual destructor
	virtual ~WebService() {}
	/**
	 * attempts to handle a new HTTP request
	 *
	 * @param request the new HTTP request to handle
	 * @param tcp_conn the TCP connection that has the new request
	 */
	virtual void operator()(HTTPRequestPtr& request, TCPConnectionPtr& tcp_conn) = 0;
	
	/**
	 * sets a configuration option
	 *
	 * @param name the name of the option to change
	 * @param value the value of the option
	 */
	virtual void setOption(const std::string& name, const std::string& value) {
		throw UnknownOptionException(name);
	}
	
	/// called when the web service's server is starting
	virtual void start(void) {}
	
	/// called when the web service's server is stopping
	virtual void stop(void) {}
	
	/// sets the URI stem or resource that is bound to the web service
	inline void setResource(const std::string& str) { m_resource = str; }
	/// returns the URI stem or resource that is bound to the web service	
	inline const std::string& getResource(void) const { return m_resource; }
	
	/// returns the path to the resource requested, relative to the web service's location
	inline std::string getRelativeResource(const std::string& resource_requested) const {
		if (resource_requested.size() <= getResource().size()) {
			// either the request matches the web service's resource path (a directory)
			// or the request does not match (should never happen)
			return std::string();
		}
		// strip the web service's resource path plus the slash after it
		return algo::url_decode(resource_requested.substr(getResource().size() + 1));
	}
	
	
private:
		
	/// the URI stem or resource that is bound to the web service	
	std::string	m_resource;
};
//
// The following symbols must be defined for any web service that you would
// like to be able to load dynamically using the HTTPServer::loadService()
// function.  These are not required for any services that you only want to link
// directly into your programs.
//
// Make sure that you replace "WebService" with the name of your derived class.
// This name must also match the name of the object file (excluding the
// extension).  These symbols must be linked into your service's object file,
// not included in any headers that it may use (declarations are OK in headers
// but not the definitions).
//
// The "pion_create" function is used to create new instances of your service.
// The "pion_destroy" function is used to destroy instances of your service.
//
// extern "C" WebService *pion_create_WebService(void) {
//		return new WebService;
// }
//
// extern "C" void pion_destroy_WebService(WebService *service_ptr) {
//		delete service_ptr;
// }
//
}	// end namespace net
}	// end namespace pion
#endif
 |