Files @ 8d9a5fe3d8e3
Branch filter:

Location: libtransport.git/backends/twitter/libtwitcurl/twitcurl.h - annotation

ThUnD3r|Gr33n
add new repo for yowsup

Changed yowsup repo to maintained one
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
1c04886a3686
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
20d8dd690e21
#ifndef _TWITCURL_H_
#define _TWITCURL_H_

#include <string>
#include <sstream>
#include <cstring>
#include <vector>
#include <algorithm>
#include "oauthlib.h"
#include "curl/curl.h"

/* Few common types used by twitCurl */
namespace twitCurlTypes
{
    typedef enum _eTwitCurlApiFormatType
    {
        eTwitCurlApiFormatJson = 0,
        eTwitCurlApiFormatXml,
        eTwitCurlApiFormatMax
    } eTwitCurlApiFormatType;

    typedef enum _eTwitCurlProtocolType
    {
        eTwitCurlProtocolHttps = 0,
        eTwitCurlProtocolHttp,
        eTwitCurlProtocolMax
    } eTwitCurlProtocolType;
};

/* twitCurl class */
class twitCurl
{
public:
    twitCurl();
    ~twitCurl();

    /* Twitter OAuth authorization methods */
    oAuth& getOAuth();
    bool oAuthRequestToken( std::string& authorizeUrl /* out */ );
    bool oAuthAccessToken();
    bool oAuthHandlePIN( const std::string& authorizeUrl /* in */ );

    /* Twitter login APIs, set once and forget */
    std::string& getTwitterUsername();
    std::string& getTwitterPassword();
    void setTwitterUsername( std::string& userName /* in */ );
    void setTwitterPassword( std::string& passWord /* in */ );

    /* Twitter search APIs */
    bool search( std::string& searchQuery /* in */, std::string resultCount = "" /* in */ );

    /* Twitter status APIs */
    bool statusUpdate( std::string& newStatus /* in */, std::string inReplyToStatusId = "" /* in */ );
    bool statusShowById( std::string& statusId /* in */ );
    bool statusDestroyById( std::string& statusId /* in */ );
    bool retweetById( std::string& statusId /* in */ );

    /* Twitter timeline APIs */
    bool timelineHomeGet( std::string sinceId = ""  /* in */ );
    bool timelinePublicGet();
    bool timelineFriendsGet();
    bool timelineUserGet( bool trimUser /* in */, bool includeRetweets /* in */,
                          unsigned int tweetCount /* in */,
                          std::string userInfo = "" /* in */,
                          bool isUserId = false /* in */ );
    bool featuredUsersGet();
    bool mentionsGet( std::string sinceId = "" /* in */ );

    /* Twitter user APIs */
    bool userLookup( std::vector<std::string> &userInfo /* in */,  bool isUserId = false /* in */ );
    bool userGet( std::string& userInfo /* in */, bool isUserId = false /* in */ );
    bool friendsGet( std::string userInfo = "" /* in */, bool isUserId = false /* in */ );
    bool followersGet( std::string userInfo = "" /* in */, bool isUserId = false /* in */ );

    /* Twitter direct message APIs */
    bool directMessageGet( std::string sinceId = "" /* in */ );
    bool directMessageSend( std::string& userInfo /* in */, std::string& dMsg /* in */, bool isUserId = false /* in */ );
    bool directMessageGetSent();
    bool directMessageDestroyById( std::string& dMsgId /* in */ );

    /* Twitter friendships APIs */
    bool friendshipCreate( std::string& userInfo /* in */, bool isUserId = false /* in */ );
    bool friendshipDestroy( std::string& userInfo /* in */, bool isUserId = false /* in */ );
    bool friendshipShow( std::string& userInfo /* in */, bool isUserId = false /* in */ );

    /* Twitter social graphs APIs */
    bool friendsIdsGet( std::string& nextCursor /* in */,
                        std::string& userInfo /* in */, bool isUserId = false /* in */ );
    bool followersIdsGet( std::string& nextCursor /* in */,
                          std::string& userInfo /* in */, bool isUserId = false /* in */ );

    /* Twitter account APIs */
    bool accountRateLimitGet();
    bool accountVerifyCredGet();

    /* Twitter favorites APIs */
    bool favoriteGet();
    bool favoriteCreate( std::string& statusId /* in */ );
    bool favoriteDestroy( std::string& statusId /* in */ );

    /* Twitter block APIs */
    bool blockCreate( std::string& userInfo /* in */ );
    bool blockDestroy( std::string& userInfo /* in */ );
    bool blockListGet( std::string& nextCursor /* in */,
                        bool includeEntities /* in */, bool skipStatus /* in */ );
    bool blockIdsGet( std::string& nextCursor /* in */, bool stringifyIds /* in */ );

    /* Twitter search APIs */
    bool savedSearchGet();
    bool savedSearchCreate( std::string& query /* in */ );
    bool savedSearchShow( std::string& searchId /* in */ );
    bool savedSearchDestroy( std::string& searchId /* in */ );

    /* Twitter trends APIs (JSON) */
    bool trendsGet();
    bool trendsDailyGet();
    bool trendsWeeklyGet();
    bool trendsCurrentGet();
    bool trendsAvailableGet();

    /* cURL APIs */
    bool isCurlInit();
    void getLastWebResponse( std::string& outWebResp /* out */ );
    void getLastCurlError( std::string& outErrResp /* out */);

    /* Internal cURL related methods */
    int saveLastWebResponse( char*& data, size_t size );

    /* cURL proxy APIs */
    std::string& getProxyServerIp();
    std::string& getProxyServerPort();
    std::string& getProxyUserName();
    std::string& getProxyPassword();
    void setProxyServerIp( std::string& proxyServerIp /* in */ );
    void setProxyServerPort( std::string& proxyServerPort /* in */ );
    void setProxyUserName( std::string& proxyUserName /* in */ );
    void setProxyPassword( std::string& proxyPassword /* in */ );
    
    /* Clones this object */
    twitCurl* clone();

private:
    /* cURL data */
    CURL* m_curlHandle;
    char* m_errorBuffer;
    std::string m_callbackData;

    /* cURL flags */
    bool m_curlProxyParamsSet;
    bool m_curlLoginParamsSet;
    bool m_curlCallbackParamsSet;

    /* cURL proxy data */
    std::string m_proxyServerIp;
    std::string m_proxyServerPort;
    std::string m_proxyUserName;
    std::string m_proxyPassword;

    /* Twitter data */
    std::string m_twitterUsername;
    std::string m_twitterPassword;

    /* Twitter API type */
    twitCurlTypes::eTwitCurlApiFormatType m_eApiFormatType;
    twitCurlTypes::eTwitCurlProtocolType m_eProtocolType;

    /* OAuth data */
    oAuth m_oAuth;

    /* Private methods */
    void clearCurlCallbackBuffers();
    void prepareCurlProxy();
    void prepareCurlCallback();
    void prepareCurlUserPass();
    void prepareStandardParams();
    bool performGet( const std::string& getUrl );
    bool performGetInternal( const std::string& getUrl,
                             const std::string& oAuthHttpHeader );
    bool performDelete( const std::string& deleteUrl );
    bool performPost( const std::string& postUrl, std::string dataStr = "" );

    /* Internal cURL related methods */
    static int curlCallback( char* data, size_t size, size_t nmemb, twitCurl* pTwitCurlObj );
};


/* Private functions */
void utilMakeCurlParams( std::string& outStr, std::string& inParam1, std::string& inParam2 );
void utilMakeUrlForUser( std::string& outUrl, const std::string& baseUrl, std::string& userInfo, bool isUserId );

#endif // _TWITCURL_H_