smf/smfservermodule/smfserver/transportmgr/smftransportmanagerutil.h
author cgandhi <chandradeep.gandhi@sasken.com>
Tue, 18 May 2010 17:37:12 +0530
changeset 7 be09cf1f39dd
permissions -rw-r--r--
Updating the source code for plugin manager, transport manager, smfserver and smf client.

/**
 * Copyright (c) 2010 Sasken Communication Technologies Ltd.
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the "Eclipse Public License v1.0" 
 * which accompanies  this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html"
 *
 * Initial Contributors:
 * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
 *
 * Contributors:
 * Manasij Roy, Nalina Hariharan
 * 
 * Description:
 * The Transport Manager Utility class provides the http/https transaction 
 * methods for the smf framework
 *
 */

#ifndef SMFTRANSPORTMANAGERUTIL_H_
#define SMFTRANSPORTMANAGERUTIL_H_

#include <QNetworkReply>
#include <smfglobal.h>
#include <smfserverglobal.h>

// Forward declaration
class QNetworkAccessManager;
class QSettings;

/**
 * The Transport Manager Utility class provides the http/https transaction 
 * methods for the smf framework
 * 
 */
class SmfTransportManagerUtil : public QObject
	{
	Q_OBJECT
	
public:
	/**
	 * Method to get the instance of SmfTransportManagerUtil class
	 * @return The instance of SmfTransportManagerUtil class
	 */
	static SmfTransportManagerUtil* getInstance ( );
	
	/**
	 * Destructor
	 */
	~SmfTransportManagerUtil ( );
	

public:
	/**
	 * Method that does a http GET request. Returns the unique QNetworkReply
	 * instance for this transaction to the plugin manager to trace the 
	 * proper response.
	 * @param aRequest The request formed by the plugin
	 * @param aUrlList The list of accessible Urls for this plugin
	 * @param aSOPCompliant [out] Output parameter indicating Same Origin 
	 * Policy Compliance. Contains true if the request complies to the policy,
	 * else false. If it is false, the network request will not performed
	 * @return The unique QNetworkReply instance for this transaction
	 */
    QNetworkReply* get ( QNetworkRequest &aRequest,
    		const QList<QUrl> &aUrlList,
    		bool &aSOPCompliant );

	/**
	 * Method that does a http POST request. Returns the unique QNetworkReply
	 * instance for this transaction to the plugin manager to trace the 
	 * proper response.
	 * @param aRequest The request formed by the plugin
	 * @param aPostData The data to be posted via http POST request
	 * @param aUrlList The list of accessible Urls for this plugin
	 * @param aSOPCompliant [out] Output parameter indicating Same Origin 
	 * Policy Compliance. Contains true if the request complies to the policy,
	 * else false. If it is false, the network request will not performed
	 * @return The unique QNetworkReply instance for this transaction
	 */
    QNetworkReply* post ( QNetworkRequest &aRequest, 
    		const QByteArray& aPostData,
    		const QList<QUrl> &aUrlList,
    		bool &aSOPCompliant );
    
	/**
	 * Method that does a http HEAD request. Returns the unique QNetworkReply
	 * instance for this transaction to the plugin manager to trace the 
	 * proper response.
	 * @param aRequest The request formed by the plugin
	 * @param aUrlList The list of accessible Urls for this plugin
	 * @param aSOPCompliant [out] Output parameter indicating Same Origin 
	 * Policy Compliance. Contains true if the request complies to the policy,
	 * else false. If it is false, the network request will not performed
	 * @return The unique QNetworkReply instance for this transaction
	 */
    QNetworkReply* head ( QNetworkRequest &aRequest,
    		const QList<QUrl> &aUrlList,
    		bool &aSOPCompliant );
    
	/**
	 * Method that does a http PUT request. Returns the unique QNetworkReply
	 * instance for this transaction to the plugin manager to trace the 
	 * proper response.
	 * @param aRequest The request formed by the plugin
	 * @param aPostData The data to be posted via http PUT request
	 * @param aUrlList The list of accessible Urls for this plugin
	 * @param aSOPCompliant [out] Output parameter indicating Same Origin 
	 * Policy Compliance. Contains true if the request complies to the policy,
	 * else false. If it is false, the network request will not performed
	 * @return The unique QNetworkReply instance for this transaction
	 */
    QNetworkReply* put ( QNetworkRequest &aRequest,
    		const QByteArray& aPostData,
    		const QList<QUrl> &aUrlList,
    		bool &aSOPCompliant );
	
	/**
	 * Method that does a http DELETE request. Returns the unique QNetworkReply
	 * instance for this transaction to the plugin manager to trace the 
	 * proper response.
	 * @param aRequest The request formed by the plugin
	 * @param aUrlList The list of accessible Urls for this plugin
	 * @param aSOPCompliant [out] Output parameter indicating Same Origin 
	 * Policy Compliance. Contains true if the request complies to the policy,
	 * else false. If it is false, the network request will not performed
	 * @return The unique QNetworkReply instance for this transaction
	 */
    QNetworkReply* deleteResource ( QNetworkRequest &aRequest,
    		const QList<QUrl> &aUrlList,
    		bool &aSOPCompliant );
    
	/**
	 * Method that cancels the service request by cancelling the current 
	 * http transaction.
	 * @param aCancelReply The QNetworkReply instance whose transaction 
	 * has to be cancelled
	 * @return Returns true for success, else false 
	 */
	bool cancelRequest ( QNetworkReply *aCancelReply );
	
public slots:
	/*
	 * Method that is called whenever a new network configuration is added to the system.
	 * @param aResult SmfTransportResult
	 */
	void configurationAdded ( const SmfTransportResult &aResult );

	/*
	 * Method that is called when the state of the network configuration changes.
	 * @param aResult SmfTransportResult
	 */
	void configurationChanged ( const SmfTransportResult &aResult );

	/*
	 * Method that is called when a configuration is about to be removed from the system.
	 * The removed configuration is invalid but retains name and identifier.
	 * @param aResult SmfTransportResult
	 */
	void configurationRemoved ( const SmfTransportResult &aResult );
	
private slots:
	/**
	 * Method to indicate http transaction has finished.
	 * @param aNetworkReply The QNetworkReply instance for which the http 
	 * transaction was made
	 */
	void networkReplyFinished ( QNetworkReply *aNetworkReply );
	
	/**
	 * Method called when the QNetworkReply detects an error in processing.
	 * @param aError The QNetworkReply error code 
	 */
	void networkReplyError ( QNetworkReply::NetworkError aError );
	
private:
	/**
	 * Method to convert QNetworkReply Error to the type SmfTransportResult 
	 * QNetworkRequest received before executing the web query.
	 * @param aError The QNetworkReply Error
	 * @param aResult [out] The SmfTransportResult error
	 */
	void convertErrorType( const QNetworkReply::NetworkError &aError,  
			SmfTransportResult &aResult );
	
	/**
	 * Method to deflate a gzipped network response. Once this method is called, 
	 * QNetworkReply internal buffer for holding network response is emptied.
	 * @param aResponse The QByteArray instance holding the gzip encoded data
	 * @param aError Argument indicating error
	 * @return a QByteArray* containing the deflated data. If deflating fails, 
	 * the encoded data itself without deflation is returned.
	 */
	QByteArray* inflateResponse ( QByteArray &aResponse, int& aError );
	
private:
	/**
	 * Constructor with default argument
	 */
	SmfTransportManagerUtil ( );
	
	/**
	 * Copy Constructor
	 * @param aOther The reference object
	 */
	SmfTransportManagerUtil ( const SmfTransportManagerUtil &aOther );
	
private:
	/**
	 * The single instance of SmfTransportManagerUtil
	 */
	static SmfTransportManagerUtil* m_myInstance;
	
	/**
	 * Member variable - QNetworkAccessManager instance
	 */
	QNetworkAccessManager m_networkAccessManager;
	
	/**
	 * Member variable - List of QNetworkReply awaiting response
	 */
	QList<QNetworkReply *> m_activeNetwReplyList;
	
	/**
	 * Member variable - instance of QSettings that stores network 
	 * data usage of Smf
	 */
	QSettings *m_settings;
	};


#endif /* SMFTRANSPORTMANAGERUTIL_H_ */