Changeset - 40fb5c2d3f4b
[Not reviewed]
backends/twitter/libtwitcurl/base64.cpp
Show inline comments
 
@@ -120,4 +120,4 @@ std::string base64_decode(std::string const& encoded_string) {
 
  }
 
 
  return ret;
 
}
 
}
 
\ No newline at end of file
backends/twitter/libtwitcurl/base64.h
Show inline comments
 
#include <string>
 
 
std::string base64_encode(unsigned char const* , unsigned int len);
 
std::string base64_decode(std::string const& s);
 
std::string base64_decode(std::string const& s);
 
\ No newline at end of file
backends/twitter/libtwitcurl/oauthlib.cpp
Show inline comments
 
#include "twitcurlurls.h"
 
#include "oauthlib.h"
 
#include "HMAC_SHA1.h"
 
#include "base64.h"
 
@@ -43,16 +44,16 @@ oAuth::~oAuth()
 
*--*/
 
oAuth oAuth::clone()
 
{
 
	oAuth cloneObj;
 
	cloneObj.m_consumerKey = m_consumerKey;
 
	cloneObj.m_consumerSecret = m_consumerSecret;
 
	cloneObj.m_oAuthTokenKey = m_oAuthTokenKey;
 
	cloneObj.m_oAuthTokenSecret = m_oAuthTokenSecret;
 
	cloneObj.m_oAuthPin = m_oAuthPin;
 
	cloneObj.m_nonce = m_nonce;
 
	cloneObj.m_timeStamp = m_timeStamp;
 
	cloneObj.m_oAuthScreenName =  m_oAuthScreenName;
 
	return cloneObj;
 
    oAuth cloneObj;
 
    cloneObj.m_consumerKey = m_consumerKey;
 
    cloneObj.m_consumerSecret = m_consumerSecret;
 
    cloneObj.m_oAuthTokenKey = m_oAuthTokenKey;
 
    cloneObj.m_oAuthTokenSecret = m_oAuthTokenSecret;
 
    cloneObj.m_oAuthPin = m_oAuthPin;
 
    cloneObj.m_nonce = m_nonce;
 
    cloneObj.m_timeStamp = m_timeStamp;
 
    cloneObj.m_oAuthScreenName =  m_oAuthScreenName;
 
    return cloneObj;
 
}
 
 
 
@@ -254,7 +255,7 @@ void oAuth::generateNonceTimeStamp()
 
    char szRand[oAuthLibDefaults::OAUTHLIB_BUFFSIZE];
 
    memset( szTime, 0, oAuthLibDefaults::OAUTHLIB_BUFFSIZE );
 
    memset( szRand, 0, oAuthLibDefaults::OAUTHLIB_BUFFSIZE );
 
    srand( time( NULL ) );
 
    srand( (unsigned int)time( NULL ) );
 
    sprintf( szRand, "%x", rand()%1000 );
 
    sprintf( szTime, "%ld", time( NULL ) );
 
 
@@ -285,35 +286,22 @@ void oAuth::buildOAuthRawDataKeyValPairs( const std::string& rawData,
 
                                          oAuthKeyValuePairs& rawDataKeyValuePairs )
 
{
 
    /* Raw data if it's present. Data should already be urlencoded once */
 
    if( rawData.length() )
 
    if( rawData.empty() )
 
    {
 
        size_t nSep = std::string::npos;
 
        size_t nPos = std::string::npos;
 
        std::string dataKeyVal;
 
        std::string dataKey;
 
        std::string dataVal;
 
 
        /* This raw data part can contain many key value pairs: key1=value1&key2=value2&key3=value3 */
 
        std::string dataPart = rawData;
 
        while( std::string::npos != ( nSep = dataPart.find_first_of("&") ) )
 
        {
 
            /* Extract first key=value pair */
 
            dataKeyVal = dataPart.substr( 0, nSep );
 
 
            /* Split them */
 
            nPos = dataKeyVal.find_first_of( "=" );
 
            if( std::string::npos != nPos )
 
            {
 
                dataKey = dataKeyVal.substr( 0, nPos );
 
                dataVal = dataKeyVal.substr( nPos + 1 );
 
 
                /* Put this key=value pair in map */
 
                rawDataKeyValuePairs[dataKey] = urlencodeData ? urlencode( dataVal ) : dataVal;
 
            }
 
            dataPart = dataPart.substr( nSep + 1 );
 
        }
 
        return;
 
    }
 
 
        /* For the last key=value */
 
    size_t nSep = std::string::npos;
 
    size_t nPos = std::string::npos;
 
    std::string dataKeyVal;
 
    std::string dataKey;
 
    std::string dataVal;
 
 
    /* This raw data part can contain many key value pairs: key1=value1&key2=value2&key3=value3 */
 
    std::string dataPart = rawData;
 
    while( std::string::npos != ( nSep = dataPart.find_first_of("&") ) )
 
    {
 
        /* Extract first key=value pair */
 
        dataKeyVal = dataPart.substr( 0, nSep );
 
 
        /* Split them */
 
@@ -326,6 +314,21 @@ void oAuth::buildOAuthRawDataKeyValPairs( const std::string& rawData,
 
            /* Put this key=value pair in map */
 
            rawDataKeyValuePairs[dataKey] = urlencodeData ? urlencode( dataVal ) : dataVal;
 
        }
 
        dataPart = dataPart.substr( nSep + 1 );
 
    }
 
 
    /* For the last key=value */
 
    dataKeyVal = dataPart.substr( 0, nSep );
 
 
    /* Split them */
 
    nPos = dataKeyVal.find_first_of( "=" );
 
    if( std::string::npos != nPos )
 
    {
 
        dataKey = dataKeyVal.substr( 0, nPos );
 
        dataVal = dataKeyVal.substr( nPos + 1 );
 
 
        /* Put this key=value pair in map */
 
        rawDataKeyValuePairs[dataKey] = urlencodeData ? urlencode( dataVal ) : dataVal;
 
    }
 
}
 
 
@@ -390,7 +393,7 @@ bool oAuth::buildOAuthTokenKeyValuePairs( const bool includeOAuthVerifierPin,
 
    /* Version */
 
    keyValueMap[oAuthLibDefaults::OAUTHLIB_VERSION_KEY] = std::string( "1.0" );
 
 
    return ( keyValueMap.size() ) ? true : false;
 
    return !keyValueMap.empty();
 
}
 
 
/*++
 
@@ -417,7 +420,7 @@ bool oAuth::getSignature( const eOAuthHttpRequestType eType,
 
    std::string sigBase;
 
 
    /* Initially empty signature */
 
    oAuthSignature.assign( "" );
 
    oAuthSignature = "";
 
 
    /* Build a string using key-value pairs */
 
    paramsSeperator = "&";
 
@@ -481,7 +484,7 @@ bool oAuth::getSignature( const eOAuthHttpRequestType eType,
 
    /* Do an url encode */
 
    oAuthSignature = urlencode( base64Str );
 
 
    return ( oAuthSignature.length() ) ? true : false;
 
    return !oAuthSignature.empty();
 
}
 
 
/*++
 
@@ -511,7 +514,7 @@ bool oAuth::getOAuthHeader( const eOAuthHttpRequestType eType,
 
    std::string pureUrl( rawUrl );
 
 
    /* Clear header string initially */
 
    oAuthHttpHeader.assign( "" );
 
    oAuthHttpHeader = "";
 
    rawKeyValuePairs.clear();
 
 
    /* If URL itself contains ?key=value, then extract and put them in map */
 
@@ -551,7 +554,7 @@ bool oAuth::getOAuthHeader( const eOAuthHttpRequestType eType,
 
    oAuthHttpHeader.assign( oAuthLibDefaults::OAUTHLIB_AUTHHEADER_STRING );
 
    oAuthHttpHeader.append( rawParams );
 
 
    return ( oAuthHttpHeader.length() ) ? true : false;
 
    return !oAuthHttpHeader.empty();
 
}
 
 
/*++
 
@@ -571,48 +574,50 @@ bool oAuth::getStringFromOAuthKeyValuePairs( const oAuthKeyValuePairs& rawParamM
 
                                             std::string& rawParams,
 
                                             const std::string& paramsSeperator )
 
{
 
    rawParams.assign( "" );
 
    if( rawParamMap.size() )
 
    rawParams = "";
 
    if( rawParamMap.empty() )
 
    {
 
        oAuthKeyValueList keyValueList;
 
        std::string dummyStr;
 
        return false;
 
    }
 
 
    oAuthKeyValueList keyValueList;
 
    std::string dummyStr;
 
 
        /* Push key-value pairs to a list of strings */
 
        keyValueList.clear();
 
        oAuthKeyValuePairs::const_iterator itMap = rawParamMap.begin();
 
        for( ; itMap != rawParamMap.end(); itMap++ )
 
    /* Push key-value pairs to a list of strings */
 
    keyValueList.clear();
 
    oAuthKeyValuePairs::const_iterator itMap = rawParamMap.begin();
 
    for( ; itMap != rawParamMap.end(); itMap++ )
 
    {
 
        dummyStr.assign( itMap->first );
 
        dummyStr.append( "=" );
 
        if( paramsSeperator == "," )
 
        {
 
            dummyStr.append( "\"" );
 
        }
 
        dummyStr.append( itMap->second );
 
        if( paramsSeperator == "," )
 
        {
 
            dummyStr.assign( itMap->first );
 
            dummyStr.append( "=" );
 
            if( paramsSeperator == "," )
 
            {
 
                dummyStr.append( "\"" );
 
            }
 
            dummyStr.append( itMap->second );
 
            if( paramsSeperator == "," )
 
            {
 
                dummyStr.append( "\"" );
 
            }
 
            keyValueList.push_back( dummyStr );
 
            dummyStr.append( "\"" );
 
        }
 
        keyValueList.push_back( dummyStr );
 
    }
 
 
        /* Sort key-value pairs based on key name */
 
        keyValueList.sort();
 
    /* Sort key-value pairs based on key name */
 
    keyValueList.sort();
 
 
        /* Now, form a string */
 
        dummyStr.assign( "" );
 
        oAuthKeyValueList::iterator itKeyValue = keyValueList.begin();
 
        for( ; itKeyValue != keyValueList.end(); itKeyValue++ )
 
    /* Now, form a string */
 
    dummyStr = "";
 
    oAuthKeyValueList::iterator itKeyValue = keyValueList.begin();
 
    for( ; itKeyValue != keyValueList.end(); itKeyValue++ )
 
    {
 
        if( dummyStr.length() )
 
        {
 
            if( dummyStr.length() )
 
            {
 
                dummyStr.append( paramsSeperator );
 
            }
 
            dummyStr.append( itKeyValue->c_str() );
 
        }
 
        rawParams.assign( dummyStr );
 
            dummyStr.append( paramsSeperator );
 
         }
 
         dummyStr.append( itKeyValue->c_str() );
 
    }
 
    return ( rawParams.length() ) ? true : false;
 
    rawParams = dummyStr;
 
    return !rawParams.empty();
 
}
 
 
/*++
 
@@ -628,45 +633,49 @@ bool oAuth::getStringFromOAuthKeyValuePairs( const oAuthKeyValuePairs& rawParamM
 
*--*/
 
bool oAuth::extractOAuthTokenKeySecret( const std::string& requestTokenResponse )
 
{
 
    if( requestTokenResponse.length() )
 
    if( requestTokenResponse.empty() )
 
    {
 
        size_t nPos = std::string::npos;
 
        std::string strDummy;
 
        return false;
 
    }
 
 
        /* Get oauth_token key */
 
        nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_TOKEN_KEY );
 
        if( std::string::npos != nPos )
 
        {
 
            nPos = nPos + oAuthLibDefaults::OAUTHLIB_TOKEN_KEY.length() + strlen( "=" );
 
            strDummy = requestTokenResponse.substr( nPos );
 
            nPos = strDummy.find( "&" );
 
            if( std::string::npos != nPos )
 
            {
 
                m_oAuthTokenKey = strDummy.substr( 0, nPos );
 
            }
 
        }
 
    size_t nPos = std::string::npos;
 
    std::string strDummy;
 
 
        /* Get oauth_token_secret */
 
        nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_TOKENSECRET_KEY );
 
    /* Get oauth_token key */
 
    nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_TOKEN_KEY );
 
    if( std::string::npos != nPos )
 
    {
 
        nPos = nPos + oAuthLibDefaults::OAUTHLIB_TOKEN_KEY.length() + strlen( "=" );
 
        strDummy = requestTokenResponse.substr( nPos );
 
        nPos = strDummy.find( "&" );
 
        if( std::string::npos != nPos )
 
        {
 
            nPos = nPos + oAuthLibDefaults::OAUTHLIB_TOKENSECRET_KEY.length() + strlen( "=" );
 
            strDummy = requestTokenResponse.substr( nPos );
 
            nPos = strDummy.find( "&" );
 
            if( std::string::npos != nPos )
 
            {
 
                m_oAuthTokenSecret = strDummy.substr( 0, nPos );
 
            }
 
            m_oAuthTokenKey = strDummy.substr( 0, nPos );
 
        }
 
    }
 
 
        /* Get screen_name */
 
        nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_SCREENNAME_KEY );
 
    /* Get oauth_token_secret */
 
    nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_TOKENSECRET_KEY );
 
    if( std::string::npos != nPos )
 
    {
 
        nPos = nPos + oAuthLibDefaults::OAUTHLIB_TOKENSECRET_KEY.length() + strlen( "=" );
 
        strDummy = requestTokenResponse.substr( nPos );
 
        nPos = strDummy.find( "&" );
 
        if( std::string::npos != nPos )
 
        {
 
            nPos = nPos + oAuthLibDefaults::OAUTHLIB_SCREENNAME_KEY.length() + strlen( "=" );
 
            strDummy = requestTokenResponse.substr( nPos );
 
            m_oAuthScreenName = strDummy;
 
            m_oAuthTokenSecret = strDummy.substr( 0, nPos );
 
        }
 
    }
 
 
    /* Get screen_name */
 
    nPos = requestTokenResponse.find( oAuthLibDefaults::OAUTHLIB_SCREENNAME_KEY );
 
    if( std::string::npos != nPos )
 
    {
 
        nPos = nPos + oAuthLibDefaults::OAUTHLIB_SCREENNAME_KEY.length() + strlen( "=" );
 
        strDummy = requestTokenResponse.substr( nPos );
 
        m_oAuthScreenName = strDummy;
 
    }
 
 
    return true;
 
}
 
backends/twitter/libtwitcurl/oauthlib.h
Show inline comments
 
@@ -10,42 +10,6 @@
 
#include <list>
 
#include <map>
 
 
namespace oAuthLibDefaults
 
{
 
    /* Constants */
 
    const int OAUTHLIB_BUFFSIZE = 1024;
 
    const int OAUTHLIB_BUFFSIZE_LARGE = 1024;
 
    const std::string OAUTHLIB_CONSUMERKEY_KEY = "oauth_consumer_key";
 
    const std::string OAUTHLIB_CALLBACK_KEY = "oauth_callback";
 
    const std::string OAUTHLIB_VERSION_KEY = "oauth_version";
 
    const std::string OAUTHLIB_SIGNATUREMETHOD_KEY = "oauth_signature_method";
 
    const std::string OAUTHLIB_SIGNATURE_KEY = "oauth_signature";
 
    const std::string OAUTHLIB_TIMESTAMP_KEY = "oauth_timestamp";
 
    const std::string OAUTHLIB_NONCE_KEY = "oauth_nonce";
 
    const std::string OAUTHLIB_TOKEN_KEY = "oauth_token";
 
    const std::string OAUTHLIB_TOKENSECRET_KEY = "oauth_token_secret";
 
    const std::string OAUTHLIB_VERIFIER_KEY = "oauth_verifier";
 
    const std::string OAUTHLIB_SCREENNAME_KEY = "screen_name";
 
    const std::string OAUTHLIB_AUTHENTICITY_TOKEN_KEY = "authenticity_token";
 
    const std::string OAUTHLIB_SESSIONUSERNAME_KEY = "session[username_or_email]";
 
    const std::string OAUTHLIB_SESSIONPASSWORD_KEY = "session[password]";
 
    const std::string OAUTHLIB_AUTHENTICITY_TOKEN_TWITTER_RESP_KEY = "authenticity_token\" type=\"hidden\" value=\"";
 
    const std::string OAUTHLIB_TOKEN_TWITTER_RESP_KEY = "oauth_token\" type=\"hidden\" value=\"";
 
    const std::string OAUTHLIB_PIN_TWITTER_RESP_KEY = "code-desc\"><code>";
 
    const std::string OAUTHLIB_TOKEN_END_TAG_TWITTER_RESP = "\" />";
 
    const std::string OAUTHLIB_PIN_END_TAG_TWITTER_RESP = "</code>";
 
 
    const std::string OAUTHLIB_AUTHHEADER_STRING = "Authorization: OAuth ";
 
};
 
 
namespace oAuthTwitterApiUrls
 
{
 
    /* Twitter OAuth API URLs */
 
    const std::string OAUTHLIB_TWITTER_REQUEST_TOKEN_URL = "api.twitter.com/oauth/request_token";
 
    const std::string OAUTHLIB_TWITTER_AUTHORIZE_URL = "api.twitter.com/oauth/authorize?oauth_token=";
 
    const std::string OAUTHLIB_TWITTER_ACCESS_TOKEN_URL = "api.twitter.com/oauth/access_token";
 
};
 
 
typedef enum _eOAuthHttpRequestType
 
{
 
    eOAuthHttpInvalid = 0,
backends/twitter/libtwitcurl/twitcurl.cpp
Show inline comments
 
#define NOMINMAX
 
#include <memory.h>
 
#include "twitcurlurls.h"
 
#include "twitcurl.h"
 
#include "urlencode.h"
 
 
static int myDebugCallback(CURL *,
 
                    curl_infotype type,
 
                    char *data,
 
                    size_t size,
 
                    void *handle)
 
{
 
	std::cerr << std::string(data, size);
 
  return 0;
 
};
 
 
/*++
 
* @method: twitCurl::twitCurl
 
*
 
@@ -27,9 +19,12 @@ m_curlHandle( NULL ),
 
m_curlProxyParamsSet( false ),
 
m_curlLoginParamsSet( false ),
 
m_curlCallbackParamsSet( false ),
 
m_eApiFormatType( twitCurlTypes::eTwitCurlApiFormatXml ),
 
m_eApiFormatType( twitCurlTypes::eTwitCurlApiFormatJson ),
 
m_eProtocolType( twitCurlTypes::eTwitCurlProtocolHttps )
 
{
 
    /* Alloc memory for cURL error responses */
 
    m_errorBuffer = (char*)malloc( twitCurlDefaults::TWITCURL_DEFAULT_BUFFSIZE );
 
 
    /* Clear callback buffers */
 
    clearCurlCallbackBuffers();
 
 
@@ -40,9 +35,7 @@ m_eProtocolType( twitCurlTypes::eTwitCurlProtocolHttps )
 
        std::string dummyStr;
 
        getLastCurlError( dummyStr );
 
    }
 
    curl_easy_setopt(m_curlHandle, CURLOPT_VERBOSE, 1);
 
    curl_easy_setopt(m_curlHandle, CURLOPT_FOLLOWLOCATION, 1);
 
	curl_easy_setopt(m_curlHandle, CURLOPT_DEBUGFUNCTION, myDebugCallback);
 
    curl_easy_setopt(m_curlHandle, CURLOPT_SSL_VERIFYPEER, 0);
 
}
 
 
/*++
 
@@ -63,6 +56,11 @@ twitCurl::~twitCurl()
 
        curl_easy_cleanup( m_curlHandle );
 
        m_curlHandle = NULL;
 
    }
 
    if( m_errorBuffer )
 
    {
 
        free( m_errorBuffer );
 
        m_errorBuffer = NULL;
 
    }
 
}
 
 
/*++
 
@@ -77,57 +75,22 @@ twitCurl::~twitCurl()
 
*--*/
 
twitCurl* twitCurl::clone()
 
{
 
	twitCurl *cloneObj = new twitCurl();
 
 
	/* cURL proxy data */
 
	cloneObj->setProxyServerIp(m_proxyServerIp);
 
	cloneObj->setProxyServerPort(m_proxyServerPort);
 
	cloneObj->setProxyUserName(m_proxyUserName);
 
	cloneObj->setProxyPassword(m_proxyPassword);
 
    twitCurl *cloneObj = new twitCurl();
 
 
	/* Twitter data */
 
	cloneObj->setTwitterUsername(m_twitterUsername);
 
	cloneObj->setTwitterPassword(m_twitterPassword);
 
    /* cURL proxy data */
 
    cloneObj->setProxyServerIp(m_proxyServerIp);
 
    cloneObj->setProxyServerPort(m_proxyServerPort);
 
    cloneObj->setProxyUserName(m_proxyUserName);
 
    cloneObj->setProxyPassword(m_proxyPassword);
 
 
	/* Twitter API type */
 
	cloneObj->setTwitterApiType(m_eApiFormatType);
 
    /* Twitter data */
 
    cloneObj->setTwitterUsername(m_twitterUsername);
 
    cloneObj->setTwitterPassword(m_twitterPassword);
 
 
	/* OAuth data */
 
	cloneObj->m_oAuth = m_oAuth.clone();
 
    /* OAuth data */
 
    cloneObj->m_oAuth = m_oAuth.clone();
 
 
	return cloneObj;
 
}
 
 
/*++
 
* @method: twitCurl::setTwitterApiType
 
*
 
* @description: method to set API type
 
*
 
* @input: none
 
*
 
* @output: none
 
*
 
*--*/
 
void twitCurl::setTwitterApiType( twitCurlTypes::eTwitCurlApiFormatType eType )
 
{
 
    m_eApiFormatType = ( eType < twitCurlTypes::eTwitCurlApiFormatMax ) ?
 
                        eType : twitCurlTypes::eTwitCurlApiFormatXml;
 
}
 
 
/*++
 
* @method: twitCurl::setTwitterProcotolType
 
*
 
* @description: method to set protocol
 
*
 
* @input: none
 
*
 
* @output: none
 
*
 
*--*/
 
void twitCurl::setTwitterProcotolType( twitCurlTypes::eTwitCurlProtocolType eType )
 
{
 
    m_eProtocolType = ( eType < twitCurlTypes::eTwitCurlProtocolMax ) ?
 
                        eType : twitCurlTypes::eTwitCurlProtocolHttp;
 
    return cloneObj;
 
}
 
 
/*++
 
@@ -371,6 +334,7 @@ void twitCurl::setProxyPassword( std::string& proxyPassword )
 
* @description: method to return tweets that match a specified query.
 
*
 
* @input: searchQuery - search query in string format
 
*         resultCount - optional search result count
 
*
 
* @output: true if GET is success, otherwise false. This does not check http
 
*          response by twitter. Use getLastWebResponse() for that.
 
@@ -378,15 +342,22 @@ void twitCurl::setProxyPassword( std::string& proxyPassword )
 
* @note: Only ATOM and JSON format supported.
 
*
 
*--*/
 
bool twitCurl::search( std::string& searchQuery )
 
bool twitCurl::search( std::string& searchQuery, std::string resultCount )
 
{
 
    /* Prepare URL */
 
    std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                           twitterDefaults::TWITCURL_SEARCH_URL +
 
                           twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[twitCurlTypes::eTwitCurlApiFormatJson] +
 
                           twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType] +
 
                           twitCurlDefaults::TWITCURL_URL_SEP_QUES + twitCurlDefaults::TWITCURL_SEARCHQUERYSTRING +
 
                           searchQuery;
 
 
    /* Add number of results count if provided */
 
    if( resultCount.size() )
 
    {
 
        buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_AMP +
 
                    twitCurlDefaults::TWITCURL_COUNT + urlencode( resultCount );
 
    }
 
 
    /* Perform GET */
 
    return performGet( buildUrl );
 
}
 
@@ -396,27 +367,36 @@ bool twitCurl::search( std::string& searchQuery )
 
*
 
* @description: method to update new status message in twitter profile
 
*
 
* @input: newStatus
 
* @input: newStatus - status message text
 
*         inReplyToStatusId - optional status id to we're replying to
 
*
 
* @output: true if POST is success, otherwise false. This does not check http
 
*          response by twitter. Use getLastWebResponse() for that.
 
*
 
*--*/
 
bool twitCurl::statusUpdate( std::string& newStatus )
 
bool twitCurl::statusUpdate( std::string& newStatus, std::string inReplyToStatusId )
 
{
 
    bool retVal = false;
 
    if( newStatus.length() )
 
    if( newStatus.empty() )
 
    {
 
        /* Prepare new status message */
 
        std::string newStatusMsg = twitCurlDefaults::TWITCURL_STATUSSTRING + urlencode( newStatus );
 
        return false;
 
    }
 
 
        /* Perform POST */
 
        retVal = performPost( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                              twitterDefaults::TWITCURL_STATUSUPDATE_URL +
 
                              twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                              newStatusMsg );
 
    /* Prepare new status message */
 
    std::string newStatusMsg = twitCurlDefaults::TWITCURL_STATUSSTRING + urlencode( newStatus );
 
 
    /* Append status id to which we're replying to */
 
    if( inReplyToStatusId.size() )
 
    {
 
        newStatusMsg += twitCurlDefaults::TWITCURL_URL_SEP_AMP +
 
                        twitCurlDefaults::TWITCURL_INREPLYTOSTATUSID +
 
                        urlencode( inReplyToStatusId );
 
    }
 
    return retVal;
 
 
    /* Perform POST */
 
    return  performPost( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                         twitterDefaults::TWITCURL_STATUSUPDATE_URL +
 
                         twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                         newStatusMsg );
 
}
 
 
/*++
 
@@ -432,18 +412,18 @@ bool twitCurl::statusUpdate( std::string& newStatus )
 
*--*/
 
bool twitCurl::statusShowById( std::string& statusId )
 
{
 
    bool retVal = false;
 
    if( statusId.length() )
 
    if( statusId.empty() )
 
    {
 
        /* Prepare URL */
 
        std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                               twitterDefaults::TWITCURL_STATUSSHOW_URL + statusId +
 
                               twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
 
        /* Perform GET */
 
        retVal = performGet( buildUrl );
 
        return false;
 
    }
 
    return retVal;
 
 
    /* Prepare URL */
 
    std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                           twitterDefaults::TWITCURL_STATUSSHOW_URL + statusId +
 
                           twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
 
    /* Perform GET */
 
    return performGet( buildUrl );
 
}
 
 
/*++
 
@@ -459,18 +439,18 @@ bool twitCurl::statusShowById( std::string& statusId )
 
*--*/
 
bool twitCurl::statusDestroyById( std::string& statusId )
 
{
 
    bool retVal = false;
 
    if( statusId.length() )
 
    if( statusId.empty() )
 
    {
 
        /* Prepare URL */
 
        std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                               twitterDefaults::TWITCURL_STATUDESTROY_URL + statusId +
 
                               twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
 
        /* Perform DELETE */
 
        retVal = performDelete( buildUrl );
 
        return false;
 
    }
 
    return retVal;
 
 
    /* Prepare URL */
 
    std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                           twitterDefaults::TWITCURL_STATUDESTROY_URL + statusId +
 
                           twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
 
    /* Perform DELETE */
 
    return performDelete( buildUrl );
 
}
 
 
/*++
 
@@ -486,22 +466,22 @@ bool twitCurl::statusDestroyById( std::string& statusId )
 
*--*/
 
bool twitCurl::retweetById( std::string& statusId )
 
{
 
	bool retVal = false;
 
	if( statusId.length() )
 
	{
 
		/* Prepare URL */
 
		std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
								twitterDefaults::TWITCURL_RETWEET_URL + statusId +
 
								twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
    if( statusId.empty() )
 
    {
 
        return false;
 
    }
 
 
    /* Prepare URL */
 
    std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                           twitterDefaults::TWITCURL_RETWEET_URL + statusId +
 
                           twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
 
		/* Send some dummy data in POST */
 
		std::string dummyData = twitCurlDefaults::TWITCURL_TEXTSTRING +
 
				                urlencode( std::string( "dummy" ) );
 
    /* Send some dummy data in POST */
 
    std::string dummyData = twitCurlDefaults::TWITCURL_TEXTSTRING +
 
                            urlencode( std::string( "dummy" ) );
 
 
		/* Perform Retweet */
 
		retVal = performPost( buildUrl, dummyData );
 
	}
 
	return retVal;
 
    /* Perform Retweet */
 
    return performPost( buildUrl, dummyData );
 
}
 
 
/*++
 
@@ -518,12 +498,13 @@ bool twitCurl::retweetById( std::string& statusId )
 
bool twitCurl::timelineHomeGet( std::string sinceId )
 
{
 
    std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
							twitterDefaults::TWITCURL_HOME_TIMELINE_URL +
 
							twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
                           twitterDefaults::TWITCURL_HOME_TIMELINE_URL +
 
                           twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
    if( sinceId.length() )
 
    {
 
        buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + twitCurlDefaults::TWITCURL_SINCEID + sinceId;
 
    }
 
 
    /* Perform GET */
 
    return performGet( buildUrl );
 
}
 
@@ -605,6 +586,7 @@ bool twitCurl::mentionsGet( std::string sinceId )
 
    {
 
        buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + twitCurlDefaults::TWITCURL_SINCEID + sinceId;
 
    }
 
 
    /* Perform GET */
 
    return performGet( buildUrl );
 
}
 
@@ -623,7 +605,8 @@ bool twitCurl::mentionsGet( std::string sinceId )
 
*          response by twitter. Use getLastWebResponse() for that.
 
*
 
*--*/
 
bool twitCurl::timelineUserGet( bool trimUser, bool includeRetweets, unsigned int tweetCount, std::string userInfo, bool isUserId )
 
bool twitCurl::timelineUserGet( bool trimUser, bool includeRetweets, unsigned int tweetCount,
 
                                std::string userInfo, bool isUserId )
 
{
 
    /* Prepare URL */
 
    std::string buildUrl;
 
@@ -633,7 +616,7 @@ bool twitCurl::timelineUserGet( bool trimUser, bool includeRetweets, unsigned in
 
                        twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                        userInfo, isUserId );
 
 
    if( !userInfo.length() )
 
    if( userInfo.empty() )
 
    {
 
        buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES;
 
    }
 
@@ -678,26 +661,27 @@ bool twitCurl::timelineUserGet( bool trimUser, bool includeRetweets, unsigned in
 
*--*/
 
bool twitCurl::userLookup( std::vector<std::string> &userInfo, bool isUserId )
 
{
 
    bool retVal = false;
 
    
 
    if( userInfo.size() )
 
    if( userInfo.empty() )
 
    {
 
		std::string userIds = "";
 
		std::string sep = "";
 
		for(int i=0 ; i<std::min(100U,(unsigned int) userInfo.size()) ; i++, sep = ",")
 
			userIds += sep + userInfo[i];
 
        return false;
 
    }
 
 
		userIds = (isUserId?twitCurlDefaults::TWITCURL_USERID : twitCurlDefaults::TWITCURL_SCREENNAME) + urlencode(userIds);
 
		
 
		std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + 
 
								twitterDefaults::TWITCURL_LOOKUPUSERS_URL + 
 
								twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
        
 
		/* Perform POST */
 
        retVal = performPost( buildUrl, userIds);
 
    std::string userIds = "";
 
    std::string sep = "";
 
    for( unsigned int i = 0 ; i < std::min((size_t)100, userInfo.size()); i++, sep = "," )
 
    {
 
        userIds += sep + userInfo[i];
 
    }
 
    
 
    return retVal;
 
 
    userIds = ( isUserId ? twitCurlDefaults::TWITCURL_USERID : twitCurlDefaults::TWITCURL_SCREENNAME ) +
 
              urlencode( userIds );
 
 
    std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + 
 
                           twitterDefaults::TWITCURL_LOOKUPUSERS_URL + 
 
                           twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
 
    /* Perform POST */
 
    return performPost( buildUrl, userIds);
 
}
 
 
/*++
 
@@ -714,20 +698,20 @@ bool twitCurl::userLookup( std::vector<std::string> &userInfo, bool isUserId )
 
*--*/
 
bool twitCurl::userGet( std::string& userInfo, bool isUserId )
 
{
 
    bool retVal = false;
 
    if( userInfo.length() )
 
    if( userInfo.empty() )
 
    {
 
        /* Set URL */
 
        std::string buildUrl;
 
        utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                            twitterDefaults::TWITCURL_SHOWUSERS_URL +
 
                            twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                            userInfo, isUserId );
 
 
        /* Perform GET */
 
        retVal = performGet( buildUrl );
 
        return false;
 
    }
 
    return retVal;
 
 
    /* Set URL */
 
    std::string buildUrl;
 
    utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                        twitterDefaults::TWITCURL_SHOWUSERS_URL +
 
                        twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                        userInfo, isUserId );
 
 
    /* Perform GET */
 
    return performGet( buildUrl );
 
}
 
 
/*++
 
@@ -793,14 +777,14 @@ bool twitCurl::followersGet( std::string userInfo, bool isUserId )
 
*--*/
 
bool twitCurl::directMessageGet( std::string sinceId )
 
{
 
	std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] + 
 
							twitterDefaults::TWITCURL_DIRECTMESSAGES_URL + 
 
							twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
	
 
	if(sinceId.length())
 
	{
 
      	buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + twitCurlDefaults::TWITCURL_SINCEID + sinceId;
 
	}
 
    std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                           twitterDefaults::TWITCURL_DIRECTMESSAGES_URL +
 
                           twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
 
    if( sinceId.length() )
 
    {
 
        buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + twitCurlDefaults::TWITCURL_SINCEID + sinceId;
 
    }
 
 
    /* Perform GET */
 
    return performGet( buildUrl );
 
@@ -821,23 +805,23 @@ bool twitCurl::directMessageGet( std::string sinceId )
 
*--*/
 
bool twitCurl::directMessageSend( std::string& userInfo, std::string& dMsg, bool isUserId )
 
{
 
    bool retVal = false;
 
    if( userInfo.length() && dMsg.length() )
 
    if( userInfo.empty() || dMsg.empty() )
 
    {
 
        /* Prepare new direct message */
 
        std::string newDm = twitCurlDefaults::TWITCURL_TEXTSTRING + urlencode( dMsg );
 
        return false;
 
    }
 
 
        /* Prepare URL */
 
        std::string buildUrl;
 
        utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                            twitterDefaults::TWITCURL_DIRECTMESSAGENEW_URL +
 
                            twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                            userInfo, isUserId );
 
    /* Prepare new direct message */
 
    std::string newDm = twitCurlDefaults::TWITCURL_TEXTSTRING + urlencode( dMsg );
 
 
        /* Perform POST */
 
        retVal = performPost( buildUrl, newDm );
 
    }
 
    return retVal;
 
    /* Prepare URL */
 
    std::string buildUrl;
 
    utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                        twitterDefaults::TWITCURL_DIRECTMESSAGENEW_URL +
 
                        twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                        userInfo, isUserId );
 
 
    /* Perform POST */
 
    return performPost( buildUrl, newDm );
 
}
 
 
/*++
 
@@ -872,18 +856,18 @@ bool twitCurl::directMessageGetSent()
 
*--*/
 
bool twitCurl::directMessageDestroyById( std::string& dMsgId )
 
{
 
    bool retVal = false;
 
    if( dMsgId.length() )
 
    if( dMsgId.empty() )
 
    {
 
        /* Prepare URL */
 
        std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                               twitterDefaults::TWITCURL_DIRECTMESSAGEDESTROY_URL + dMsgId +
 
                               twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
 
        /* Perform DELETE */
 
        retVal = performDelete( buildUrl );
 
        return false;
 
    }
 
    return retVal;
 
 
    /* Prepare URL */
 
    std::string buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                           twitterDefaults::TWITCURL_DIRECTMESSAGEDESTROY_URL + dMsgId +
 
                           twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
 
    /* Perform DELETE */
 
    return performDelete( buildUrl );
 
}
 
 
/*++
 
@@ -900,24 +884,24 @@ bool twitCurl::directMessageDestroyById( std::string& dMsgId )
 
*--*/
 
bool twitCurl::friendshipCreate( std::string& userInfo, bool isUserId )
 
{
 
    bool retVal = false;
 
    if( userInfo.length() )
 
    if( userInfo.empty() )
 
    {
 
        /* Prepare URL */
 
        std::string buildUrl;
 
        utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                            twitterDefaults::TWITCURL_FRIENDSHIPSCREATE_URL +
 
                            twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                            userInfo, isUserId );
 
        return false;
 
    }
 
 
        /* Send some dummy data in POST */
 
        std::string dummyData = twitCurlDefaults::TWITCURL_TEXTSTRING +
 
                                urlencode( std::string( "dummy" ) );
 
    /* Prepare URL */
 
    std::string buildUrl;
 
    utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                        twitterDefaults::TWITCURL_FRIENDSHIPSCREATE_URL +
 
                        twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                        userInfo, isUserId );
 
 
        /* Perform POST */
 
        retVal = performPost( buildUrl, dummyData );
 
    }
 
    return retVal;
 
    /* Send some dummy data in POST */
 
    std::string dummyData = twitCurlDefaults::TWITCURL_TEXTSTRING +
 
                            urlencode( std::string( "dummy" ) );
 
 
    /* Perform POST */
 
    return performPost( buildUrl, dummyData );
 
}
 
 
/*++
 
@@ -934,20 +918,20 @@ bool twitCurl::friendshipCreate( std::string& userInfo, bool isUserId )
 
*--*/
 
bool twitCurl::friendshipDestroy( std::string& userInfo, bool isUserId )
 
{
 
    bool retVal = false;
 
    if( userInfo.length() )
 
    if( userInfo.empty() )
 
    {
 
        /* Prepare URL */
 
        std::string buildUrl;
 
        utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                            twitterDefaults::TWITCURL_FRIENDSHIPSDESTROY_URL +
 
                            twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                            userInfo, isUserId );
 
 
        /* Perform DELETE */
 
        retVal = performDelete( buildUrl );
 
        return false;
 
    }
 
    return retVal;
 
 
    /* Prepare URL */
 
    std::string buildUrl;
 
    utilMakeUrlForUser( buildUrl, twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                        twitterDefaults::TWITCURL_FRIENDSHIPSDESTROY_URL +
 
                        twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                        userInfo, isUserId );
 
 
    /* Perform DELETE */
 
    return performDelete( buildUrl );
 
}
 
 
/*++
 
@@ -994,12 +978,14 @@ bool twitCurl::friendshipShow( std::string& userInfo, bool isUserId )
 
*
 
* @input: userInfo - user id or screen name of a user
 
*         isUserId - true if userInfo contains a user id instead of screen name
 
*         nextCursor - next cursor string returned from a previous call
 
*                      to this API, otherwise an empty string
 
*
 
* @output: true if GET is success, otherwise false. This does not check http
 
*          response by twitter. Use getLastWebResponse() for that.
 
*
 
*--*/
 
bool twitCurl::friendsIdsGet( std::string& userInfo, bool isUserId )
 
bool twitCurl::friendsIdsGet( std::string& nextCursor, std::string& userInfo, bool isUserId )
 
{
 
    /* Prepare URL */
 
    std::string buildUrl;
 
@@ -1008,6 +994,13 @@ bool twitCurl::friendsIdsGet( std::string& userInfo, bool isUserId )
 
                        twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                        userInfo, isUserId );
 
 
    if( buildUrl.length() && nextCursor.length() )
 
    {
 
        buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_AMP +
 
                    twitCurlDefaults::TWITCURL_NEXT_CURSOR +
 
                    nextCursor;
 
    }
 
 
    /* Perform GET */
 
    return performGet( buildUrl );
 
}
 
@@ -1019,12 +1012,14 @@ bool twitCurl::friendsIdsGet( std::string& userInfo, bool isUserId )
 
*
 
* @input: userInfo - user id or screen name of a user
 
*         isUserId - true if userInfo contains a user id instead of screen name
 
*         nextCursor - next cursor string returned from a previous call
 
*                      to this API, otherwise an empty string
 
*
 
* @output: true if GET is success, otherwise false. This does not check http
 
*          response by twitter. Use getLastWebResponse() for that.
 
*
 
*--*/
 
bool twitCurl::followersIdsGet( std::string& userInfo, bool isUserId )
 
bool twitCurl::followersIdsGet( std::string& nextCursor, std::string& userInfo, bool isUserId )
 
{
 
    /* Prepare URL */
 
    std::string buildUrl;
 
@@ -1033,6 +1028,13 @@ bool twitCurl::followersIdsGet( std::string& userInfo, bool isUserId )
 
                        twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType],
 
                        userInfo, isUserId );
 
 
    if( buildUrl.length() && nextCursor.length() )
 
    {
 
        buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_AMP +
 
                    twitCurlDefaults::TWITCURL_NEXT_CURSOR +
 
                    nextCursor;
 
    }
 
 
    /* Perform GET */
 
    return performGet( buildUrl );
 
}
 
@@ -1147,7 +1149,7 @@ bool twitCurl::favoriteDestroy( std::string& statusId )
 
*
 
* @description: method to block a user
 
*
 
* @input: userInfo - user id or screen name
 
* @input: userInfo - user id or screen name who needs to be blocked
 
*
 
* @output: true if POST is success, otherwise false. This does not check http
 
*          response by twitter. Use getLastWebResponse() for that.
 
@@ -1173,7 +1175,7 @@ bool twitCurl::blockCreate( std::string& userInfo )
 
*
 
* @description: method to unblock a user
 
*
 
* @input: userInfo - user id or screen name
 
* @input: userInfo - user id or screen name who need to unblocked
 
*
 
* @output: true if DELETE is success, otherwise false. This does not check http
 
*          response by twitter. Use getLastWebResponse() for that.
 
@@ -1190,6 +1192,100 @@ bool twitCurl::blockDestroy( std::string& userInfo )
 
    return performDelete( buildUrl );
 
}
 
 
/*++
 
* @method: twitCurl::blockListGet
 
*
 
* @description: method to get list of users blocked by authenticated user
 
*
 
* @input: includeEntities - indicates whether or not to include 'entities' node
 
*         skipStatus - indicates whether or not to include status for returned users
 
*         nextCursor - next cursor string returned from a previous call
 
*                      to this API, otherwise an empty string
 
*
 
* @output: true if GET is success, otherwise false. This does not check http
 
*          response by twitter. Use getLastWebResponse() for that.
 
*
 
*--*/
 
bool twitCurl::blockListGet( std::string& nextCursor, bool includeEntities, bool skipStatus )
 
{
 
    /* Prepare URL */
 
    std::string buildUrl, urlParams;
 
 
    buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
               twitterDefaults::TWITCURL_BLOCKSLIST_URL +
 
               twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
    if( includeEntities )
 
    {
 
        urlParams += twitCurlDefaults::TWITCURL_INCLUDE_ENTITIES + std::string("true");
 
    }
 
    if( skipStatus )
 
    {
 
        if( urlParams.length() )
 
        {
 
            urlParams += twitCurlDefaults::TWITCURL_URL_SEP_AMP;
 
        }
 
        urlParams += twitCurlDefaults::TWITCURL_SKIP_STATUS + std::string("true");
 
    }
 
    if( nextCursor.length() )
 
    {
 
        if( urlParams.length() )
 
        {
 
            urlParams += twitCurlDefaults::TWITCURL_URL_SEP_AMP;
 
        }
 
        urlParams += twitCurlDefaults::TWITCURL_NEXT_CURSOR + nextCursor;
 
    }
 
    if( urlParams.length() )
 
    {
 
        buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + urlParams;
 
    }
 
 
    /* Perform GET */
 
    return performGet( buildUrl );
 
}
 
 
/*++
 
* @method: twitCurl::blockIdsGet
 
*
 
* @description: method to get list of IDs blocked by authenticated user
 
*
 
* @input: stringifyIds - indicates whether or not returned ids should
 
*                        be in string format
 
*         nextCursor - next cursor string returned from a previous call
 
*                      to this API, otherwise an empty string
 
*
 
* @output: true if GET is success, otherwise false. This does not check http
 
*          response by twitter. Use getLastWebResponse() for that.
 
*
 
*--*/
 
bool twitCurl::blockIdsGet( std::string& nextCursor, bool stringifyIds )
 
{
 
    /* Prepare URL */
 
    std::string buildUrl, urlParams;
 
 
    buildUrl = twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
               twitterDefaults::TWITCURL_BLOCKSIDS_URL +
 
               twitCurlDefaults::TWITCURL_EXTENSIONFORMATS[m_eApiFormatType];
 
    if( stringifyIds )
 
    {
 
        urlParams += twitCurlDefaults::TWITCURL_STRINGIFY_IDS + std::string("true");
 
    }
 
    if( nextCursor.length() )
 
    {
 
        if( urlParams.length() )
 
        {
 
            urlParams += twitCurlDefaults::TWITCURL_URL_SEP_AMP;
 
        }
 
        urlParams += twitCurlDefaults::TWITCURL_NEXT_CURSOR + nextCursor;
 
    }
 
    if( urlParams.length() )
 
    {
 
        buildUrl += twitCurlDefaults::TWITCURL_URL_SEP_QUES + urlParams;
 
    }
 
 
    /* Perform GET */
 
    return performGet( buildUrl );
 
}
 
 
/*++
 
* @method: twitCurl::savedSearchGet
 
*
 
@@ -1433,13 +1529,12 @@ void twitCurl::getLastCurlError( std::string& outErrResp )
 
*--*/
 
int twitCurl::curlCallback( char* data, size_t size, size_t nmemb, twitCurl* pTwitCurlObj )
 
{
 
    int writtenSize = 0;
 
    if( ( NULL != pTwitCurlObj ) && ( NULL != data ) )
 
    if( pTwitCurlObj && data )
 
    {
 
        /* Save http response in twitcurl object's buffer */
 
        writtenSize = pTwitCurlObj->saveLastWebResponse( data, ( size*nmemb ) );
 
        return pTwitCurlObj->saveLastWebResponse( data, ( size*nmemb ) );
 
    }
 
    return writtenSize;
 
    return 0;
 
}
 
 
/*++
 
@@ -1458,14 +1553,13 @@ int twitCurl::curlCallback( char* data, size_t size, size_t nmemb, twitCurl* pTw
 
*--*/
 
int twitCurl::saveLastWebResponse(  char*& data, size_t size )
 
{
 
    int bytesWritten = 0;
 
    if( data && size )
 
    {
 
        /* Append data in our internal buffer */
 
        m_callbackData.append( data, size );
 
        bytesWritten = (int)size;
 
        return (int)size;
 
    }
 
    return bytesWritten;
 
    return 0;
 
}
 
 
/*++
 
@@ -1503,32 +1597,34 @@ void twitCurl::clearCurlCallbackBuffers()
 
*--*/
 
void twitCurl::prepareCurlProxy()
 
{
 
    if( !m_curlProxyParamsSet )
 
    if( m_curlProxyParamsSet )
 
    {
 
        /* Reset existing proxy details in cURL */
 
        curl_easy_setopt( m_curlHandle, CURLOPT_PROXY, NULL );
 
        curl_easy_setopt( m_curlHandle, CURLOPT_PROXYUSERPWD, NULL );
 
        curl_easy_setopt( m_curlHandle, CURLOPT_PROXYAUTH, (long)CURLAUTH_ANY );
 
        return;
 
    }
 
 
        /* Set proxy details in cURL */
 
        std::string proxyIpPort("");
 
        if( getProxyServerIp().size() )
 
        {
 
            utilMakeCurlParams( proxyIpPort, getProxyServerIp(), getProxyServerPort() );
 
        }
 
        curl_easy_setopt( m_curlHandle, CURLOPT_PROXY, proxyIpPort.c_str() );
 
    /* Reset existing proxy details in cURL */
 
    curl_easy_setopt( m_curlHandle, CURLOPT_PROXY, NULL );
 
    curl_easy_setopt( m_curlHandle, CURLOPT_PROXYUSERPWD, NULL );
 
    curl_easy_setopt( m_curlHandle, CURLOPT_PROXYAUTH, (long)CURLAUTH_ANY );
 
 
        /* Prepare username and password for proxy server */
 
        if( m_proxyUserName.length() && m_proxyPassword.length() )
 
        {
 
            std::string proxyUserPass;
 
            utilMakeCurlParams( proxyUserPass, getProxyUserName(), getProxyPassword() );
 
            curl_easy_setopt( m_curlHandle, CURLOPT_PROXYUSERPWD, proxyUserPass.c_str() );
 
        }
 
    /* Set proxy details in cURL */
 
    std::string proxyIpPort("");
 
    if( getProxyServerIp().size() )
 
    {
 
        utilMakeCurlParams( proxyIpPort, getProxyServerIp(), getProxyServerPort() );
 
    }
 
    curl_easy_setopt( m_curlHandle, CURLOPT_PROXY, proxyIpPort.c_str() );
 
 
        /* Set the flag to true indicating that proxy info is set in cURL */
 
        m_curlProxyParamsSet = true;
 
    /* Prepare username and password for proxy server */
 
    if( m_proxyUserName.length() && m_proxyPassword.length() )
 
    {
 
        std::string proxyUserPass;
 
        utilMakeCurlParams( proxyUserPass, getProxyUserName(), getProxyPassword() );
 
        curl_easy_setopt( m_curlHandle, CURLOPT_PROXYUSERPWD, proxyUserPass.c_str() );
 
    }
 
 
    /* Set the flag to true indicating that proxy info is set in cURL */
 
    m_curlProxyParamsSet = true;
 
}
 
 
/*++
 
@@ -1546,18 +1642,20 @@ void twitCurl::prepareCurlProxy()
 
*--*/
 
void twitCurl::prepareCurlCallback()
 
{
 
    if( !m_curlCallbackParamsSet )
 
    if( m_curlCallbackParamsSet )
 
    {
 
        /* Set buffer to get error */
 
        curl_easy_setopt( m_curlHandle, CURLOPT_ERRORBUFFER, m_errorBuffer );
 
        return;
 
    }
 
 
        /* Set callback function to get response */
 
        curl_easy_setopt( m_curlHandle, CURLOPT_WRITEFUNCTION, curlCallback );
 
        curl_easy_setopt( m_curlHandle, CURLOPT_WRITEDATA, this );
 
    /* Set buffer to get error */
 
    curl_easy_setopt( m_curlHandle, CURLOPT_ERRORBUFFER, m_errorBuffer );
 
 
        /* Set the flag to true indicating that callback info is set in cURL */
 
        m_curlCallbackParamsSet = true;
 
    }
 
    /* Set callback function to get response */
 
    curl_easy_setopt( m_curlHandle, CURLOPT_WRITEFUNCTION, curlCallback );
 
    curl_easy_setopt( m_curlHandle, CURLOPT_WRITEDATA, this );
 
 
    /* Set the flag to true indicating that callback info is set in cURL */
 
    m_curlCallbackParamsSet = true;
 
}
 
 
/*++
 
@@ -1576,24 +1674,26 @@ void twitCurl::prepareCurlCallback()
 
*--*/
 
void twitCurl::prepareCurlUserPass()
 
{
 
    if( !m_curlLoginParamsSet )
 
    if( m_curlLoginParamsSet )
 
    {
 
        /* Reset existing username and password stored in cURL */
 
        curl_easy_setopt( m_curlHandle, CURLOPT_USERPWD, "" );
 
        return;
 
    }
 
 
        if( getTwitterUsername().size() )
 
        {
 
            /* Prepare username:password */
 
            std::string userNamePassword;
 
            utilMakeCurlParams( userNamePassword, getTwitterUsername(), getTwitterPassword() );
 
    /* Reset existing username and password stored in cURL */
 
    curl_easy_setopt( m_curlHandle, CURLOPT_USERPWD, "" );
 
 
            /* Set username and password */
 
            curl_easy_setopt( m_curlHandle, CURLOPT_USERPWD, userNamePassword.c_str() );
 
        }
 
    if( getTwitterUsername().size() )
 
    {
 
        /* Prepare username:password */
 
        std::string userNamePassword;
 
        utilMakeCurlParams( userNamePassword, getTwitterUsername(), getTwitterPassword() );
 
 
        /* Set the flag to true indicating that twitter credentials are set in cURL */
 
        m_curlLoginParamsSet = true;
 
        /* Set username and password */
 
        curl_easy_setopt( m_curlHandle, CURLOPT_USERPWD, userNamePassword.c_str() );
 
    }
 
 
    /* Set the flag to true indicating that twitter credentials are set in cURL */
 
    m_curlLoginParamsSet = true;
 
}
 
 
/*++
 
@@ -1614,8 +1714,8 @@ void twitCurl::prepareStandardParams()
 
    /* Restore any custom request we may have */
 
    curl_easy_setopt( m_curlHandle, CURLOPT_CUSTOMREQUEST, NULL );
 
 
	/* All supported encodings */
 
	curl_easy_setopt( m_curlHandle, CURLOPT_ENCODING, "" );
 
    /* All supported encodings */
 
    curl_easy_setopt( m_curlHandle, CURLOPT_ENCODING, "" );
 
 
    /* Clear callback and error buffers */
 
    clearCurlCallbackBuffers();
 
@@ -1690,7 +1790,7 @@ bool twitCurl::performGet( const std::string& getUrl )
 
}
 
 
/*++
 
* @method: twitCurl::performGet
 
* @method: twitCurl::performGetInternal
 
*
 
* @description: method to send http GET request. this is an internal method.
 
*               twitcurl users should not use this method.
 
@@ -1702,7 +1802,8 @@ bool twitCurl::performGet( const std::string& getUrl )
 
* @remarks: internal method
 
*
 
*--*/
 
bool twitCurl::performGet( const std::string& getUrl, const std::string& oAuthHttpHeader )
 
bool twitCurl::performGetInternal( const std::string& getUrl,
 
                                   const std::string& oAuthHttpHeader )
 
{
 
    /* Return if cURL is not initialized */
 
    if( !isCurlInit() )
 
@@ -1963,7 +2064,6 @@ bool twitCurl::oAuthRequestToken( std::string& authorizeUrl /* out */ )
 
    }
 
 
    /* Get OAuth header for request token */
 
    bool retVal = false;
 
    std::string oAuthHeader;
 
    authorizeUrl = "";
 
    if( m_oAuth.getOAuthHeader( eOAuthHttpGet,
 
@@ -1972,8 +2072,9 @@ bool twitCurl::oAuthRequestToken( std::string& authorizeUrl /* out */ )
 
                                std::string( "" ),
 
                                oAuthHeader ) )
 
    {
 
        if( performGet( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                        oAuthTwitterApiUrls::OAUTHLIB_TWITTER_REQUEST_TOKEN_URL, oAuthHeader ) )
 
        if( performGetInternal( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                                oAuthTwitterApiUrls::OAUTHLIB_TWITTER_REQUEST_TOKEN_URL,
 
                                oAuthHeader ) )
 
        {
 
            /* Tell OAuth object to save access token and secret from web response */
 
            std::string twitterResp;
 
@@ -1989,10 +2090,10 @@ bool twitCurl::oAuthRequestToken( std::string& authorizeUrl /* out */ )
 
                                oAuthTwitterApiUrls::OAUTHLIB_TWITTER_AUTHORIZE_URL );
 
            authorizeUrl.append( oAuthTokenKey.c_str() );
 
 
            retVal = true;
 
            return true;
 
        }
 
    }
 
    return retVal;
 
    return false;
 
}
 
 
/*++
 
@@ -2013,7 +2114,6 @@ bool twitCurl::oAuthAccessToken()
 
        return false;
 
    }
 
    /* Get OAuth header for access token */
 
    bool retVal = false;
 
    std::string oAuthHeader;
 
    if( m_oAuth.getOAuthHeader( eOAuthHttpGet,
 
                                twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
@@ -2021,18 +2121,19 @@ bool twitCurl::oAuthAccessToken()
 
                                std::string( "" ),
 
                                oAuthHeader, true ) )
 
    {
 
        if( performGet( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                        oAuthTwitterApiUrls::OAUTHLIB_TWITTER_ACCESS_TOKEN_URL, oAuthHeader ) )
 
        if( performGetInternal( twitCurlDefaults::TWITCURL_PROTOCOLS[m_eProtocolType] +
 
                                oAuthTwitterApiUrls::OAUTHLIB_TWITTER_ACCESS_TOKEN_URL,
 
                                oAuthHeader ) )
 
        {
 
            /* Tell OAuth object to save access token and secret from web response */
 
            std::string twitterResp;
 
            getLastWebResponse( twitterResp );
 
            m_oAuth.extractOAuthTokenKeySecret( twitterResp );
 
 
            retVal = true;
 
            return true;
 
        }
 
    }
 
    return retVal;
 
    return false;
 
}
 
 
/*++
 
@@ -2187,3 +2288,4 @@ bool twitCurl::oAuthHandlePIN( const std::string& authorizeUrl /* in */ )
 
    }
 
    return false;
 
}
 
backends/twitter/libtwitcurl/twitcurl.h
Show inline comments
 
#ifndef _TWITCURL_H_
 
#define _TWITCURL_H_
 
#ifdef _WIN32
 
#define NOMINMAX 1
 
#endif
 
 
#include <string>
 
#include <sstream>
 
#include <cstring>
 
@@ -10,127 +8,24 @@
 
#include "oauthlib.h"
 
#include "curl/curl.h"
 
 
/* Few common types used by twitCurl */
 
namespace twitCurlTypes
 
{
 
    typedef enum _eTwitCurlApiFormatType
 
    {
 
        eTwitCurlApiFormatXml = 0,
 
        eTwitCurlApiFormatJson,
 
        eTwitCurlApiFormatJson = 0,
 
        eTwitCurlApiFormatXml,
 
        eTwitCurlApiFormatMax
 
    } eTwitCurlApiFormatType;
 
 
    typedef enum _eTwitCurlProtocolType
 
    {
 
        eTwitCurlProtocolHttp = 0,
 
        eTwitCurlProtocolHttps,
 
        eTwitCurlProtocolHttps = 0,
 
        eTwitCurlProtocolHttp,
 
        eTwitCurlProtocolMax
 
    } eTwitCurlProtocolType;
 
};
 
 
/* Default values used in twitcurl */
 
namespace twitCurlDefaults
 
{
 
    /* Constants */
 
    const int TWITCURL_DEFAULT_BUFFSIZE = 1024;
 
    const std::string TWITCURL_COLON = ":";
 
    const char TWITCURL_EOS = '\0';
 
    const unsigned int MAX_TIMELINE_TWEET_COUNT = 200;
 
 
    /* Miscellaneous data used to build twitter URLs*/
 
    const std::string TWITCURL_STATUSSTRING = "status=";
 
    const std::string TWITCURL_TEXTSTRING = "text=";
 
    const std::string TWITCURL_QUERYSTRING = "query=";
 
    const std::string TWITCURL_SEARCHQUERYSTRING = "q=";
 
    const std::string TWITCURL_SCREENNAME = "screen_name=";
 
    const std::string TWITCURL_USERID = "user_id=";
 
    const std::string TWITCURL_EXTENSIONFORMATS[2] = { ".xml",
 
                                                       ".json"
 
                                                     };
 
    const std::string TWITCURL_PROTOCOLS[2] =        { "http://",
 
                                                       "https://"
 
                                                     };
 
    const std::string TWITCURL_TARGETSCREENNAME = "target_screen_name=";
 
    const std::string TWITCURL_TARGETUSERID = "target_id=";
 
    const std::string TWITCURL_SINCEID = "since_id=";
 
    const std::string TWITCURL_TRIMUSER = "trim_user=true";
 
    const std::string TWITCURL_INCRETWEETS = "include_rts=true";
 
    const std::string TWITCURL_COUNT = "count=";
 
 
    /* URL separators */
 
    const std::string TWITCURL_URL_SEP_AMP = "&";
 
    const std::string TWITCURL_URL_SEP_QUES = "?";
 
};
 
 
/* Default twitter URLs */
 
namespace twitterDefaults
 
{
 
 
    /* Search URLs */
 
    const std::string TWITCURL_SEARCH_URL = "search.twitter.com/search";
 
 
    /* Status URLs */
 
    const std::string TWITCURL_STATUSUPDATE_URL = "api.twitter.com/1.1/statuses/update";
 
    const std::string TWITCURL_STATUSSHOW_URL = "api.twitter.com/1.1/statuses/show/";
 
    const std::string TWITCURL_STATUDESTROY_URL = "api.twitter.com/1.1/statuses/destroy/";
 
	const std::string TWITCURL_RETWEET_URL = "api.twitter.com/1.1/statuses/retweet/";
 
 
    /* Timeline URLs */
 
    const std::string TWITCURL_HOME_TIMELINE_URL = "api.twitter.com/1.1/statuses/home_timeline";
 
    const std::string TWITCURL_PUBLIC_TIMELINE_URL = "api.twitter.com/1.1/statuses/public_timeline";
 
    const std::string TWITCURL_FEATURED_USERS_URL = "api.twitter.com/1.1/statuses/featured";
 
    const std::string TWITCURL_FRIENDS_TIMELINE_URL = "api.twitter.com/1.1/statuses/friends_timeline";
 
    const std::string TWITCURL_MENTIONS_URL = "api.twitter.com/1.1/statuses/mentions";
 
    const std::string TWITCURL_USERTIMELINE_URL = "api.twitter.com/1.1/statuses/user_timeline";
 
 
    /* Users URLs */
 
	const std::string TWITCURL_LOOKUPUSERS_URL = "api.twitter.com/1.1/users/lookup";
 
    const std::string TWITCURL_SHOWUSERS_URL = "api.twitter.com/1.1/users/show";
 
    const std::string TWITCURL_SHOWFRIENDS_URL = "api.twitter.com/1.1/statuses/friends";
 
    const std::string TWITCURL_SHOWFOLLOWERS_URL = "api.twitter.com/1.1/statuses/followers";
 
 
    /* Direct messages URLs */
 
    const std::string TWITCURL_DIRECTMESSAGES_URL = "api.twitter.com/1.1/direct_messages";
 
    const std::string TWITCURL_DIRECTMESSAGENEW_URL = "api.twitter.com/1.1/direct_messages/new";
 
    const std::string TWITCURL_DIRECTMESSAGESSENT_URL = "api.twitter.com/1.1/direct_messages/sent";
 
    const std::string TWITCURL_DIRECTMESSAGEDESTROY_URL = "api.twitter.com/1.1/direct_messages/destroy/";
 
 
    /* Friendships URLs */
 
    const std::string TWITCURL_FRIENDSHIPSCREATE_URL = "api.twitter.com/1.1/friendships/create";
 
    const std::string TWITCURL_FRIENDSHIPSDESTROY_URL = "api.twitter.com/1.1/friendships/destroy";
 
    const std::string TWITCURL_FRIENDSHIPSSHOW_URL = "api.twitter.com/1.1/friendships/show";
 
 
    /* Social graphs URLs */
 
    const std::string TWITCURL_FRIENDSIDS_URL = "api.twitter.com/1.1/friends/ids";
 
    const std::string TWITCURL_FOLLOWERSIDS_URL = "api.twitter.com/1.1/followers/ids";
 
 
    /* Account URLs */
 
    const std::string TWITCURL_ACCOUNTRATELIMIT_URL = "api.twitter.com/1.1/account/rate_limit_status";
 
    const std::string TWITCURL_ACCOUNTVERIFYCRED_URL = "api.twitter.com/1.1/account/verify_credentials";
 
 
    /* Favorites URLs */
 
    const std::string TWITCURL_FAVORITESGET_URL = "api.twitter.com/1.1/favorites";
 
    const std::string TWITCURL_FAVORITECREATE_URL = "api.twitter.com/1.1/favorites/create/";
 
    const std::string TWITCURL_FAVORITEDESTROY_URL = "api.twitter.com/1.1/favorites/destroy/";
 
 
    /* Block URLs */
 
    const std::string TWITCURL_BLOCKSCREATE_URL = "api.twitter.com/1.1/blocks/create/";
 
    const std::string TWITCURL_BLOCKSDESTROY_URL = "api.twitter.com/1.1/blocks/destroy/";
 
 
    /* Saved Search URLs */
 
    const std::string TWITCURL_SAVEDSEARCHGET_URL = "api.twitter.com/1.1/saved_searches";
 
    const std::string TWITCURL_SAVEDSEARCHSHOW_URL = "api.twitter.com/1.1/saved_searches/show/";
 
    const std::string TWITCURL_SAVEDSEARCHCREATE_URL = "api.twitter.com/1.1/saved_searches/create";
 
    const std::string TWITCURL_SAVEDSEARCHDESTROY_URL = "api.twitter.com/1.1/saved_searches/destroy/";
 
 
    /* Trends URLs */
 
    const std::string TWITCURL_TRENDS_URL = "api.twitter.com/1.1/trends";
 
    const std::string TWITCURL_TRENDSDAILY_URL = "api.twitter.com/1.1/trends/daily";
 
    const std::string TWITCURL_TRENDSCURRENT_URL = "api.twitter.com/1.1/trends/current";
 
    const std::string TWITCURL_TRENDSWEEKLY_URL = "api.twitter.com/1.1/trends/weekly";
 
    const std::string TWITCURL_TRENDSAVAILABLE_URL = "api.twitter.com/1.1/trends/available";
 
 
};
 
 
/* twitCurl class */
 
class twitCurl
 
{
 
@@ -150,15 +45,11 @@ public:
 
    void setTwitterUsername( std::string& userName /* in */ );
 
    void setTwitterPassword( std::string& passWord /* in */ );
 
 
    /* Twitter API type */
 
    void setTwitterApiType( twitCurlTypes::eTwitCurlApiFormatType eType );
 
    void setTwitterProcotolType( twitCurlTypes::eTwitCurlProtocolType eType );
 
 
    /* Twitter search APIs */
 
    bool search( std::string& searchQuery /* in */ );
 
    bool search( std::string& searchQuery /* in */, std::string resultCount = "" /* in */ );
 
 
    /* Twitter status APIs */
 
    bool statusUpdate( std::string& newStatus /* in */ );
 
    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 */ );
 
@@ -167,18 +58,21 @@ public:
 
    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 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 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 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 */ );
 
@@ -189,12 +83,15 @@ public:
 
    bool friendshipShow( std::string& userInfo /* in */, bool isUserId = false /* in */ );
 
 
    /* Twitter social graphs APIs */
 
    bool friendsIdsGet( std::string& userInfo /* in */, bool isUserId = false /* in */ );
 
    bool followersIdsGet( std::string& userInfo /* in */, bool isUserId = false /* in */ );
 
    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 */ );
 
@@ -203,6 +100,9 @@ public:
 
    /* 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();
 
@@ -234,13 +134,14 @@ public:
 
    void setProxyServerPort( std::string& proxyServerPort /* in */ );
 
    void setProxyUserName( std::string& proxyUserName /* in */ );
 
    void setProxyPassword( std::string& proxyPassword /* in */ );
 
 
	twitCurl* clone();
 
    
 
    /* Clones this object */
 
    twitCurl* clone();
 
 
private:
 
    /* cURL data */
 
    CURL* m_curlHandle;
 
    char m_errorBuffer[twitCurlDefaults::TWITCURL_DEFAULT_BUFFSIZE];
 
    char* m_errorBuffer;
 
    std::string m_callbackData;
 
 
    /* cURL flags */
 
@@ -272,7 +173,8 @@ private:
 
    void prepareCurlUserPass();
 
    void prepareStandardParams();
 
    bool performGet( const std::string& getUrl );
 
    bool performGet( const std::string& getUrl, const std::string& oAuthHttpHeader );
 
    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 = "" );
 
backends/twitter/libtwitcurl/twitcurl.vcproj
Show inline comments
 
@@ -118,7 +118,7 @@
 
				Name="VCCLCompilerTool"
 
				Optimization="2"
 
				InlineFunctionExpansion="1"
 
				AdditionalIncludeDirectories="./curl"
 
				AdditionalIncludeDirectories="./include"
 
				PreprocessorDefinitions="WIN32;NDEBUG;_LIB;CURL_STATICLIB"
 
				StringPooling="true"
 
				RuntimeLibrary="2"
 
@@ -144,7 +144,7 @@
 
			<Tool
 
				Name="VCLibrarianTool"
 
				LinkLibraryDependencies="true"
 
				AdditionalDependencies="libcurl.lib ws2_32.lib wldap32.lib"
 
				AdditionalDependencies="libcurl.lib"
 
				OutputFile=".\Release\twitcurl.lib"
 
				AdditionalLibraryDirectories="./lib"
 
				SuppressStartupBanner="true"
 
@@ -332,6 +332,10 @@
 
				RelativePath="twitcurl.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\twitcurlurls.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath="urlencode.h"
 
				>
backends/twitter/libtwitcurl/twitcurlurls.h
Show inline comments
 
new file 100644
 
#ifndef _TWITCURLURLS_H_
 
#define _TWITCURLURLS_H_
 
 
#include <string>
 
#include <cstring>
 
 
/* Default values used in twitcurl */
 
namespace twitCurlDefaults
 
{
 
    /* Constants */
 
    const int TWITCURL_DEFAULT_BUFFSIZE = 1024;
 
    const std::string TWITCURL_COLON = ":";
 
    const char TWITCURL_EOS = '\0';
 
    const unsigned int MAX_TIMELINE_TWEET_COUNT = 200;
 
 
    /* Miscellaneous data used to build twitter URLs*/
 
    const std::string TWITCURL_STATUSSTRING = "status=";
 
    const std::string TWITCURL_TEXTSTRING = "text=";
 
    const std::string TWITCURL_QUERYSTRING = "query=";
 
    const std::string TWITCURL_SEARCHQUERYSTRING = "q=";
 
    const std::string TWITCURL_SCREENNAME = "screen_name=";
 
    const std::string TWITCURL_USERID = "user_id=";
 
    const std::string TWITCURL_EXTENSIONFORMATS[2] = { ".json",
 
                                                       ".xml"
 
                                                     };
 
    const std::string TWITCURL_PROTOCOLS[2] =        { "https://",
 
                                                       "http://"
 
                                                     };
 
    const std::string TWITCURL_TARGETSCREENNAME = "target_screen_name=";
 
    const std::string TWITCURL_TARGETUSERID = "target_id=";
 
    const std::string TWITCURL_SINCEID = "since_id=";
 
    const std::string TWITCURL_TRIMUSER = "trim_user=true";
 
    const std::string TWITCURL_INCRETWEETS = "include_rts=true";
 
    const std::string TWITCURL_COUNT = "count=";
 
    const std::string TWITCURL_NEXT_CURSOR = "cursor=";
 
    const std::string TWITCURL_SKIP_STATUS = "skip_status=";
 
    const std::string TWITCURL_INCLUDE_ENTITIES = "include_entities=";
 
    const std::string TWITCURL_STRINGIFY_IDS = "stringify_ids=";
 
    const std::string TWITCURL_INREPLYTOSTATUSID = "in_reply_to_status_id=";
 
 
    /* URL separators */
 
    const std::string TWITCURL_URL_SEP_AMP = "&";
 
    const std::string TWITCURL_URL_SEP_QUES = "?";
 
};
 
 
/* Default twitter URLs */
 
namespace twitterDefaults
 
{
 
    /* Base URL */
 
    const std::string TWITCURL_BASE_URL = "api.twitter.com/1.1/";
 
 
    /* Search URLs */
 
    const std::string TWITCURL_SEARCH_URL = TWITCURL_BASE_URL + "search/tweets";
 
 
    /* Status URLs */
 
    const std::string TWITCURL_STATUSUPDATE_URL = TWITCURL_BASE_URL + "statuses/update";
 
    const std::string TWITCURL_STATUSSHOW_URL = TWITCURL_BASE_URL + "statuses/show/";
 
    const std::string TWITCURL_STATUDESTROY_URL = TWITCURL_BASE_URL + "statuses/destroy/";
 
    const std::string TWITCURL_RETWEET_URL = TWITCURL_BASE_URL + "statuses/retweet/";
 
 
    /* Timeline URLs */
 
    const std::string TWITCURL_HOME_TIMELINE_URL = TWITCURL_BASE_URL + "statuses/home_timeline";
 
    const std::string TWITCURL_PUBLIC_TIMELINE_URL = TWITCURL_BASE_URL + "statuses/public_timeline";
 
    const std::string TWITCURL_FEATURED_USERS_URL = TWITCURL_BASE_URL + "statuses/featured";
 
    const std::string TWITCURL_FRIENDS_TIMELINE_URL = TWITCURL_BASE_URL + "statuses/friends_timeline";
 
    const std::string TWITCURL_MENTIONS_URL = TWITCURL_BASE_URL + "statuses/mentions";
 
    const std::string TWITCURL_USERTIMELINE_URL = TWITCURL_BASE_URL + "statuses/user_timeline";
 
 
    /* Users URLs */
 
    const std::string TWITCURL_LOOKUPUSERS_URL = TWITCURL_BASE_URL + "users/lookup";
 
    const std::string TWITCURL_SHOWUSERS_URL = TWITCURL_BASE_URL + "users/show";
 
    const std::string TWITCURL_SHOWFRIENDS_URL = TWITCURL_BASE_URL + "statuses/friends";
 
    const std::string TWITCURL_SHOWFOLLOWERS_URL = TWITCURL_BASE_URL + "statuses/followers";
 
 
    /* Direct messages URLs */
 
    const std::string TWITCURL_DIRECTMESSAGES_URL = TWITCURL_BASE_URL + "direct_messages";
 
    const std::string TWITCURL_DIRECTMESSAGENEW_URL = TWITCURL_BASE_URL + "direct_messages/new";
 
    const std::string TWITCURL_DIRECTMESSAGESSENT_URL = TWITCURL_BASE_URL + "direct_messages/sent";
 
    const std::string TWITCURL_DIRECTMESSAGEDESTROY_URL = TWITCURL_BASE_URL + "direct_messages/destroy/";
 
 
    /* Friendships URLs */
 
    const std::string TWITCURL_FRIENDSHIPSCREATE_URL = TWITCURL_BASE_URL + "friendships/create";
 
    const std::string TWITCURL_FRIENDSHIPSDESTROY_URL = TWITCURL_BASE_URL + "friendships/destroy";
 
    const std::string TWITCURL_FRIENDSHIPSSHOW_URL = TWITCURL_BASE_URL + "friendships/show";
 
 
    /* Social graphs URLs */
 
    const std::string TWITCURL_FRIENDSIDS_URL = TWITCURL_BASE_URL + "friends/ids";
 
    const std::string TWITCURL_FOLLOWERSIDS_URL = TWITCURL_BASE_URL + "followers/ids";
 
 
    /* Account URLs */
 
    const std::string TWITCURL_ACCOUNTRATELIMIT_URL = TWITCURL_BASE_URL + "account/rate_limit_status";
 
    const std::string TWITCURL_ACCOUNTVERIFYCRED_URL = TWITCURL_BASE_URL + "account/verify_credentials";
 
 
    /* Favorites URLs */
 
    const std::string TWITCURL_FAVORITESGET_URL = TWITCURL_BASE_URL + "favorites";
 
    const std::string TWITCURL_FAVORITECREATE_URL = TWITCURL_BASE_URL + "favorites/create/";
 
    const std::string TWITCURL_FAVORITEDESTROY_URL = TWITCURL_BASE_URL + "favorites/destroy/";
 
 
    /* Block URLs */
 
    const std::string TWITCURL_BLOCKSCREATE_URL = TWITCURL_BASE_URL + "blocks/create/";
 
    const std::string TWITCURL_BLOCKSDESTROY_URL = TWITCURL_BASE_URL + "blocks/destroy/";
 
    const std::string TWITCURL_BLOCKSLIST_URL = TWITCURL_BASE_URL + "blocks/list";
 
    const std::string TWITCURL_BLOCKSIDS_URL = TWITCURL_BASE_URL + "blocks/ids";
 
 
    /* Saved Search URLs */
 
    const std::string TWITCURL_SAVEDSEARCHGET_URL = TWITCURL_BASE_URL + "saved_searches";
 
    const std::string TWITCURL_SAVEDSEARCHSHOW_URL = TWITCURL_BASE_URL + "saved_searches/show/";
 
    const std::string TWITCURL_SAVEDSEARCHCREATE_URL = TWITCURL_BASE_URL + "saved_searches/create";
 
    const std::string TWITCURL_SAVEDSEARCHDESTROY_URL = TWITCURL_BASE_URL + "saved_searches/destroy/";
 
 
    /* Trends URLs */
 
    const std::string TWITCURL_TRENDS_URL = TWITCURL_BASE_URL + "trends";
 
    const std::string TWITCURL_TRENDSDAILY_URL = TWITCURL_BASE_URL + "trends/daily";
 
    const std::string TWITCURL_TRENDSCURRENT_URL = TWITCURL_BASE_URL + "trends/current";
 
    const std::string TWITCURL_TRENDSWEEKLY_URL = TWITCURL_BASE_URL + "trends/weekly";
 
    const std::string TWITCURL_TRENDSAVAILABLE_URL = TWITCURL_BASE_URL + "trends/available";
 
 
};
 
 
namespace oAuthLibDefaults
 
{
 
    /* Constants */
 
    const int OAUTHLIB_BUFFSIZE = 1024;
 
    const int OAUTHLIB_BUFFSIZE_LARGE = 1024;
 
    const std::string OAUTHLIB_CONSUMERKEY_KEY = "oauth_consumer_key";
 
    const std::string OAUTHLIB_CALLBACK_KEY = "oauth_callback";
 
    const std::string OAUTHLIB_VERSION_KEY = "oauth_version";
 
    const std::string OAUTHLIB_SIGNATUREMETHOD_KEY = "oauth_signature_method";
 
    const std::string OAUTHLIB_SIGNATURE_KEY = "oauth_signature";
 
    const std::string OAUTHLIB_TIMESTAMP_KEY = "oauth_timestamp";
 
    const std::string OAUTHLIB_NONCE_KEY = "oauth_nonce";
 
    const std::string OAUTHLIB_TOKEN_KEY = "oauth_token";
 
    const std::string OAUTHLIB_TOKENSECRET_KEY = "oauth_token_secret";
 
    const std::string OAUTHLIB_VERIFIER_KEY = "oauth_verifier";
 
    const std::string OAUTHLIB_SCREENNAME_KEY = "screen_name";
 
    const std::string OAUTHLIB_AUTHENTICITY_TOKEN_KEY = "authenticity_token";
 
    const std::string OAUTHLIB_SESSIONUSERNAME_KEY = "session[username_or_email]";
 
    const std::string OAUTHLIB_SESSIONPASSWORD_KEY = "session[password]";
 
    const std::string OAUTHLIB_AUTHENTICITY_TOKEN_TWITTER_RESP_KEY = "authenticity_token\" type=\"hidden\" value=\"";
 
    const std::string OAUTHLIB_TOKEN_TWITTER_RESP_KEY = "oauth_token\" type=\"hidden\" value=\"";
 
    const std::string OAUTHLIB_PIN_TWITTER_RESP_KEY = "code-desc\"><code>";
 
    const std::string OAUTHLIB_TOKEN_END_TAG_TWITTER_RESP = "\" />";
 
    const std::string OAUTHLIB_PIN_END_TAG_TWITTER_RESP = "</code>";
 
 
    const std::string OAUTHLIB_AUTHHEADER_STRING = "Authorization: OAuth ";
 
};
 
 
namespace oAuthTwitterApiUrls
 
{
 
    /* Twitter OAuth API URLs */
 
    const std::string OAUTHLIB_TWITTER_REQUEST_TOKEN_URL = "api.twitter.com/oauth/request_token";
 
    const std::string OAUTHLIB_TWITTER_AUTHORIZE_URL = "api.twitter.com/oauth/authorize?oauth_token=";
 
    const std::string OAUTHLIB_TWITTER_ACCESS_TOKEN_URL = "api.twitter.com/oauth/access_token";
 
};
 
 
#endif // _TWITCURLURLS_H_
backends/twitter/libtwitcurl/urlencode.cpp
Show inline comments
 
@@ -37,4 +37,4 @@ std::string urlencode( const std::string &c )
 
		}
 
	}
 
	return escaped;
 
}
 
}
 
\ No newline at end of file
backends/twitter/libtwitcurl/urlencode.h
Show inline comments
 
@@ -7,4 +7,4 @@
 
std::string char2hex( char dec );
 
std::string urlencode( const std::string &c );
 
 
#endif // __URLENCODE_H__
 
#endif // __URLENCODE_H__
 
\ No newline at end of file
0 comments (0 inline, 0 general)