example/TwitterAuthApp/inc/requestSP.h
author cgandhi
Mon, 11 Oct 2010 21:59:54 +0530
changeset 26 83d6a149c755
permissions -rw-r--r--
Submitting following changes - AuthApps for Last.fm and Twitter added API for checking ServiceAuthorization added for SMFCredMgrClient API added for forcefully removing credential details from SMFCredMgr Extra argument checks in SMfClient APIs APIs for service login and logout from SMFClient Redundant members removed from SmfServerSymbian DSM bug fixes Test Apps included

/**
* Copyright (c) 2010 Sasken Communication Technologies Ltd.
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the "{License}"
* which accompanies  this distribution, and is available
* at the URL "{LicenseUrl}".
*
* Initial Contributors:
* Narasimhulu Kavadapu, Sasken Communication Technologies Ltd - Initial contribution
*
* Contributors:
* Siddhartha Chandra, Sasken Communication Technologies Ltd
* Description:
* class to handle calls to rest Server API's
*/
#ifndef FBREQUEST_H
#define FBREQUEST_H

#include <QObject>
#include <QString>
#include <QDateTime>
#include <QHttp>
#include <QHash>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include "progressbar.h"
#include "authAppConstants.h"
#include "xmlParser.h"

// FORWARD DECLARATIONS
class FBSession;
class FBError;

///////////////////////////////////////////////////////////////////////////////////////////////////
class  FBRequest : public QObject
{
    Q_OBJECT

private:

    /* pointer to the session that owns this request */
    FBSession*  iSession;

    /**
     * The URL which will be contacted to execute the request.
     */
    QString iUrl;

    /**
     * The API method which will be called.
     */
    QString iMethod;

    /**
     * An object used by the user of the request to help identify the meaning of the request.
     */
    void*   iUserInfo;

    /**
     * The dictionary of parameters to pass to the method.
     *
     * These values in the dictionary will be converted to strings using the
     * standard Objective-C object-to-string conversion facilities.
     */
    Dictionary  iParams;

    /**
     * A data parameter.
     *
     * Used for methods such as photos.upload, video.upload, events.create, and
     * events.edit.
     */
    QByteArray  iDataParam;

    /**
      * true if iDataParam holds picture data
      */
    bool        iDataParamPicture;

    /**
     * The timestamp of when the request was sent to the server.
     */
    QDateTime   iTimestamp;
    QHttp       iConnection;
    QByteArray  iResponseText;

    QNetworkAccessManager iNetworkAccessManager;
    progressbar* pbar;

signals: /* the signals ommitted by FBRequest */

    /**
     * Called just before the request is sent to the server.
     */
    void requestLoading();

    /**
     * Called when the server responds and begins to send back data.
     */
    //todo: void requestDidReceiveResponse (FBRequest* aRequest, NSURLResponse* aResponse);

    /**
     * Called when an error prevents the request from completing successfully.
     */
    void requestFailedWithNetworkError( QNetworkReply::NetworkError code );
    void requestFailedWithFacebookError ( const FBError& aError );

    /**
     * Called when a request returns and its response has been parsed into an object.
     *
     * The resulting object may be a dictionary, an array, a string, or a number, depending
     * on thee format of the API response.
     */
    void requestDidLoad ( const QVariant& aResult);
    void LoadLoginPage();

    /**
     * Called when the request was cancelled.
     */
    void requestWasCancelled ();


private slots:
    void networkReplyError ( QNetworkReply::NetworkError code );
    void networkReplyFinished ();
    void networkReplyFinishedNew ();
public: /* class functions */
    /**
     * Creates a new API request for the global session.
     */
    static FBRequest* request();

    /**
     * Creates a new API request for a particular session.
     */
    static FBRequest* requestWithSession (FBSession* aSession);

public: /* instance functions */

    /**
     * Creates a new request paired to a session.
     */
    FBRequest (FBSession* aSession);

    /**
     * Calls a method on the server asynchronously.
     *
     * The delegate will be called for each stage of the loading process.
     */
    void call (const QString& aMethod, const Dictionary& aParams);

    /**
     * Calls a method on the server asynchronously, with a file upload component.
     *
     * The delegate will be called for each stage of the loading process.
     */
    void callWithDataParams (const QString& aMethod, const Dictionary& aParams, const QByteArray& aDataParam, bool aDataParamPicture);

    /**
     * Calls a URL on the server asynchronously.
     *
     * The delegate will be called for each stage of the loading process.
     */
    void post( const QString& aUrl, const Dictionary& aParams);

    /**
     * Stops an active request before the response has returned.
     */
    void cancel();

    /**
      * returns the time stamp of when the request was sent to the server
      */
    const QDateTime& timeStamp() const;

    void connect();
    
    QString generateSig(Dictionary);

private:
    /**
      * Given a string returns its hex coded md5 hash
      */
    QString sha1();

    /**
      * @return true if the current request method is a special method
      */
    bool isSpecialMethod() const;

    /**
      * @return QString a url to use for the given method
      */
    QString urlForMethod (const QString& aMethod) const;

    /**
      * @return the Get Url for the request
      */
    QString generateGetURL() const;

    QString generateCallId() const;

    void generatePostBody(QByteArray& body);

    /**
      * handles the data received from the server
      * @param aResponseData is the data received from the server
      */
    void handleResponseData( const QByteArray& aResponseData );

    /**
      * @param aResponseData is the data received from the server
      * @param aError will get error codes if any error occurs ( this will change in the future )
      * @return a void* pointer, this will change
      */
    QVariant parseXMLResponse ( const QByteArray& aResponseData, FBError& aError);
public:
    TBuf8<1024> tbuf;
    void proxysettings();
public:
    void connect_req(QString uri);
};

#endif // FBREQUEST_H