summaryrefslogtreecommitdiff
path: root/protocols/Twitter
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Twitter')
-rw-r--r--protocols/Twitter/src/oauth/Makefile.am8
-rw-r--r--protocols/Twitter/src/oauth/hash.c492
-rw-r--r--protocols/Twitter/src/oauth/oauth.c921
-rw-r--r--protocols/Twitter/src/oauth/oauth.h764
-rw-r--r--protocols/Twitter/src/oauth/oauth_http.c728
-rw-r--r--protocols/Twitter/src/oauth/xmalloc.c60
-rw-r--r--protocols/Twitter/src/oauth/xmalloc.h10
-rw-r--r--protocols/Twitter/src/proto.h2
-rw-r--r--protocols/Twitter/src/tc2.h83
-rw-r--r--protocols/Twitter/twitter_10.vcxproj8
-rw-r--r--protocols/Twitter/twitter_11.vcxproj8
11 files changed, 8 insertions, 3076 deletions
diff --git a/protocols/Twitter/src/oauth/Makefile.am b/protocols/Twitter/src/oauth/Makefile.am
deleted file mode 100644
index b59c7c71df..0000000000
--- a/protocols/Twitter/src/oauth/Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
-ACLOCAL_AMFLAGS= -I m4
-lib_LTLIBRARIES = liboauth.la
-include_HEADERS = oauth.h
-
-liboauth_la_SOURCES=oauth.c config.h hash.c xmalloc.c xmalloc.h oauth_http.c
-liboauth_la_LDFLAGS=@LIBOAUTH_LDFLAGS@ -version-info @VERSION_INFO@
-liboauth_la_LIBADD=@HASH_LIBS@ @CURL_LIBS@
-liboauth_la_CFLAGS=@LIBOAUTH_CFLAGS@ @HASH_CFLAGS@ @CURL_CFLAGS@
diff --git a/protocols/Twitter/src/oauth/hash.c b/protocols/Twitter/src/oauth/hash.c
deleted file mode 100644
index ca00adaa8c..0000000000
--- a/protocols/Twitter/src/oauth/hash.c
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
- * hash algorithms used in OAuth
- *
- * Copyright 2007-2010 Robin Gareus <robin@gareus.org>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#if USE_BUILTIN_HASH // built-in / AVR -- TODO: check license of sha1.c
-#include <stdio.h>
-#include "oauth.h" // oauth_encode_base64
-#include "xmalloc.h"
-
-#include "sha1.c" // TODO: sha1.h ; Makefile.am: add sha1.c
-
-/* API */
-char *oauth_sign_hmac_sha1_raw (const char *m, const size_t ml, const char *k, const size_t kl) {
- sha1nfo s;
- sha1_initHmac(&s, (const uint8_t*) k, kl);
- sha1_write(&s, m, ml);
- unsigned char *digest = sha1_resultHmac(&s);
- return oauth_encode_base64(HASH_LENGTH, digest);
-}
-
-char *oauth_sign_hmac_sha1 (const char *m, const char *k) {
- return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k)));
-}
-
-char *oauth_body_hash_file(char *filename) {
- FILE *F= fopen(filename, "r");
- if (!F) return NULL;
-
- size_t len=0;
- char fb[BUFSIZ];
- sha1nfo s;
- sha1_init(&s);
-
- while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) {
- sha1_write(&s, fb, len);
- }
- fclose(F);
-
- unsigned char *dgst = xmalloc(HASH_LENGTH*sizeof(char)); // oauth_body_hash_encode frees the digest..
- memcpy(dgst, sha1_result(&s), HASH_LENGTH);
- return oauth_body_hash_encode(HASH_LENGTH, dgst);
-}
-
-char *oauth_body_hash_data(size_t length, const char *data) {
- sha1nfo s;
- sha1_init(&s);
- for (;length--;) sha1_writebyte(&s, *data++);
-
- unsigned char *dgst = xmalloc(HASH_LENGTH*sizeof(char)); // oauth_body_hash_encode frees the digest..
- memcpy(dgst, sha1_result(&s), HASH_LENGTH);
- return oauth_body_hash_encode(HASH_LENGTH, dgst);
-}
-
-char *oauth_sign_rsa_sha1 (const char *m, const char *k) {
- /* NOT RSA/PK11 support */
- return xstrdup("---RSA/PK11-is-not-supported-by-this-version-of-liboauth---");
-}
-
-int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *sig) {
- /* NOT RSA/PK11 support */
- return -1; // mismatch , error
-}
-
-#elif defined (USE_NSS)
-/* use http://www.mozilla.org/projects/security/pki/nss/ for hash/sign */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "xmalloc.h"
-#include "oauth.h" // oauth base64 encode fn's.
-
-// NSS includes
-#include "pk11pub.h"
-#include "nss.h"
-#include "base64.h"
-#include "keyhi.h"
-#include "cryptohi.h"
-#include "cert.h"
-
-#if 1 // work-around compiler-warning
- // see http://bugzilla.mozilla.org/show_bug.cgi?id=243245#c3
- extern CERTCertificate *
- __CERT_DecodeDERCertificate (SECItem *derSignedCert, PRBool copyDER, char *nickname);
-#endif
-
-static const char NS_CERT_HEADER[] = "-----BEGIN CERTIFICATE-----";
-static const char NS_CERT_TRAILER[] = "-----END CERTIFICATE-----";
-static const char NS_PRIV_HEADER[] = "-----BEGIN PRIVATE KEY-----";
-static const char NS_PRIV_TRAILER[] = "-----END PRIVATE KEY-----";
-
-void oauth_init_nss() {
- static short nss_initialized = 0;
- if (!nss_initialized) { NSS_NoDB_Init("."); nss_initialized=1;}
-}
-
-/**
- * Removes heading & trailing strings; used only internally.
- * similar to NSS-source/nss/lib/pkcs7/certread.c
- *
- * the returned string (if not NULL) needs to be freed by the caller
- */
-char *oauth_strip_pkcs(const char *txt, const char *h, const char *t) {
- char *start, *end, *rv;
- size_t len;
- if ((start=strstr(txt, h))==NULL) return NULL;
- start+=strlen(h);
- while (*start=='\r' || *start=='\n') start++;
- if ((end=strstr(start, t))==NULL) return NULL;
- end--;
- while (*end=='\r' || *end=='\n') end--;
- len = end-start+2;
- rv = xmalloc(len*sizeof(char));
- memcpy(rv,start,len);
- rv[len-1]='\0';
- return rv;
-}
-
-char *oauth_sign_hmac_sha1 (const char *m, const char *k) {
- return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k)));
-}
-
-char *oauth_sign_hmac_sha1_raw (const char *m, const size_t ml, const char *k, const size_t kl) {
- PK11SlotInfo *slot = NULL;
- PK11SymKey *pkey = NULL;
- PK11Context *context = NULL;
- unsigned char digest[20]; // Is there a way to tell how large the output is?
- unsigned int len;
- SECStatus s;
- SECItem keyItem, noParams;
- char *rv=NULL;
-
- keyItem.type = siBuffer;
- keyItem.data = (unsigned char*) k;
- keyItem.len = kl;
-
- noParams.type = siBuffer;
- noParams.data = NULL;
- noParams.len = 0;
-
- oauth_init_nss();
-
- slot = PK11_GetInternalKeySlot();
- if (!slot) goto looser;
- pkey = PK11_ImportSymKey(slot, CKM_SHA_1_HMAC, PK11_OriginUnwrap, CKA_SIGN, &keyItem, NULL);
- if (!pkey) goto looser;
- context = PK11_CreateContextBySymKey(CKM_SHA_1_HMAC, CKA_SIGN, pkey, &noParams);
- if (!context) goto looser;
-
- s = PK11_DigestBegin(context);
- if (s != SECSuccess) goto looser;
- s = PK11_DigestOp(context, (unsigned char*) m, ml);
- if (s != SECSuccess) goto looser;
- s = PK11_DigestFinal(context, digest, &len, sizeof digest);
- if (s != SECSuccess) goto looser;
-
- rv=oauth_encode_base64(len, digest);
-
-looser:
- if (context) PK11_DestroyContext(context, PR_TRUE);
- if (pkey) PK11_FreeSymKey(pkey);
- if (slot) PK11_FreeSlot(slot);
- return rv;
-}
-
-char *oauth_sign_rsa_sha1 (const char *m, const char *k) {
- PK11SlotInfo *slot = NULL;
- SECKEYPrivateKey *pkey = NULL;
- SECItem signature;
- SECStatus s;
- SECItem der;
- char *rv=NULL;
-
- char *key = oauth_strip_pkcs(k, NS_PRIV_HEADER, NS_PRIV_TRAILER);
- if (!key) return NULL;
-
- oauth_init_nss();
-
- slot = PK11_GetInternalKeySlot();
- if (!slot) goto looser;
- s = ATOB_ConvertAsciiToItem(&der, key);
- if (s != SECSuccess) goto looser;
- s = PK11_ImportDERPrivateKeyInfoAndReturnKey(slot, &der, NULL, NULL, PR_FALSE, PR_TRUE, KU_ALL, &pkey, NULL);
- SECITEM_FreeItem(&der, PR_FALSE);
- if (s != SECSuccess) goto looser;
- if (!pkey) goto looser;
- if (pkey->keyType != rsaKey) goto looser;
- s = SEC_SignData(&signature, (unsigned char*) m, strlen(m), pkey, SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE);
- if (s != SECSuccess) goto looser;
-
- rv=oauth_encode_base64(signature.len, signature.data);
- SECITEM_FreeItem(&signature, PR_FALSE);
-
-looser:
- if (pkey) SECKEY_DestroyPrivateKey(pkey);
- if (slot) PK11_FreeSlot(slot);
- free(key);
- return rv;
-}
-
-int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *sig) {
- PK11SlotInfo *slot = NULL;
- SECKEYPublicKey *pkey = NULL;
- CERTCertificate *cert = NULL;
- SECItem signature;
- SECStatus s;
- SECItem der;
- int rv=0;
-
- char *key = oauth_strip_pkcs(c, NS_CERT_HEADER, NS_CERT_TRAILER);
- if (!key) return 0;
-
- oauth_init_nss();
-
- s = ATOB_ConvertAsciiToItem(&signature, (char*) sig); // XXX cast (const char*) -> (char*)
- if (s != SECSuccess) goto looser;
- slot = PK11_GetInternalKeySlot();
- if (!slot) goto looser;
- s = ATOB_ConvertAsciiToItem(&der, key);
- if (s != SECSuccess) goto looser;
- cert = __CERT_DecodeDERCertificate(&der, PR_TRUE, NULL);
- SECITEM_FreeItem(&der, PR_FALSE);
- if (!cert) goto looser;
- pkey = CERT_ExtractPublicKey(cert);
- if (!pkey) goto looser;
- if (pkey->keyType != rsaKey) goto looser;
-
- s = VFY_VerifyData((unsigned char*) m, strlen(m), pkey, &signature, SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE, NULL);
- if (s == SECSuccess) rv=1;
-#if 0
- else if (PR_GetError()!= SEC_ERROR_BAD_SIGNATURE) rv=-1;
-#endif
-
-looser:
- if (pkey) SECKEY_DestroyPublicKey(pkey);
- if (slot) PK11_FreeSlot(slot);
- free(key);
- return rv;
-}
-
-char *oauth_body_hash_file(char *filename) {
- PK11SlotInfo *slot = NULL;
- PK11Context *context = NULL;
- unsigned char digest[20]; // Is there a way to tell how large the output is?
- unsigned int len;
- SECStatus s;
- char *rv=NULL;
- size_t bl;
- unsigned char fb[BUFSIZ];
-
- FILE *F= fopen(filename, "r");
- if (!F) return NULL;
-
- oauth_init_nss();
-
- slot = PK11_GetInternalKeySlot();
- if (!slot) goto looser;
- context = PK11_CreateDigestContext(SEC_OID_SHA1);
- if (!context) goto looser;
-
- s = PK11_DigestBegin(context);
- if (s != SECSuccess) goto looser;
- while (!feof(F) && (bl=fread(fb,sizeof(char),BUFSIZ, F))>0) {
- s = PK11_DigestOp(context, (unsigned char*) fb, bl);
- if (s != SECSuccess) goto looser;
- }
- s = PK11_DigestFinal(context, digest, &len, sizeof digest);
- if (s != SECSuccess) goto looser;
-
- unsigned char *dgst = xmalloc(len*sizeof(char)); // oauth_body_hash_encode frees the digest..
- memcpy(dgst, digest, len);
- rv=oauth_body_hash_encode(len, dgst);
-
-looser:
- fclose(F);
- if (context) PK11_DestroyContext(context, PR_TRUE);
- if (slot) PK11_FreeSlot(slot);
- return rv;
-}
-
-char *oauth_body_hash_data(size_t length, const char *data) {
- PK11SlotInfo *slot = NULL;
- PK11Context *context = NULL;
- unsigned char digest[20]; // Is there a way to tell how large the output is?
- unsigned int len;
- SECStatus s;
- char *rv=NULL;
-
- oauth_init_nss();
-
- slot = PK11_GetInternalKeySlot();
- if (!slot) goto looser;
- context = PK11_CreateDigestContext(SEC_OID_SHA1);
- if (!context) goto looser;
-
- s = PK11_DigestBegin(context);
- if (s != SECSuccess) goto looser;
- s = PK11_DigestOp(context, (unsigned char*) data, length);
- if (s != SECSuccess) goto looser;
- s = PK11_DigestFinal(context, digest, &len, sizeof digest);
- if (s != SECSuccess) goto looser;
-
- unsigned char *dgst = xmalloc(len*sizeof(char)); // oauth_body_hash_encode frees the digest..
- memcpy(dgst, digest, len);
- rv=oauth_body_hash_encode(len, dgst);
-
-looser:
- if (context) PK11_DestroyContext(context, PR_TRUE);
- if (slot) PK11_FreeSlot(slot);
- return rv;
-}
-
-#else
-/* use http://www.openssl.org/ for hash/sign */
-
-#ifdef _GNU_SOURCE
-/*
- * In addition, as a special exception, the copyright holders give
- * permission to link the code of portions of this program with the
- * OpenSSL library under certain conditions as described in each
- * individual source file, and distribute linked combinations
- * including the two.
- * You must obey the GNU General Public License in all respects
- * for all of the code used other than OpenSSL. If you modify
- * file(s) with this exception, you may extend this exception to your
- * version of the file(s), but you are not obligated to do so. If you
- * do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source
- * files in the program, then also delete it here.
- */
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "xmalloc.h"
-#include "oauth.h" // base64 encode fn's.
-#include <openssl/hmac.h>
-
-char *oauth_sign_hmac_sha1 (const char *m, const char *k) {
- return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k)));
-}
-
-char *oauth_sign_hmac_sha1_raw (const char *m, const size_t ml, const char *k, const size_t kl) {
- unsigned char result[EVP_MAX_MD_SIZE];
- unsigned int resultlen = 0;
-
- HMAC(EVP_sha1(), k, kl,
- (unsigned char*) m, ml,
- result, &resultlen);
-
- return(oauth_encode_base64(resultlen, result));
-}
-
-#include <openssl/evp.h>
-#include <openssl/x509.h>
-#include <openssl/x509v3.h>
-#include <openssl/ssl.h>
-
-char *oauth_sign_rsa_sha1 (const char *m, const char *k) {
- unsigned char *sig = NULL;
- unsigned char *passphrase = NULL;
- unsigned int len=0;
- EVP_MD_CTX md_ctx;
-
- EVP_PKEY *pkey;
- BIO *in;
- in = BIO_new_mem_buf((unsigned char*) k, strlen(k));
- pkey = PEM_read_bio_PrivateKey(in, NULL, 0, passphrase); // generate sign
- BIO_free(in);
-
- if (pkey == NULL) {
- //fprintf(stderr, "liboauth/OpenSSL: can not read private key\n");
- return xstrdup("liboauth/OpenSSL: can not read private key");
- }
-
- len = EVP_PKEY_size(pkey);
- sig = (unsigned char*)xmalloc((len+1)*sizeof(char));
-
- EVP_SignInit(&md_ctx, EVP_sha1());
- EVP_SignUpdate(&md_ctx, m, strlen(m));
- if (EVP_SignFinal (&md_ctx, sig, &len, pkey)) {
- char *tmp;
- sig[len] = '\0';
- tmp = oauth_encode_base64(len,sig);
- OPENSSL_free(sig);
- EVP_PKEY_free(pkey);
- return tmp;
- }
- return xstrdup("liboauth/OpenSSL: rsa-sha1 signing failed");
-}
-
-int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) {
- EVP_MD_CTX md_ctx;
- EVP_PKEY *pkey;
- BIO *in;
- X509 *cert = NULL;
- unsigned char *b64d;
- int slen, err;
-
- in = BIO_new_mem_buf((unsigned char*)c, strlen(c));
- cert = PEM_read_bio_X509(in, NULL, 0, NULL);
- if (cert) {
- pkey = (EVP_PKEY *) X509_get_pubkey(cert);
- X509_free(cert);
- } else {
- pkey = PEM_read_bio_PUBKEY(in, NULL, 0, NULL);
- }
- BIO_free(in);
- if (pkey == NULL) {
- //fprintf(stderr, "could not read cert/pubkey.\n");
- return -2;
- }
-
- b64d= (unsigned char*) xmalloc(sizeof(char)*strlen(s));
- slen = oauth_decode_base64(b64d, s);
-
- EVP_VerifyInit(&md_ctx, EVP_sha1());
- EVP_VerifyUpdate(&md_ctx, m, strlen(m));
- err = EVP_VerifyFinal(&md_ctx, b64d, slen, pkey);
- EVP_MD_CTX_cleanup(&md_ctx);
- EVP_PKEY_free(pkey);
- free(b64d);
- return (err);
-}
-
-
-/**
- * http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html
- */
-char *oauth_body_hash_file(char *filename) {
- unsigned char fb[BUFSIZ];
- EVP_MD_CTX ctx;
- size_t len=0;
- unsigned char *md;
- FILE *F= fopen(filename, "r");
- if (!F) return NULL;
-
- EVP_MD_CTX_init(&ctx);
- EVP_DigestInit(&ctx,EVP_sha1());
- while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) {
- EVP_DigestUpdate(&ctx, fb, len);
- }
- fclose(F);
- len=0;
- md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char));
- EVP_DigestFinal(&ctx, md,(unsigned int*) &len);
- EVP_MD_CTX_cleanup(&ctx);
- return oauth_body_hash_encode(len, md);
-}
-
-char *oauth_body_hash_data(size_t length, const char *data) {
- EVP_MD_CTX ctx;
- size_t len=0;
- unsigned char *md;
- md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char));
- EVP_MD_CTX_init(&ctx);
- EVP_DigestInit(&ctx,EVP_sha1());
- EVP_DigestUpdate(&ctx, data, length);
- EVP_DigestFinal(&ctx, md,(unsigned int*) &len);
- EVP_MD_CTX_cleanup(&ctx);
- return oauth_body_hash_encode(len, md);
-}
-
-#endif
-
-// vi: sts=2 sw=2 ts=2
diff --git a/protocols/Twitter/src/oauth/oauth.c b/protocols/Twitter/src/oauth/oauth.c
deleted file mode 100644
index 0f205572dd..0000000000
--- a/protocols/Twitter/src/oauth/oauth.c
+++ /dev/null
@@ -1,921 +0,0 @@
-/*
- * OAuth string functions in POSIX-C.
- *
- * Copyright 2007-2011 Robin Gareus <robin@gareus.org>
- *
- * The base64 functions are by Jan-Henrik Haukeland, <hauk@tildeslash.com>
- * and un/escape_url() was inspired by libcurl's curl_escape under ISC-license
- * many thanks to Daniel Stenberg <daniel@haxx.se>.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- */
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define WIPE_MEMORY ///< overwrite sensitve data before free()ing it.
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <math.h>
-#include <ctype.h> // isxdigit
-
-#include "xmalloc.h"
-#include "oauth.h"
-
-#ifndef WIN32 // getpid() on POSIX systems
-#include <sys/types.h>
-#include <unistd.h>
-#else
-#define snprintf _snprintf
-#define strncasecmp strnicmp
-#endif
-
-/**
- * Base64 encode one byte
- */
-char oauth_b64_encode(unsigned char u) {
- if(u < 26) return 'A'+u;
- if(u < 52) return 'a'+(u-26);
- if(u < 62) return '0'+(u-52);
- if(u == 62) return '+';
- return '/';
-}
-
-/**
- * Decode a single base64 character.
- */
-unsigned char oauth_b64_decode(char c) {
- if(c >= 'A' && c <= 'Z') return(c - 'A');
- if(c >= 'a' && c <= 'z') return(c - 'a' + 26);
- if(c >= '0' && c <= '9') return(c - '0' + 52);
- if(c == '+') return 62;
- return 63;
-}
-
-/**
- * Return TRUE if 'c' is a valid base64 character, otherwise FALSE
- */
-int oauth_b64_is_base64(char c) {
- if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
- (c >= '0' && c <= '9') || (c == '+') ||
- (c == '/') || (c == '=')) {
- return 1;
- }
- return 0;
-}
-
-/**
- * Base64 encode and return size data in 'src'. The caller must free the
- * returned string.
- *
- * @param size The size of the data in src
- * @param src The data to be base64 encode
- * @return encoded string otherwise NULL
- */
-char *oauth_encode_base64(int size, const unsigned char *src) {
- int i;
- char *out, *p;
-
- if(!src) return NULL;
- if(!size) size= strlen((char *)src);
- out= (char*) xcalloc(sizeof(char), size*4/3+4);
- p= out;
-
- for(i=0; i<size; i+=3) {
- unsigned char b1=0, b2=0, b3=0, b4=0, b5=0, b6=0, b7=0;
- b1= src[i];
- if(i+1<size) b2= src[i+1];
- if(i+2<size) b3= src[i+2];
-
- b4= b1>>2;
- b5= ((b1&0x3)<<4)|(b2>>4);
- b6= ((b2&0xf)<<2)|(b3>>6);
- b7= b3&0x3f;
-
- *p++= oauth_b64_encode(b4);
- *p++= oauth_b64_encode(b5);
-
- if(i+1<size) *p++= oauth_b64_encode(b6);
- else *p++= '=';
-
- if(i+2<size) *p++= oauth_b64_encode(b7);
- else *p++= '=';
- }
- return out;
-}
-
-/**
- * Decode the base64 encoded string 'src' into the memory pointed to by
- * 'dest'.
- *
- * @param dest Pointer to memory for holding the decoded string.
- * Must be large enough to receive the decoded string.
- * @param src A base64 encoded string.
- * @return the length of the decoded string if decode
- * succeeded otherwise 0.
- */
-int oauth_decode_base64(unsigned char *dest, const char *src) {
- if(src && *src) {
- unsigned char *p= dest;
- int k, l= strlen(src)+1;
- unsigned char *buf= (unsigned char*) xcalloc(sizeof(unsigned char), l);
-
- /* Ignore non base64 chars as per the POSIX standard */
- for(k=0, l=0; src[k]; k++) {
- if(oauth_b64_is_base64(src[k])) {
- buf[l++]= src[k];
- }
- }
-
- for(k=0; k<l; k+=4) {
- char c1='A', c2='A', c3='A', c4='A';
- unsigned char b1=0, b2=0, b3=0, b4=0;
- c1= buf[k];
-
- if(k+1<l) c2= buf[k+1];
- if(k+2<l) c3= buf[k+2];
- if(k+3<l) c4= buf[k+3];
-
- b1= oauth_b64_decode(c1);
- b2= oauth_b64_decode(c2);
- b3= oauth_b64_decode(c3);
- b4= oauth_b64_decode(c4);
-
- *p++=((b1<<2)|(b2>>4) );
-
- if(c3 != '=') *p++=(((b2&0xf)<<4)|(b3>>2) );
- if(c4 != '=') *p++=(((b3&0x3)<<6)|b4 );
- }
- free(buf);
- dest[p-dest]='\0';
- return(p-dest);
- }
- return 0;
-}
-
-/**
- * Escape 'string' according to RFC3986 and
- * http://oauth.net/core/1.0/#encoding_parameters.
- *
- * @param string The data to be encoded
- * @return encoded string otherwise NULL
- * The caller must free the returned string.
- */
-char *oauth_url_escape(const char *string) {
- size_t alloc, newlen;
- char *ns = NULL, *testing_ptr = NULL;
- unsigned char in;
- size_t strindex=0;
- size_t length;
-
- if (!string) return xstrdup("");
-
- alloc = strlen(string)+1;
- newlen = alloc;
-
- ns = (char*) xmalloc(alloc);
-
- length = alloc-1;
- while(length--) {
- in = *string;
-
- switch(in){
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case 'a': case 'b': case 'c': case 'd': case 'e':
- case 'f': case 'g': case 'h': case 'i': case 'j':
- case 'k': case 'l': case 'm': case 'n': case 'o':
- case 'p': case 'q': case 'r': case 's': case 't':
- case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
- case 'A': case 'B': case 'C': case 'D': case 'E':
- case 'F': case 'G': case 'H': case 'I': case 'J':
- case 'K': case 'L': case 'M': case 'N': case 'O':
- case 'P': case 'Q': case 'R': case 'S': case 'T':
- case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
- case '_': case '~': case '.': case '-':
- ns[strindex++]=in;
- break;
- default:
- newlen += 2; /* this'll become a %XX */
- if(newlen > alloc) {
- alloc *= 2;
- testing_ptr = (char*) xrealloc(ns, alloc);
- ns = testing_ptr;
- }
- snprintf(&ns[strindex], 4, "%%%02X", in);
- strindex+=3;
- break;
- }
- string++;
- }
- ns[strindex]=0;
- return ns;
-}
-
-#ifndef ISXDIGIT
-# define ISXDIGIT(x) (isxdigit((int) ((unsigned char)x)))
-#endif
-
-/**
- * Parse RFC3986 encoded 'string' back to unescaped version.
- *
- * @param string The data to be unescaped
- * @param olen unless NULL the length of the returned string is stored there.
- * @return decoded string or NULL
- * The caller must free the returned string.
- */
-char *oauth_url_unescape(const char *string, size_t *olen) {
- size_t alloc, strindex=0;
- char *ns = NULL;
- unsigned char in;
- long hex;
-
- if (!string) return NULL;
- alloc = strlen(string)+1;
- ns = (char*) xmalloc(alloc);
-
- while(--alloc > 0) {
- in = *string;
- if(('%' == in) && ISXDIGIT(string[1]) && ISXDIGIT(string[2])) {
- char hexstr[3]; // '%XX'
- hexstr[0] = string[1];
- hexstr[1] = string[2];
- hexstr[2] = 0;
- hex = strtol(hexstr, NULL, 16);
- in = (unsigned char)hex; /* hex is always < 256 */
- string+=2;
- alloc-=2;
- }
- ns[strindex++] = in;
- string++;
- }
- ns[strindex]=0;
- if(olen) *olen = strindex;
- return ns;
-}
-
-/**
- * returns plaintext signature for the given key.
- *
- * the returned string needs to be freed by the caller
- *
- * @param m message to be signed
- * @param k key used for signing
- * @return signature string
- */
-char *oauth_sign_plaintext (const char *m, const char *k) {
- return(oauth_url_escape(k));
-}
-
-/**
- * encode strings and concatenate with '&' separator.
- * The number of strings to be concatenated must be
- * given as first argument.
- * all arguments thereafter must be of type (char *)
- *
- * @param len the number of arguments to follow this parameter
- * @param ... string to escape and added (may be NULL)
- *
- * @return pointer to memory holding the concatenated
- * strings - needs to be free(d) by the caller. or NULL
- * in case we ran out of memory.
- */
-char *oauth_catenc(int len, ...) {
- va_list va;
- int i;
- char *rv = (char*) xmalloc(sizeof(char));
- *rv='\0';
- va_start(va, len);
- for(i=0;i<len;i++) {
- char *arg = va_arg(va, char *);
- char *enc;
- int len;
- enc = oauth_url_escape(arg);
- if(!enc) break;
- len = strlen(enc) + 1 + ((i>0)?1:0);
- if(rv) len+=strlen(rv);
- rv=(char*) xrealloc(rv,len*sizeof(char));
-
- if(i>0) strcat(rv, "&");
- strcat(rv, enc);
- free(enc);
- }
- va_end(va);
- return(rv);
-}
-
-/**
- * splits the given url into a parameter array.
- * (see \ref oauth_serialize_url and \ref oauth_serialize_url_parameters for the reverse)
- *
- * NOTE: Request-parameters-values may include an ampersand character.
- * However if unescaped this function will use them as parameter delimiter.
- * If you need to make such a request, this function since version 0.3.5 allows
- * to use the ASCII SOH (0x01) character as alias for '&' (0x26).
- * (the motivation is convenience: SOH is /untypeable/ and much more
- * unlikely to appear than '&' - If you plan to sign fancy URLs you
- * should not split a query-string, but rather provide the parameter array
- * directly to \ref oauth_serialize_url)
- *
- * @param url the url or query-string to parse.
- * @param argv pointer to a (char *) array where the results are stored.
- * The array is re-allocated to match the number of parameters and each
- * parameter-string is allocated with strdup. - The memory needs to be freed
- * by the caller.
- * @param qesc use query parameter escape (vs post-param-escape) - if set
- * to 1 all '+' are treated as spaces ' '
- *
- * @return number of parameter(s) in array.
- */
-int oauth_split_post_paramters(const char *url, char ***argv, short qesc) {
- int argc=0;
- char *token, *tmp, *t1;
- if (!argv) return 0;
- if (!url) return 0;
- t1=xstrdup(url);
-
- // '+' represents a space, in a URL query string
- while ((qesc&1) && (tmp=strchr(t1,'+'))) *tmp=' ';
-
- tmp=t1;
- while((token=strtok(tmp,"&?"))) {
- if(!strncasecmp("oauth_signature=",token,16)) continue;
- (*argv)=(char**) xrealloc(*argv,sizeof(char*)*(argc+1));
- while (!(qesc&2) && (tmp=strchr(token,'\001'))) *tmp='&';
- if (argc>0 || (qesc&4))
- (*argv)[argc]=oauth_url_unescape(token, NULL);
- else
- (*argv)[argc]=xstrdup(token);
- if (argc==0 && strstr(token, ":/")) {
- // HTTP does not allow empty absolute paths, so the URL
- // 'http://example.com' is equivalent to 'http://example.com/' and should
- // be treated as such for the purposes of OAuth signing (rfc2616, section 3.2.1)
- // see http://groups.google.com/group/oauth/browse_thread/thread/c44b6f061bfd98c?hl=en
- char *slash=strstr(token, ":/");
- while (slash && *(++slash) == '/') ; // skip slashes eg /xxx:[\/]*/
-#if 0
- // skip possibly unescaped slashes in the userinfo - they're not allowed by RFC2396 but have been seen.
- // the hostname/IP may only contain alphanumeric characters - so we're safe there.
- if (slash && strchr(slash,'@')) slash=strchr(slash,'@');
-#endif
- if (slash && !strchr(slash,'/')) {
-#ifdef DEBUG_OAUTH
- fprintf(stderr, "\nliboauth: added trailing slash to URL: '%s'\n\n", token);
-#endif
- free((*argv)[argc]);
- (*argv)[argc]= (char*) xmalloc(sizeof(char)*(2+strlen(token)));
- strcpy((*argv)[argc],token);
- strcat((*argv)[argc],"/");
- }
- }
- if (argc==0 && (tmp=strstr((*argv)[argc],":80/"))) {
- memmove(tmp, tmp+3, strlen(tmp+2));
- }
- tmp=NULL;
- argc++;
- }
-
- free(t1);
- return argc;
-}
-
-int oauth_split_url_parameters(const char *url, char ***argv) {
- return oauth_split_post_paramters(url, argv, 1);
-}
-
-/**
- * build a url query string from an array.
- *
- * @param argc the total number of elements in the array
- * @param start element in the array at which to start concatenating.
- * @param argv parameter-array to concatenate.
- * @return url string needs to be freed by the caller.
- *
- */
-char *oauth_serialize_url (int argc, int start, char **argv) {
- return oauth_serialize_url_sep( argc, start, argv, "&", 0);
-}
-
-/**
- * encode query parameters from an array.
- *
- * @param argc the total number of elements in the array
- * @param start element in the array at which to start concatenating.
- * @param argv parameter-array to concatenate.
- * @param sep separator for parameters (usually "&")
- * @param mod - bitwise modifiers:
- * 1: skip all values that start with "oauth_"
- * 2: skip all values that don't start with "oauth_"
- * 4: add double quotation marks around values (use with sep=", " to generate HTTP Authorization header).
- * @return url string needs to be freed by the caller.
- */
-char *oauth_serialize_url_sep (int argc, int start, char **argv, char *sep, int mod) {
- char *tmp, *t1;
- int i;
- int first=1;
- int seplen=strlen(sep);
- char *query = (char*) xmalloc(sizeof(char));
- *query='\0';
- for(i=start; i< argc; i++) {
- int len = 0;
- if ((mod&1)==1 && (strncmp(argv[i],"oauth_",6) == 0 || strncmp(argv[i],"x_oauth_",8) == 0) ) continue;
- if ((mod&2)==2 && (strncmp(argv[i],"oauth_",6) != 0 && strncmp(argv[i],"x_oauth_",8) != 0) && i!=0) continue;
-
- if (query) len+=strlen(query);
-
- if (i==start && i==0 && strstr(argv[i], ":/")) {
- tmp=xstrdup(argv[i]);
-#if 1 // encode white-space in the base-url
- while ((t1=strchr(tmp,' '))) {
-# if 0
- *t1='+';
-# else
- size_t off = t1-tmp;
- char *t2 = (char*) xmalloc(sizeof(char)*(3+strlen(tmp)));
- strcpy(t2, tmp);
- strcpy(t2+off+2, tmp+off);
- *(t2+off)='%'; *(t2+off+1)='2'; *(t2+off+2)='0';
- free(tmp);
- tmp=t2;
-# endif
-#endif
- }
- len+=strlen(tmp);
- } else if(!(t1=strchr(argv[i], '='))) {
- // see http://oauth.net/core/1.0/#anchor14
- // escape parameter names and arguments but not the '='
- tmp=xstrdup(argv[i]);
- tmp=(char*) xrealloc(tmp,(strlen(tmp)+2)*sizeof(char));
- strcat(tmp,"=");
- len+=strlen(tmp);
- } else {
- *t1=0;
- tmp = oauth_url_escape(argv[i]);
- *t1='=';
- t1 = oauth_url_escape((t1+1));
- tmp=(char*) xrealloc(tmp,(strlen(tmp)+strlen(t1)+2+(mod&4?2:0))*sizeof(char));
- strcat(tmp,"=");
- if (mod&4) strcat(tmp,"\"");
- strcat(tmp,t1);
- if (mod&4) strcat(tmp,"\"");
- free(t1);
- len+=strlen(tmp);
- }
- len+=seplen+1;
- query=(char*) xrealloc(query,len*sizeof(char));
- strcat(query, ((i==start||first)?"":sep));
- first=0;
- strcat(query, tmp);
- if (i==start && i==0 && strstr(tmp, ":/")) {
- strcat(query, "?");
- first=1;
- }
- free(tmp);
- }
- return (query);
-}
-
-/**
- * build a query parameter string from an array.
- *
- * This function is a shortcut for \ref oauth_serialize_url (argc, 1, argv).
- * It strips the leading host/path, which is usually the first
- * element when using oauth_split_url_parameters on an URL.
- *
- * @param argc the total number of elements in the array
- * @param argv parameter-array to concatenate.
- * @return url string needs to be freed by the caller.
- */
-char *oauth_serialize_url_parameters (int argc, char **argv) {
- return oauth_serialize_url(argc, 1, argv);
-}
-
-/**
- * generate a random string between 15 and 32 chars length
- * and return a pointer to it. The value needs to be freed by the
- * caller
- *
- * @return zero terminated random string.
- */
-#if !defined HAVE_OPENSSL_HMAC_H && !defined USE_NSS
-/* pre liboauth-0.7.2 and possible future versions that don't use OpenSSL or NSS */
-char *oauth_gen_nonce() {
- char *nc;
- static int rndinit = 1;
- const char *chars = "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789_";
- unsigned int max = strlen( chars );
- int i, len;
-
- if(rndinit) {srand(time(NULL)
-#ifndef WIN32 // quick windows check.
- * getpid()
-#endif
- ); rndinit=0;} // seed random number generator - FIXME: we can do better ;)
-
- len=15+floor(rand()*16.0/(double)RAND_MAX);
- nc = (char*) xmalloc((len+1)*sizeof(char));
- for(i=0;i<len; i++) {
- nc[i] = chars[ rand() % max ];
- }
- nc[i]='\0';
- return (nc);
-}
-#else // OpenSSL or NSS random number generator
-#ifdef USE_NSS
- void oauth_init_nss(); //decladed in hash.c
-# include "pk11pub.h"
-# define MY_RAND PK11_GenerateRandom
-# define MY_SRAND oauth_init_nss();
-#else
-# ifdef _GNU_SOURCE
-/* Note: the OpenSSL/GPL exemption stated
- * verbosely in hash.c applies to this code as well. */
-# endif
-# include <openssl/rand.h>
-# define MY_RAND RAND_bytes
-# define MY_SRAND ;
-#endif
-char *oauth_gen_nonce() {
- char *nc;
- unsigned char buf;
- const char *chars = "abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789_";
- unsigned int max = strlen(chars);
- int i, len;
-
- MY_SRAND
- MY_RAND(&buf, 1);
- len=15+(((short)buf)&0x0f);
- nc = (char*) xmalloc((len+1)*sizeof(char));
- for(i=0;i<len; i++) {
- MY_RAND(&buf, 1);
- nc[i] = chars[ ((short)buf) % max ];
- }
- nc[i]='\0';
- return (nc);
-}
-#endif
-
-/**
- * string compare function for oauth parameters.
- *
- * used with qsort. needed to normalize request parameters.
- * see http://oauth.net/core/1.0/#anchor14
- */
-int oauth_cmpstringp(const void *p1, const void *p2) {
- char *v1,*v2;
- char *t1,*t2;
- int rv;
- // TODO: this is not fast - we should escape the
- // array elements (once) before sorting.
- v1=oauth_url_escape(* (char * const *)p1);
- v2=oauth_url_escape(* (char * const *)p2);
-
- // '=' signs are not "%3D" !
- if ((t1=strstr(v1,"%3D"))) {
- t1[0]='\0'; t1[1]='='; t1[2]='=';
- }
- if ((t2=strstr(v2,"%3D"))) {
- t2[0]='\0'; t2[1]='='; t2[2]='=';
- }
-
- // compare parameter names
- rv=strcmp(v1,v2);
- if (rv!=0) {
- if (v1) free(v1);
- if (v2) free(v2);
- return rv;
- }
-
- // if parameter names are equal, sort by value.
- if (t1) t1[0]='=';
- if (t2) t2[0]='=';
- if (t1 && t2) rv=strcmp(t1,t2);
- else if (!t1 && !t2) rv=0;
- else if (!t1) rv=-1;
- else rv=1;
-
- if (v1) free(v1);
- if (v2) free(v2);
- return rv;
-}
-
-/**
- * search array for parameter key.
- * @param argv length of array to search
- * @param argc parameter array to search
- * @param key key of parameter to check.
- *
- * @return FALSE (0) if array does not contain a parameter with given key, TRUE (1) otherwise.
- */
-int oauth_param_exists(char **argv, int argc, char *key) {
- int i;
- size_t l= strlen(key);
- for (i=0;i<argc;i++)
- if (strlen(argv[i])>l && !strncmp(argv[i],key,l) && argv[i][l] == '=') return 1;
- return 0;
-}
-
-/**
- * add query parameter to array
- *
- * @param argcp pointer to array length int
- * @param argvp pointer to array values
- * @param addparam parameter to add (eg. "foo=bar")
- */
-void oauth_add_param_to_array(int *argcp, char ***argvp, const char *addparam) {
- (*argvp)=(char**) xrealloc(*argvp,sizeof(char*)*((*argcp)+1));
- (*argvp)[(*argcp)++]= (char*) xstrdup(addparam);
-}
-
-/**
- *
- */
-void oauth_add_protocol(int *argcp, char ***argvp,
- OAuthMethod method,
- const char *c_key, //< consumer key - posted plain text
- const char *t_key //< token key - posted plain text in URL
- ){
- char oarg[1024];
-
- // add OAuth specific arguments
- if (!oauth_param_exists(*argvp,*argcp,"oauth_nonce")) {
- char *tmp;
- snprintf(oarg, 1024, "oauth_nonce=%s", (tmp=oauth_gen_nonce()));
- oauth_add_param_to_array(argcp, argvp, oarg);
- free(tmp);
- }
-
- if (!oauth_param_exists(*argvp,*argcp,"oauth_timestamp")) {
- snprintf(oarg, 1024, "oauth_timestamp=%li", (long int) time(NULL));
- oauth_add_param_to_array(argcp, argvp, oarg);
- }
-
- if (t_key) {
- snprintf(oarg, 1024, "oauth_token=%s", t_key);
- oauth_add_param_to_array(argcp, argvp, oarg);
- }
-
- snprintf(oarg, 1024, "oauth_consumer_key=%s", c_key);
- oauth_add_param_to_array(argcp, argvp, oarg);
-
- snprintf(oarg, 1024, "oauth_signature_method=%s",
- method==0?"HMAC-SHA1":method==1?"RSA-SHA1":"PLAINTEXT");
- oauth_add_param_to_array(argcp, argvp, oarg);
-
- if (!oauth_param_exists(*argvp,*argcp,"oauth_version")) {
- snprintf(oarg, 1024, "oauth_version=1.0");
- oauth_add_param_to_array(argcp, argvp, oarg);
- }
-
-#if 0 // oauth_version 1.0 Rev A
- if (!oauth_param_exists(argv,argc,"oauth_callback")) {
- snprintf(oarg, 1024, "oauth_callback=oob");
- oauth_add_param_to_array(argcp, argvp, oarg);
- }
-#endif
-
-}
-
-char *oauth_sign_url (const char *url, char **postargs,
- OAuthMethod method,
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
- return oauth_sign_url2(url, postargs,
- method, NULL,
- c_key, c_secret,
- t_key, t_secret);
-}
-
-char *oauth_sign_url2 (const char *url, char **postargs,
- OAuthMethod method,
- const char *http_method, //< HTTP request method
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
- int argc;
- char **argv = NULL;
- char *rv;
-
- if (postargs)
- argc = oauth_split_post_paramters(url, &argv, 0);
- else
- argc = oauth_split_url_parameters(url, &argv);
-
- rv=oauth_sign_array2(&argc, &argv, postargs,
- method, http_method,
- c_key, c_secret, t_key, t_secret);
-
- oauth_free_array(&argc, &argv);
- return(rv);
-}
-
-char *oauth_sign_array (int *argcp, char***argvp,
- char **postargs,
- OAuthMethod method,
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
- return oauth_sign_array2 (argcp, argvp,
- postargs, method,
- NULL,
- c_key, c_secret,
- t_key, t_secret);
-}
-
-void oauth_sign_array2_process (int *argcp, char***argvp,
- char **postargs,
- OAuthMethod method,
- const char *http_method, //< HTTP request method
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
- char oarg[1024];
- char *query;
- char *okey, *odat, *sign;
- char *http_request_method;
-
- if (!http_method) {
- http_request_method = xstrdup(postargs?"POST":"GET");
- } else {
- int i;
- http_request_method = xstrdup(http_method);
- for (i=0;i<strlen(http_request_method);i++)
- http_request_method[i]=toupper(http_request_method[i]);
- }
-
- // add required OAuth protocol parameters
- oauth_add_protocol(argcp, argvp, method, c_key, t_key);
-
- // sort parameters
- qsort(&(*argvp)[1], (*argcp)-1, sizeof(char *), oauth_cmpstringp);
-
- // serialize URL - base-url
- query= oauth_serialize_url_parameters(*argcp, *argvp);
-
- // generate signature
- okey = oauth_catenc(2, c_secret, t_secret);
- odat = oauth_catenc(3, http_request_method, (*argvp)[0], query); // base-string
- free(http_request_method);
-#ifdef DEBUG_OAUTH
- fprintf (stderr, "\nliboauth: data to sign='%s'\n\n", odat);
- fprintf (stderr, "\nliboauth: key='%s'\n\n", okey);
-#endif
- switch(method) {
- case OA_RSA:
- sign = oauth_sign_rsa_sha1(odat,okey); // XXX okey needs to be RSA key!
- break;
- case OA_PLAINTEXT:
- sign = oauth_sign_plaintext(odat,okey);
- break;
- default:
- sign = oauth_sign_hmac_sha1(odat,okey);
- }
-#ifdef WIPE_MEMORY
- memset(okey,0, strlen(okey));
- memset(odat,0, strlen(odat));
-#endif
- free(odat);
- free(okey);
-
- // append signature to query args.
- snprintf(oarg, 1024, "oauth_signature=%s",sign);
- oauth_add_param_to_array(argcp, argvp, oarg);
- free(sign);
- if(query) free(query);
-}
-
-char *oauth_sign_array2 (int *argcp, char***argvp,
- char **postargs,
- OAuthMethod method,
- const char *http_method, //< HTTP request method
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
-
- char *result;
- oauth_sign_array2_process(argcp, argvp, postargs, method, http_method, c_key, c_secret, t_key, t_secret);
-
- // build URL params
- result = oauth_serialize_url(*argcp, (postargs?1:0), *argvp);
-
- if(postargs) {
- *postargs = result;
- result = xstrdup((*argvp)[0]);
- }
-
- return result;
-}
-
-
-/**
- * free array args
- *
- * @param argcp pointer to array length int
- * @param argvp pointer to array values to be free()d
- */
-void oauth_free_array(int *argcp, char ***argvp) {
- int i;
- for (i=0;i<(*argcp);i++) {
- free((*argvp)[i]);
- }
- if(*argvp) free(*argvp);
-}
-
-/**
- * base64 encode digest, free it and return a URL parameter
- * with the oauth_body_hash
- */
-char *oauth_body_hash_encode(size_t len, unsigned char *digest) {
- char *sign=oauth_encode_base64(len,digest);
- char *sig_url = (char*)xmalloc(17+strlen(sign));
- sprintf(sig_url,"oauth_body_hash=%s", sign);
- free(sign);
- free(digest);
- return sig_url;
-}
-
-
-/**
- * compare two strings in constant-time (as to not let an
- * attacker guess how many leading chars are correct:
- * http://rdist.root.org/2010/01/07/timing-independent-array-comparison/ )
- *
- * @param a string to compare
- * @param b string to compare
- * @param len_a length of string a
- * @param len_b length of string b
- *
- * returns 0 (false) if strings are not equal, and 1 (true) if strings are equal.
- */
-int oauth_time_independent_equals_n(const char* a, const char* b, size_t len_a, size_t len_b) {
- int diff, i, j;
- if (a == NULL) return (b == NULL);
- else if (b == NULL) return 0;
- else if (len_b == 0) return (len_a == 0);
- diff = len_a ^ len_b;
- j=0;
- for (i=0; i<len_a; ++i) {
- diff |= a[i] ^ b[j];
- j = (j+1) % len_b;
- }
- return diff == 0;
-}
-int oauth_time_indepenent_equals_n(const char* a, const char* b, size_t len_a, size_t len_b) {
- return oauth_time_independent_equals_n(a, b, len_a, len_b);
-}
-
-int oauth_time_independent_equals(const char* a, const char* b) {
- return oauth_time_independent_equals_n (a, b, a?strlen(a):0, b?strlen(b):0);
-}
-
-int oauth_time_indepenent_equals(const char* a, const char* b) {
- return oauth_time_independent_equals_n (a, b, a?strlen(a):0, b?strlen(b):0);
-}
-
-/**
- * xep-0235 - TODO
- */
-char *oauth_sign_xmpp (const char *xml,
- OAuthMethod method,
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) {
-
- return NULL;
-}
-
-// vi: sts=2 sw=2 ts=2
diff --git a/protocols/Twitter/src/oauth/oauth.h b/protocols/Twitter/src/oauth/oauth.h
deleted file mode 100644
index 4efb472fc8..0000000000
--- a/protocols/Twitter/src/oauth/oauth.h
+++ /dev/null
@@ -1,764 +0,0 @@
-/**
- * @brief OAuth.net implementation in POSIX-C.
- * @file oauth.h
- * @author Robin Gareus <robin@gareus.org>
- *
- * Copyright 2007-2011 Robin Gareus <robin@gareus.org>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- */
-#ifndef _OAUTH_H
-#define _OAUTH_H 1
-
-#ifndef DOXYGEN_IGNORE
-// liboauth version
-#define LIBOAUTH_VERSION "0.9.6"
-#define LIBOAUTH_VERSION_MAJOR 0
-#define LIBOAUTH_VERSION_MINOR 9
-#define LIBOAUTH_VERSION_MICRO 6
-
-//interface revision number
-//http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
-#define LIBOAUTH_CUR 8
-#define LIBOAUTH_REV 3
-#define LIBOAUTH_AGE 8
-#endif
-
-#ifdef __GNUC__
-# define OA_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > x || __GNUC__ == x && __GNUC_MINOR__ >= y)
-#else
-# define OA_GCC_VERSION_AT_LEAST(x,y) 0
-#endif
-
-#ifndef attribute_deprecated
-#if OA_GCC_VERSION_AT_LEAST(3,1)
-# define attribute_deprecated __attribute__((deprecated))
-#else
-# define attribute_deprecated
-#endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** \enum OAuthMethod
- * signature method to used for signing the request.
- */
-typedef enum {
- OA_HMAC=0, ///< use HMAC-SHA1 request signing method
- OA_RSA, ///< use RSA signature
- OA_PLAINTEXT ///< use plain text signature (for testing only)
- } OAuthMethod;
-
-/**
- * Base64 encode and return size data in 'src'. The caller must free the
- * returned string.
- *
- * @param size The size of the data in src
- * @param src The data to be base64 encode
- * @return encoded string otherwise NULL
- */
-char *oauth_encode_base64(int size, const unsigned char *src);
-
-/**
- * Decode the base64 encoded string 'src' into the memory pointed to by
- * 'dest'.
- *
- * @param dest Pointer to memory for holding the decoded string.
- * Must be large enough to receive the decoded string.
- * @param src A base64 encoded string.
- * @return the length of the decoded string if decode
- * succeeded otherwise 0.
- */
-int oauth_decode_base64(unsigned char *dest, const char *src);
-
-/**
- * Escape 'string' according to RFC3986 and
- * http://oauth.net/core/1.0/#encoding_parameters.
- *
- * @param string The data to be encoded
- * @return encoded string otherwise NULL
- * The caller must free the returned string.
- */
-char *oauth_url_escape(const char *string);
-
-/**
- * Parse RFC3986 encoded 'string' back to unescaped version.
- *
- * @param string The data to be unescaped
- * @param olen unless NULL the length of the returned string is stored there.
- * @return decoded string or NULL
- * The caller must free the returned string.
- */
-char *oauth_url_unescape(const char *string, size_t *olen);
-
-
-/**
- * returns base64 encoded HMAC-SHA1 signature for
- * given message and key.
- * both data and key need to be urlencoded.
- *
- * the returned string needs to be freed by the caller
- *
- * @param m message to be signed
- * @param k key used for signing
- * @return signature string.
- */
-char *oauth_sign_hmac_sha1 (const char *m, const char *k);
-
-/**
- * same as \ref oauth_sign_hmac_sha1 but allows
- * to specify length of message and key (in case they contain null chars).
- *
- * @param m message to be signed
- * @param ml length of message
- * @param k key used for signing
- * @param kl length of key
- * @return signature string.
- */
-char *oauth_sign_hmac_sha1_raw (const char *m, const size_t ml, const char *k, const size_t kl);
-
-/**
- * returns plaintext signature for the given key.
- *
- * the returned string needs to be freed by the caller
- *
- * @param m message to be signed
- * @param k key used for signing
- * @return signature string
- */
-char *oauth_sign_plaintext (const char *m, const char *k);
-
-/**
- * returns RSA-SHA1 signature for given data.
- * the returned signature needs to be freed by the caller.
- *
- * @param m message to be signed
- * @param k private-key PKCS and Base64-encoded
- * @return base64 encoded signature string.
- */
-char *oauth_sign_rsa_sha1 (const char *m, const char *k);
-
-/**
- * verify RSA-SHA1 signature.
- *
- * returns the output of EVP_VerifyFinal() for a given message,
- * cert/pubkey and signature.
- *
- * @param m message to be verified
- * @param c public-key or x509 certificate
- * @param s base64 encoded signature
- * @return 1 for a correct signature, 0 for failure and -1 if some other error occurred
- */
-int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s);
-
-/**
- * url-escape strings and concatenate with '&' separator.
- * The number of strings to be concatenated must be
- * given as first argument.
- * all arguments thereafter must be of type (char *)
- *
- * @param len the number of arguments to follow this parameter
- *
- * @return pointer to memory holding the concatenated
- * strings - needs to be free(d) by the caller. or NULL
- * in case we ran out of memory.
- */
-char *oauth_catenc(int len, ...);
-
-/**
- * splits the given url into a parameter array.
- * (see \ref oauth_serialize_url and \ref oauth_serialize_url_parameters for the reverse)
- * (see \ref oauth_split_post_paramters for a more generic version)
- *
- * @param url the url or query-string to parse; may be NULL
- * @param argv pointer to a (char *) array where the results are stored.
- * The array is re-allocated to match the number of parameters and each
- * parameter-string is allocated with strdup. - The memory needs to be freed
- * by the caller.
- *
- * @return number of parameter(s) in array.
- */
-int oauth_split_url_parameters(const char *url, char ***argv);
-
-/**
- * splits the given url into a parameter array.
- * (see \ref oauth_serialize_url and \ref oauth_serialize_url_parameters for the reverse)
- *
- * @param url the url or query-string to parse.
- * @param argv pointer to a (char *) array where the results are stored.
- * The array is re-allocated to match the number of parameters and each
- * parameter-string is allocated with strdup. - The memory needs to be freed
- * by the caller.
- * @param qesc use query parameter escape (vs post-param-escape) - if set
- * to 1 all '+' are treated as spaces ' '
- *
- * @return number of parameter(s) in array.
- */
-int oauth_split_post_paramters(const char *url, char ***argv, short qesc);
-
-/**
- * build a url query string from an array.
- *
- * @param argc the total number of elements in the array
- * @param start element in the array at which to start concatenating.
- * @param argv parameter-array to concatenate.
- * @return url string needs to be freed by the caller.
- *
- */
-char *oauth_serialize_url (int argc, int start, char **argv);
-
-/**
- * encode query parameters from an array.
- *
- * @param argc the total number of elements in the array
- * @param start element in the array at which to start concatenating.
- * @param argv parameter-array to concatenate.
- * @param sep separator for parameters (usually "&")
- * @param mod - bitwise modifiers:
- * 1: skip all values that start with "oauth_"
- * 2: skip all values that don't start with "oauth_"
- * 4: double quotation marks are added around values (use with sep ", " for HTTP Authorization header).
- * @return url string needs to be freed by the caller.
- */
-char *oauth_serialize_url_sep (int argc, int start, char **argv, char *sep, int mod);
-
-/**
- * build a query parameter string from an array.
- *
- * This function is a shortcut for \ref oauth_serialize_url (argc, 1, argv).
- * It strips the leading host/path, which is usually the first
- * element when using oauth_split_url_parameters on an URL.
- *
- * @param argc the total number of elements in the array
- * @param argv parameter-array to concatenate.
- * @return url string needs to be freed by the caller.
- */
-char *oauth_serialize_url_parameters (int argc, char **argv);
-
-/**
- * generate a random string between 15 and 32 chars length
- * and return a pointer to it. The value needs to be freed by the
- * caller
- *
- * @return zero terminated random string.
- */
-char *oauth_gen_nonce();
-
-/**
- * string compare function for oauth parameters.
- *
- * used with qsort. needed to normalize request parameters.
- * see http://oauth.net/core/1.0/#anchor14
- */
-int oauth_cmpstringp(const void *p1, const void *p2);
-
-
-/**
- * search array for parameter key.
- * @param argv length of array to search
- * @param argc parameter array to search
- * @param key key of parameter to check.
- *
- * @return FALSE (0) if array does not contain a parameter with given key, TRUE (1) otherwise.
- */
-int oauth_param_exists(char **argv, int argc, char *key);
-
-/**
- * add query parameter to array
- *
- * @param argcp pointer to array length int
- * @param argvp pointer to array values
- * @param addparam parameter to add (eg. "foo=bar")
- */
-void oauth_add_param_to_array(int *argcp, char ***argvp, const char *addparam);
-
-/**
- * free array args
- *
- * @param argcp pointer to array length int
- * @param argvp pointer to array values to be free()d
- */
-void oauth_free_array(int *argcp, char ***argvp);
-
-/**
- * compare two strings in constant-time (as to not let an
- * attacker guess how many leading chars are correct:
- * http://rdist.root.org/2010/01/07/timing-independent-array-comparison/ )
- *
- * @param a string to compare
- * @param b string to compare
- * @param len_a length of string a
- * @param len_b length of string b
- *
- * returns 0 (false) if strings are not equal, and 1 (true) if strings are equal.
- */
-int oauth_time_independent_equals_n(const char* a, const char* b, size_t len_a, size_t len_b);
-
-/**
- * @deprecated Use oauth_time_independent_equals_n() instead.
- */
-int oauth_time_indepenent_equals_n(const char* a, const char* b, size_t len_a, size_t len_b) attribute_deprecated;
-
-/**
- * compare two strings in constant-time.
- * wrapper to \ref oauth_time_independent_equals_n
- * which calls strlen() for each argument.
- *
- * @param a string to compare
- * @param b string to compare
- *
- * returns 0 (false) if strings are not equal, and 1 (true) if strings are equal.
- */
-int oauth_time_independent_equals(const char* a, const char* b);
-
-/**
- * @deprecated Use oauth_time_independent_equals() instead.
- */
-int oauth_time_indepenent_equals(const char* a, const char* b) attribute_deprecated;
-
-/**
- * calculate OAuth-signature for a given HTTP request URL, parameters and oauth-tokens.
- *
- * if 'postargs' is NULL a "GET" request is signed and the
- * signed URL is returned. Else this fn will modify 'postargs'
- * to point to memory that contains the signed POST-variables
- * and returns the base URL.
- *
- * both, the return value and (if given) 'postargs' need to be freed
- * by the caller.
- *
- * @param url The request URL to be signed. append all GET or POST
- * query-parameters separated by either '?' or '&' to this parameter.
- *
- * @param postargs This parameter points to an area where the return value
- * is stored. If 'postargs' is NULL, no value is stored.
- *
- * @param method specify the signature method to use. It is of type
- * \ref OAuthMethod and most likely \ref OA_HMAC.
- *
- * @param http_method The HTTP request method to use (ie "GET", "PUT",..)
- * If NULL is given as 'http_method' this defaults to "GET" when
- * 'postargs' is also NULL and when postargs is not NULL "POST" is used.
- *
- * @param c_key consumer key
- * @param c_secret consumer secret
- * @param t_key token key
- * @param t_secret token secret
- *
- * @return the signed url or NULL if an error occurred.
- *
- */
-char *oauth_sign_url2 (const char *url, char **postargs,
- OAuthMethod method,
- const char *http_method, //< HTTP request method
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- );
-
-/**
- * @deprecated Use oauth_sign_url2() instead.
- */
-char *oauth_sign_url (const char *url, char **postargs,
- OAuthMethod method,
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) attribute_deprecated;
-
-
-/**
- * the back-end behind by /ref oauth_sign_array2.
- * however it does not serialize the signed URL again.
- * The user needs to call /ref oauth_serialize_url (oA)
- * and /ref oauth_free_array to do so.
- *
- * This allows to split parts of the URL to be used for
- * OAuth HTTP Authorization header:
- * see http://oauth.net/core/1.0a/#consumer_req_param
- * the oauthtest2 example code does so.
- *
- *
- * @param argcp pointer to array length int
- * @param argvp pointer to array values
- * (argv[0]="http://example.org:80/" argv[1]="first=QueryParamater" ..
- * the array is modified: fi. oauth_ parameters are added)
- * These arrays can be generated with /ref oauth_split_url_parameters
- * or /ref oauth_split_post_paramters.
- *
- * @param postargs This parameter points to an area where the return value
- * is stored. If 'postargs' is NULL, no value is stored.
- *
- * @param method specify the signature method to use. It is of type
- * \ref OAuthMethod and most likely \ref OA_HMAC.
- *
- * @param http_method The HTTP request method to use (ie "GET", "PUT",..)
- * If NULL is given as 'http_method' this defaults to "GET" when
- * 'postargs' is also NULL and when postargs is not NULL "POST" is used.
- *
- * @param c_key consumer key
- * @param c_secret consumer secret
- * @param t_key token key
- * @param t_secret token secret
- *
- * @return void
- *
- */
-void oauth_sign_array2_process (int *argcp, char***argvp,
- char **postargs,
- OAuthMethod method,
- const char *http_method, //< HTTP request method
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- );
-
-/**
- * same as /ref oauth_sign_url
- * with the url already split into parameter array
- *
- * @param argcp pointer to array length int
- * @param argvp pointer to array values
- * (argv[0]="http://example.org:80/" argv[1]="first=QueryParamater" ..
- * the array is modified: fi. oauth_ parameters are added)
- * These arrays can be generated with /ref oauth_split_url_parameters
- * or /ref oauth_split_post_paramters.
- *
- * @param postargs This parameter points to an area where the return value
- * is stored. If 'postargs' is NULL, no value is stored.
- *
- * @param method specify the signature method to use. It is of type
- * \ref OAuthMethod and most likely \ref OA_HMAC.
- *
- * @param http_method The HTTP request method to use (ie "GET", "PUT",..)
- * If NULL is given as 'http_method' this defaults to "GET" when
- * 'postargs' is also NULL and when postargs is not NULL "POST" is used.
- *
- * @param c_key consumer key
- * @param c_secret consumer secret
- * @param t_key token key
- * @param t_secret token secret
- *
- * @return the signed url or NULL if an error occurred.
- */
-char *oauth_sign_array2 (int *argcp, char***argvp,
- char **postargs,
- OAuthMethod method,
- const char *http_method, //< HTTP request method
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- );
-
-/**
- * @deprecated Use oauth_sign_array2() instead.
- */
-char *oauth_sign_array (int *argcp, char***argvp,
- char **postargs,
- OAuthMethod method,
- const char *c_key, //< consumer key - posted plain text
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_key, //< token key - posted plain text in URL
- const char *t_secret //< token secret - used as 2st part of secret-key
- ) attribute_deprecated;
-
-
-/**
- * calculate body hash (sha1sum) of given file and return
- * a oauth_body_hash=xxxx parameter to be added to the request.
- * The returned string needs to be freed by the calling function.
- *
- * see
- * http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html
- *
- * @param filename the filename to calculate the hash for
- *
- * @return URL oauth_body_hash parameter string
- */
-char *oauth_body_hash_file(char *filename);
-
-/**
- * calculate body hash (sha1sum) of given data and return
- * a oauth_body_hash=xxxx parameter to be added to the request.
- * The returned string needs to be freed by the calling function.
- * The returned string is not yet url-escaped and suitable to be
- * passed as argument to \ref oauth_catenc.
- *
- * see
- * http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html
- *
- * @param length length of the data parameter in bytes
- * @param data to calculate the hash for
- *
- * @return URL oauth_body_hash parameter string
- */
-char *oauth_body_hash_data(size_t length, const char *data);
-
-/**
- * base64 encode digest, free it and return a URL parameter
- * with the oauth_body_hash. The returned hash needs to be freed by the
- * calling function. The returned string is not yet url-escaped and
- * thus suitable to be passed to \ref oauth_catenc.
- *
- * @param len length of the digest to encode
- * @param digest hash value to encode
- *
- * @return URL oauth_body_hash parameter string
- */
-char *oauth_body_hash_encode(size_t len, unsigned char *digest);
-
-/**
- * xep-0235 - TODO
- */
-char *oauth_sign_xmpp (const char *xml,
- OAuthMethod method,
- const char *c_secret, //< consumer secret - used as 1st part of secret-key
- const char *t_secret //< token secret - used as 2st part of secret-key
- );
-
-/**
- * do a HTTP GET request, wait for it to finish
- * and return the content of the reply.
- * (requires libcurl or a command-line HTTP client)
- *
- * If compiled <b>without</b> libcurl this function calls
- * a command-line executable defined in the environment variable
- * OAUTH_HTTP_GET_CMD - it defaults to
- * <tt>curl -sA 'liboauth-agent/0.1' '%%u'</tt>
- * where %%u is replaced with the URL and query parameters.
- *
- * bash & wget example:
- * <tt>export OAUTH_HTTP_CMD="wget -q -U 'liboauth-agent/0.1' '%u' "</tt>
- *
- * WARNING: this is a tentative function. it's convenient and handy for testing
- * or developing OAuth code. But don't rely on this function
- * to become a stable part of this API. It does not do
- * much error checking or handling for one thing..
- *
- * NOTE: \a u and \a q are just concatenated with a '?' in between,
- * unless \a q is NULL. in which case only \a u will be used.
- *
- * @param u base url to get
- * @param q query string to send along with the HTTP request or NULL.
- * @return In case of an error NULL is returned; otherwise a pointer to the
- * replied content from HTTP server. latter needs to be freed by caller.
- */
-char *oauth_http_get (const char *u, const char *q);
-
-/**
- * do a HTTP GET request, wait for it to finish
- * and return the content of the reply.
- *
- * (requires libcurl)
- *
- * This is equivalent to /ref oauth_http_get but allows to
- * specifiy a custom HTTP header and has
- * has no support for commandline-curl.
- *
- * If liboauth is compiled <b>without</b> libcurl this function
- * always returns NULL.
- *
- * @param u base url to get
- * @param q query string to send along with the HTTP request or NULL.
- * @param customheader specify custom HTTP header (or NULL for none)
- * Multiple header elements can be passed separating them with "\r\n"
- * @return In case of an error NULL is returned; otherwise a pointer to the
- * replied content from HTTP server. latter needs to be freed by caller.
- */
-char *oauth_http_get2 (const char *u, const char *q, const char *customheader);
-
-
-/**
- * do a HTTP POST request, wait for it to finish
- * and return the content of the reply.
- * (requires libcurl or a command-line HTTP client)
- *
- * If compiled <b>without</b> libcurl this function calls
- * a command-line executable defined in the environment variable
- * OAUTH_HTTP_CMD - it defaults to
- * <tt>curl -sA 'liboauth-agent/0.1' -d '%%p' '%%u'</tt>
- * where %%p is replaced with the postargs and %%u is replaced with
- * the URL.
- *
- * bash & wget example:
- * <tt>export OAUTH_HTTP_CMD="wget -q -U 'liboauth-agent/0.1' --post-data='%p' '%u' "</tt>
- *
- * NOTE: This function uses the curl's default HTTP-POST Content-Type:
- * application/x-www-form-urlencoded which is the only option allowed
- * by oauth core 1.0 spec. Experimental code can use the Environment variable
- * to transmit custom HTTP headers or parameters.
- *
- * WARNING: this is a tentative function. it's convenient and handy for testing
- * or developing OAuth code. But don't rely on this function
- * to become a stable part of this API. It does not do
- * much error checking for one thing..
- *
- * @param u url to query
- * @param p postargs to send along with the HTTP request.
- * @return replied content from HTTP server. needs to be freed by caller.
- */
-char *oauth_http_post (const char *u, const char *p);
-
-/**
- * do a HTTP POST request, wait for it to finish
- * and return the content of the reply.
- * (requires libcurl)
- *
- * It's equivalent to /ref oauth_http_post, but offers
- * the possibility to specify a custom HTTP header and
- * has no support for commandline-curl.
- *
- * If liboauth is compiled <b>without</b> libcurl this function
- * always returns NULL.
- *
- * @param u url to query
- * @param p postargs to send along with the HTTP request.
- * @param customheader specify custom HTTP header (or NULL for none)
- * Multiple header elements can be passed separating them with "\r\n"
- * @return replied content from HTTP server. needs to be freed by caller.
- */
-char *oauth_http_post2 (const char *u, const char *p, const char *customheader);
-
-
-/**
- * http post raw data from file.
- * the returned string needs to be freed by the caller
- * (requires libcurl)
- *
- * see dislaimer: /ref oauth_http_post
- *
- * @param u url to retrieve
- * @param fn filename of the file to post along
- * @param len length of the file in bytes. set to '0' for autodetection
- * @param customheader specify custom HTTP header (or NULL for default).
- * Multiple header elements can be passed separating them with "\r\n"
- * @return returned HTTP reply or NULL on error
- */
-char *oauth_post_file (const char *u, const char *fn, const size_t len, const char *customheader);
-
-/**
- * http post raw data
- * the returned string needs to be freed by the caller
- * (requires libcurl)
- *
- * see dislaimer: /ref oauth_http_post
- *
- * @param u url to retrieve
- * @param data data to post
- * @param len length of the data in bytes.
- * @param customheader specify custom HTTP header (or NULL for default)
- * Multiple header elements can be passed separating them with "\r\n"
- * @return returned HTTP reply or NULL on error
- */
-char *oauth_post_data (const char *u, const char *data, size_t len, const char *customheader);
-
-/**
- * http post raw data, with callback.
- * the returned string needs to be freed by the caller
- * (requires libcurl)
- *
- * Invokes the callback - in no particular order - when HTTP-request status updates occur.
- * The callback is called with:
- * void * callback_data: supplied on function call.
- * int type: 0=data received, 1=data sent.
- * size_t size: amount of data received or amount of data sent so far
- * size_t totalsize: original amount of data to send, or amount of data received
- *
- * @param u url to retrieve
- * @param data data to post along
- * @param len length of the file in bytes. set to '0' for autodetection
- * @param customheader specify custom HTTP header (or NULL for default)
- * Multiple header elements can be passed separating them with "\r\n"
- * @param callback specify the callback function
- * @param callback_data specify data to pass to the callback function
- * @return returned HTTP reply or NULL on error
- */
-char *oauth_post_data_with_callback (const char *u,
- const char *data,
- size_t len,
- const char *customheader,
- void (*callback)(void*,int,size_t,size_t),
- void *callback_data);
-
-/**
- * http send raw data. similar to /ref oauth_http_post but provides
- * for specifying the HTTP request method.
- *
- * the returned string needs to be freed by the caller
- * (requires libcurl)
- *
- * see dislaimer: /ref oauth_http_post
- *
- * @param u url to retrieve
- * @param data data to post
- * @param len length of the data in bytes.
- * @param customheader specify custom HTTP header (or NULL for default)
- * Multiple header elements can be passed separating them with "\r\n"
- * @param httpMethod specify http verb ("GET"/"POST"/"PUT"/"DELETE") to be used. if httpMethod is NULL, a POST is executed.
- * @return returned HTTP reply or NULL on error
- */
-char *oauth_send_data (const char *u,
- const char *data,
- size_t len,
- const char *customheader,
- const char *httpMethod);
-
-/**
- * http post raw data, with callback.
- * the returned string needs to be freed by the caller
- * (requires libcurl)
- *
- * Invokes the callback - in no particular order - when HTTP-request status updates occur.
- * The callback is called with:
- * void * callback_data: supplied on function call.
- * int type: 0=data received, 1=data sent.
- * size_t size: amount of data received or amount of data sent so far
- * size_t totalsize: original amount of data to send, or amount of data received
- *
- * @param u url to retrieve
- * @param data data to post along
- * @param len length of the file in bytes. set to '0' for autodetection
- * @param customheader specify custom HTTP header (or NULL for default)
- * Multiple header elements can be passed separating them with "\r\n"
- * @param callback specify the callback function
- * @param callback_data specify data to pass to the callback function
- * @param httpMethod specify http verb ("GET"/"POST"/"PUT"/"DELETE") to be used.
- * @return returned HTTP reply or NULL on error
- */
-char *oauth_send_data_with_callback (const char *u,
- const char *data,
- size_t len,
- const char *customheader,
- void (*callback)(void*,int,size_t,size_t),
- void *callback_data,
- const char *httpMethod);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
-#endif
-/* vi:set ts=8 sts=2 sw=2: */
diff --git a/protocols/Twitter/src/oauth/oauth_http.c b/protocols/Twitter/src/oauth/oauth_http.c
deleted file mode 100644
index 0e06b10dae..0000000000
--- a/protocols/Twitter/src/oauth/oauth_http.c
+++ /dev/null
@@ -1,728 +0,0 @@
-/*
- * OAuth http functions in POSIX-C.
- *
- * Copyright 2007, 2008, 2009, 2010 Robin Gareus <robin@gareus.org>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- */
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef WIN32
-# define snprintf _snprintf
-#endif
-
-#include "xmalloc.h"
-#include "oauth.h"
-
-#define OAUTH_USER_AGENT "liboauth-agent/" VERSION
-
-#ifdef HAVE_CURL /* HTTP requests via libcurl */
-#include <curl/curl.h>
-#include <sys/stat.h>
-
-# define GLOBAL_CURL_ENVIROMENT_OPTIONS \
- if (getenv("CURLOPT_PROXYAUTH")){ \
- curl_easy_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_ANY); \
- } \
- if (getenv("CURLOPT_SSL_VERIFYPEER")){ \
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, (long) atol(getenv("CURLOPT_SSL_VERIFYPEER")) ); \
- } \
- if (getenv("CURLOPT_CAINFO")){ \
- curl_easy_setopt(curl, CURLOPT_CAINFO, getenv("CURLOPT_CAINFO") ); \
- } \
- if (getenv("CURLOPT_FOLLOWLOCATION")){ \
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, (long) atol(getenv("CURLOPT_FOLLOWLOCATION")) ); \
- } \
- if (getenv("CURLOPT_FAILONERROR")){ \
- curl_easy_setopt(curl, CURLOPT_FAILONERROR, (long) atol(getenv("CURLOPT_FAILONERROR")) ); \
- }
-
-struct MemoryStruct {
- char *data;
- size_t size; //< bytes remaining (r), bytes accumulated (w)
-
- size_t start_size; //< only used with ..AndCall()
- void (*callback)(void*,int,size_t,size_t); //< only used with ..AndCall()
- void *callback_data; //< only used with ..AndCall()
-};
-
-static size_t
-WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) {
- size_t realsize = size * nmemb;
- struct MemoryStruct *mem = (struct MemoryStruct *)data;
-
- mem->data = (char *)xrealloc(mem->data, mem->size + realsize + 1);
- if (mem->data) {
- memcpy(&(mem->data[mem->size]), ptr, realsize);
- mem->size += realsize;
- mem->data[mem->size] = 0;
- }
- return realsize;
-}
-
-static size_t
-ReadMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) {
- struct MemoryStruct *mem = (struct MemoryStruct *)data;
- size_t realsize = size * nmemb;
- if (realsize > mem->size) realsize = mem->size;
- memcpy(ptr, mem->data, realsize);
- mem->size -= realsize;
- mem->data += realsize;
- return realsize;
-}
-
-static size_t
-WriteMemoryCallbackAndCall(void *ptr, size_t size, size_t nmemb, void *data) {
- struct MemoryStruct *mem = (struct MemoryStruct *)data;
- size_t ret=WriteMemoryCallback(ptr,size,nmemb,data);
- mem->callback(mem->callback_data,0,mem->size,mem->size);
- return ret;
-}
-
-static size_t
-ReadMemoryCallbackAndCall(void *ptr, size_t size, size_t nmemb, void *data) {
- struct MemoryStruct *mem = (struct MemoryStruct *)data;
- size_t ret=ReadMemoryCallback(ptr,size,nmemb,data);
- mem->callback(mem->callback_data,1,mem->start_size-mem->size,mem->start_size);
- return ret;
-}
-
-/**
- * cURL http post function.
- * the returned string (if not NULL) needs to be freed by the caller
- *
- * @param u url to retrieve
- * @param p post parameters
- * @param customheader specify custom HTTP header (or NULL for none)
- * @return returned HTTP
- */
-char *oauth_curl_post (const char *u, const char *p, const char *customheader) {
- CURL *curl;
- CURLcode res;
- struct curl_slist *slist=NULL;
-
- struct MemoryStruct chunk;
- chunk.data=NULL;
- chunk.size = 0;
-
- curl = curl_easy_init();
- if(!curl) return NULL;
- curl_easy_setopt(curl, CURLOPT_URL, u);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, p);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- if (customheader) {
- slist = curl_slist_append(slist, customheader);
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
- }
- curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
-#ifdef OAUTH_CURL_TIMEOUT
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
-#endif
- GLOBAL_CURL_ENVIROMENT_OPTIONS;
- res = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- if (res) {
- return NULL;
- }
-
- curl_easy_cleanup(curl);
- return (chunk.data);
-}
-
-/**
- * cURL http get function.
- * the returned string (if not NULL) needs to be freed by the caller
- *
- * @param u url to retrieve
- * @param q optional query parameters
- * @param customheader specify custom HTTP header (or NULL for none)
- * @return returned HTTP
- */
-char *oauth_curl_get (const char *u, const char *q, const char *customheader) {
- CURL *curl;
- CURLcode res;
- struct curl_slist *slist=NULL;
- char *t1=NULL;
- struct MemoryStruct chunk;
-
- if (q) {
- t1=(char*)xmalloc(sizeof(char)*(strlen(u)+strlen(q)+2));
- strcpy(t1,u); strcat(t1,"?"); strcat(t1,q);
- }
-
- chunk.data=NULL;
- chunk.size = 0;
-
- curl = curl_easy_init();
- if(!curl) return NULL;
- curl_easy_setopt(curl, CURLOPT_URL, q?t1:u);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- if (customheader) {
- slist = curl_slist_append(slist, customheader);
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
- }
-#if 0 // TODO - support request methods..
- if (0)
- curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "HEAD");
- else if (0)
- curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
-#endif
- curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
-#ifdef OAUTH_CURL_TIMEOUT
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
-#endif
- GLOBAL_CURL_ENVIROMENT_OPTIONS;
- res = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- if (q) free(t1);
- curl_easy_cleanup(curl);
-
- if (res) {
- return NULL;
- }
- return (chunk.data);
-}
-
-/**
- * cURL http post raw data from file.
- * the returned string needs to be freed by the caller
- *
- * @param u url to retrieve
- * @param fn filename of the file to post along
- * @param len length of the file in bytes. set to '0' for autodetection
- * @param customheader specify custom HTTP header (or NULL for default)
- * @return returned HTTP or NULL on error
- */
-char *oauth_curl_post_file (const char *u, const char *fn, size_t len, const char *customheader) {
- CURL *curl;
- CURLcode res;
- struct curl_slist *slist=NULL;
- struct MemoryStruct chunk;
- FILE *f;
-
- chunk.data=NULL;
- chunk.size=0;
-
- if (customheader)
- slist = curl_slist_append(slist, customheader);
- else
- slist = curl_slist_append(slist, "Content-Type: image/jpeg;");
-
- if (!len) {
- struct stat statbuf;
- if (stat(fn, &statbuf) == -1) return(NULL);
- len = statbuf.st_size;
- }
-
- f = fopen(fn,"r");
- if (!f) return NULL;
-
- curl = curl_easy_init();
- if(!curl) return NULL;
- curl_easy_setopt(curl, CURLOPT_URL, u);
- curl_easy_setopt(curl, CURLOPT_POST, 1);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, len);
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
- curl_easy_setopt(curl, CURLOPT_READDATA, f);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
-#ifdef OAUTH_CURL_TIMEOUT
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
-#endif
- GLOBAL_CURL_ENVIROMENT_OPTIONS;
- res = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- if (res) {
- // error
- return NULL;
- }
- fclose(f);
-
- curl_easy_cleanup(curl);
- return (chunk.data);
-}
-
-/**
- * http send raw data, with callback.
- * the returned string needs to be freed by the caller
- *
- * more documentation in oauth.h
- *
- * @param u url to retrieve
- * @param data data to post along
- * @param len length of the file in bytes. set to '0' for autodetection
- * @param customheader specify custom HTTP header (or NULL for default)
- * @param callback specify the callback function
- * @param callback_data specify data to pass to the callback function
- * @return returned HTTP reply or NULL on error
- */
-char *oauth_curl_send_data_with_callback (const char *u, const char *data, size_t len, const char *customheader, void (*callback)(void*,int,size_t,size_t), void *callback_data, const char *httpMethod) {
- CURL *curl;
- CURLcode res;
- struct curl_slist *slist=NULL;
- struct MemoryStruct chunk;
- struct MemoryStruct rdnfo;
-
- chunk.data=NULL;
- chunk.size=0;
- chunk.start_size=0;
- chunk.callback=callback;
- chunk.callback_data=callback_data;
- rdnfo.data=(char *)data;
- rdnfo.size=len;
- rdnfo.start_size=len;
- rdnfo.callback=callback;
- rdnfo.callback_data=callback_data;
-
- if (customheader)
- slist = curl_slist_append(slist, customheader);
- else
- slist = curl_slist_append(slist, "Content-Type: image/jpeg;");
-
- curl = curl_easy_init();
- if(!curl) return NULL;
- curl_easy_setopt(curl, CURLOPT_URL, u);
- curl_easy_setopt(curl, CURLOPT_POST, 1);
- if (httpMethod) curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, httpMethod);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, len);
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
- curl_easy_setopt(curl, CURLOPT_READDATA, (void *)&rdnfo);
- if (callback)
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, ReadMemoryCallbackAndCall);
- else
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, ReadMemoryCallback);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- if (callback)
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallbackAndCall);
- else
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- curl_easy_setopt(curl, CURLOPT_USERAGENT, OAUTH_USER_AGENT);
-#ifdef OAUTH_CURL_TIMEOUT
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, OAUTH_CURL_TIMEOUT);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
-#endif
- GLOBAL_CURL_ENVIROMENT_OPTIONS;
- res = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- if (res) {
- // error
- return NULL;
- }
-
- curl_easy_cleanup(curl);
- return (chunk.data);
-}
-
-/**
- * http post raw data.
- * the returned string needs to be freed by the caller
- *
- * more documentation in oauth.h
- *
- * @param u url to retrieve
- * @param data data to post along
- * @param len length of the file in bytes. set to '0' for autodetection
- * @param customheader specify custom HTTP header (or NULL for default)
- * @return returned HTTP reply or NULL on error
- */
-char *oauth_curl_post_data(const char *u, const char *data, size_t len, const char *customheader) {
- return oauth_curl_send_data_with_callback(u, data, len, customheader, NULL, NULL, NULL);
-}
-
-char *oauth_curl_send_data (const char *u, const char *data, size_t len, const char *customheader, const char *httpMethod) {
- return oauth_curl_send_data_with_callback(u, data, len, customheader, NULL, NULL, httpMethod);
-}
-
-char *oauth_curl_post_data_with_callback (const char *u, const char *data, size_t len, const char *customheader, void (*callback)(void*,int,size_t,size_t), void *callback_data) {
- return oauth_curl_send_data_with_callback(u, data, len, customheader, callback, callback_data, NULL);
-}
-
-#endif // libcURL.
-
-
-#ifdef HAVE_SHELL_CURL /* HTTP requests via command-line curl */
-
-// command line presets and ENV variable name
-#define _OAUTH_ENV_HTTPCMD "OAUTH_HTTP_CMD"
-#define _OAUTH_ENV_HTTPGET "OAUTH_HTTP_GET_CMD"
-
-#ifdef OAUTH_CURL_TIMEOUT
-
-#define cpxstr(s) cpstr(s)
-#define cpstr(s) #s
-
-#ifndef _OAUTH_DEF_HTTPCMD
-# define _OAUTH_DEF_HTTPCMD "curl -sA '"OAUTH_USER_AGENT"' -m "cpxstr(OAUTH_CURL_TIMEOUT)" -d '%p' '%u' "
-//alternative: "wget -q -U 'liboauth-agent/0.1' --post-data='%p' '%u' "
-#endif
-
-#ifndef _OAUTH_DEF_HTTPGET
-# define _OAUTH_DEF_HTTPGET "curl -sA '"OAUTH_USER_AGENT"' -m "cpxstr(OAUTH_CURL_TIMEOUT)" '%u' "
-//alternative: "wget -q -U 'liboauth-agent/0.1' '%u' "
-#endif
-
-#else // no timeout
-
-#ifndef _OAUTH_DEF_HTTPCMD
-# define _OAUTH_DEF_HTTPCMD "curl -sA '"OAUTH_USER_AGENT"' -d '%p' '%u' "
-//alternative: "wget -q -U 'liboauth-agent/0.1' --post-data='%p' '%u' "
-#endif
-
-#ifndef _OAUTH_DEF_HTTPGET
-# define _OAUTH_DEF_HTTPGET "curl -sA '"OAUTH_USER_AGENT"' '%u' "
-//alternative: "wget -q -U 'liboauth-agent/0.1' '%u' "
-#endif
-
-#endif
-
-#include <stdio.h>
-
-/**
- * escape URL for use in String Quotes (aka shell single quotes).
- * the returned string needs to be free()d by the calling function
- *
- * WARNING: this function only escapes single-quotes (')
- *
- *
- * RFC2396 defines the following
- * reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
- * besides alphanum the following are allowed as unreserved:
- * mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
- *
- * checking `echo '-_.!~*()'` it seems we
- * just need to escape the tick (') itself from "'" to "'\''"
- *
- * In C shell, the "!" character may need a backslash before it.
- * It depends on the characters next to it. If it is surrounded by spaces,
- * you don't need to use a backslash.
- * (here: we'd always need to escape it for c shell)
- * @todo: escape '!' for c-shell curl/wget commandlines
- *
- * @param cmd URI string or parameter to be escaped
- * @return escaped parameter
- */
-char *oauth_escape_shell (const char *cmd) {
- char *esc = xstrdup(cmd);
- char *tmp = esc;
- int idx;
- while ((tmp=strchr(tmp,'\''))) {
- idx = tmp-esc;
- esc=(char*)xrealloc(esc,(strlen(esc)+5)*sizeof(char));
- memmove(esc+idx+4,esc+idx+1, strlen(esc+idx));
- esc[idx+1]='\\'; esc[idx+2]='\''; esc[idx+3]='\'';
- tmp=esc+(idx+4);
- }
-
-// TODO escape '!' if CSHELL ?!
-
- return esc;
-}
-
-/**
- * execute command via shell and return it's output.
- * This is used to call 'curl' or 'wget'.
- * the command is uses <em>as is</em> and needs to be propery escaped.
- *
- * @param cmd the commandline to execute
- * @return stdout string that needs to be freed or NULL if there's no output
- */
-char *oauth_exec_shell (const char *cmd) {
-#ifdef DEBUG_OAUTH
- printf("DEBUG: executing: %s\n",cmd);
-#endif
- FILE *in = popen (cmd, "r");
- size_t len = 0;
- size_t alloc = 0;
- char *data = NULL;
- int rcv = 1;
- while (in && rcv > 0 && !feof(in)) {
- alloc +=1024;
- data = (char*)xrealloc(data, alloc * sizeof(char));
- rcv = fread(data + (alloc-1024), sizeof(char), 1024, in);
- len += rcv;
- }
- pclose(in);
-#ifdef DEBUG_OAUTH
- printf("DEBUG: read %i bytes\n",len);
-#endif
- data[len]=0;
-#ifdef DEBUG_OAUTH
- if (data) printf("DEBUG: return: %s\n",data);
- else printf("DEBUG: NULL data\n");
-#endif
- return (data);
-}
-
-/**
- * send POST via a command line HTTP client, wait for it to finish
- * and return the content of the reply. requires a command-line HTTP client
- *
- * see \ref oauth_http_post
- *
- * @param u url to query
- * @param p postargs to send along with the HTTP request.
- * @return In case of an error NULL is returned; otherwise a pointer to the
- * replied content from HTTP server. latter needs to be freed by caller.
- */
-char *oauth_exec_post (const char *u, const char *p) {
- char cmd[BUFSIZ];
- char *t1,*t2;
- char *cmdtpl = getenv(_OAUTH_ENV_HTTPCMD);
- if (!cmdtpl) cmdtpl = xstrdup (_OAUTH_DEF_HTTPCMD);
- else cmdtpl = xstrdup (cmdtpl); // clone getenv() string.
-
- // add URL and post param - error if no '%p' or '%u' present in definition
- t1=strstr(cmdtpl, "%p");
- t2=strstr(cmdtpl, "%u");
- if (!t1 || !t2) {
- fprintf(stderr, "\nliboauth: invalid HTTP command. set the '%s' environment variable.\n\n",_OAUTH_ENV_HTTPCMD);
- return(NULL);
- }
- // TODO: check if there are exactly two '%' in cmdtpl
- *(++t1)= 's'; *(++t2)= 's';
- if (t1>t2) {
- t1=oauth_escape_shell(u);
- t2=oauth_escape_shell(p);
- } else {
- t1=oauth_escape_shell(p);
- t2=oauth_escape_shell(u);
- }
- snprintf(cmd, BUFSIZ, cmdtpl, t1, t2);
- free(cmdtpl);
- free(t1); free(t2);
- return oauth_exec_shell(cmd);
-}
-
-/**
- * send GET via a command line HTTP client
- * and return the content of the reply..
- * requires a command-line HTTP client.
- *
- * Note: u and q are just concatenated with a '?' in between unless q is NULL. in which case only u will be used.
- *
- * see \ref oauth_http_get
- *
- * @param u base url to get
- * @param q query string to send along with the HTTP request.
- * @return In case of an error NULL is returned; otherwise a pointer to the
- * replied content from HTTP server. latter needs to be freed by caller.
- */
-char *oauth_exec_get (const char *u, const char *q) {
- char cmd[BUFSIZ];
- char *cmdtpl, *t1, *e1;
-
- if (!u) return (NULL);
-
- cmdtpl = getenv(_OAUTH_ENV_HTTPGET);
- if (!cmdtpl) cmdtpl = xstrdup (_OAUTH_DEF_HTTPGET);
- else cmdtpl = xstrdup (cmdtpl); // clone getenv() string.
-
- // add URL and post param - error if no '%p' or '%u' present in definition
- t1=strstr(cmdtpl, "%u");
- if (!t1) {
- fprintf(stderr, "\nliboauth: invalid HTTP command. set the '%s' environment variable.\n\n",_OAUTH_ENV_HTTPGET);
- return(NULL);
- }
- *(++t1)= 's';
-
- e1 = oauth_escape_shell(u);
- if (q) {
- char *e2;
- e2 = oauth_escape_shell(q);
- t1=(char*)xmalloc(sizeof(char)*(strlen(e1)+strlen(e2)+2));
- strcpy(t1,e1); strcat(t1,"?"); strcat(t1,e2);
- free(e2);
- }
- snprintf(cmd, BUFSIZ, cmdtpl, q?t1:e1);
- free(cmdtpl);
- free(e1);
- if (q) free(t1);
- return oauth_exec_shell(cmd);
-}
-#endif // command-line curl.
-
-/* wrapper functions */
-
-/**
- * do a HTTP GET request, wait for it to finish
- * and return the content of the reply.
- * (requires libcurl or a command-line HTTP client)
- *
- * more documentation in oauth.h
- *
- * @param u base url to get
- * @param q query string to send along with the HTTP request or NULL.
- * @return In case of an error NULL is returned; otherwise a pointer to the
- * replied content from HTTP server. latter needs to be freed by caller.
- */
-char *oauth_http_get (const char *u, const char *q) {
-#ifdef HAVE_CURL
- return oauth_curl_get(u,q,NULL);
-#elif defined(HAVE_SHELL_CURL)
- return oauth_exec_get(u,q);
-#else
- return NULL;
-#endif
-}
-
-/**
- * do a HTTP GET request, wait for it to finish
- * and return the content of the reply.
- * (requires libcurl)
- *
- * @param u base url to get
- * @param q query string to send along with the HTTP request or NULL.
- * @param customheader specify custom HTTP header (or NULL for none)
- * @return In case of an error NULL is returned; otherwise a pointer to the
- * replied content from HTTP server. latter needs to be freed by caller.
- */
-char *oauth_http_get2 (const char *u, const char *q, const char *customheader) {
-#ifdef HAVE_CURL
- return oauth_curl_get(u,q,customheader);
-#else
- return NULL;
-#endif
-}
-
-/**
- * do a HTTP POST request, wait for it to finish
- * and return the content of the reply.
- * (requires libcurl or a command-line HTTP client)
- *
- * more documentation in oauth.h
- *
- * @param u url to query
- * @param p postargs to send along with the HTTP request.
- * @return In case of an error NULL is returned; otherwise a pointer to the
- * replied content from HTTP server. latter needs to be freed by caller.
- */
-char *oauth_http_post (const char *u, const char *p) {
-#ifdef HAVE_CURL
- return oauth_curl_post(u,p,NULL);
-#elif defined(HAVE_SHELL_CURL)
- return oauth_exec_post(u,p);
-#else
- return NULL;
-#endif
-}
-
-
-/**
- * do a HTTP POST request, wait for it to finish
- * and return the content of the reply.
- * (requires libcurl)
- *
- * more documentation in oauth.h
- *
- * @param u url to query
- * @param p postargs to send along with the HTTP request.
- * @param customheader specify custom HTTP header (or NULL for none)
- * @return In case of an error NULL is returned; otherwise a pointer to the
- * replied content from HTTP server. latter needs to be freed by caller.
- */
-char *oauth_http_post2 (const char *u, const char *p, const char *customheader) {
-#ifdef HAVE_CURL
- return oauth_curl_post(u,p,customheader);
-#else
- return NULL;
-#endif
-}
-
-/**
- * http post raw data from file.
- * the returned string needs to be freed by the caller
- *
- * more documentation in oauth.h
- *
- * @param u url to retrieve
- * @param fn filename of the file to post along
- * @param len length of the file in bytes. set to '0' for autodetection
- * @param customheader specify custom HTTP header (or NULL for default)
- * @return returned HTTP reply or NULL on error
- */
-char *oauth_post_file (const char *u, const char *fn, const size_t len, const char *customheader){
-#ifdef HAVE_CURL
- return oauth_curl_post_file (u, fn, len, customheader);
-#elif defined(HAVE_SHELL_CURL)
- fprintf(stderr, "\nliboauth: oauth_post_file requires libcurl. libcurl is not available.\n\n");
- return NULL;
-#else
- return NULL;
-#endif
-}
-
-/**
- * http post raw data.
- * the returned string needs to be freed by the caller
- *
- * more documentation in oauth.h
- *
- * @param u url to retrieve
- * @param data data to post along
- * @param len length of the file in bytes. set to '0' for autodetection
- * @param customheader specify custom HTTP header (or NULL for default)
- * @return returned HTTP reply or NULL on error
- */
-char *oauth_post_data (const char *u, const char *data, size_t len, const char *customheader) {
-#ifdef HAVE_CURL
- return oauth_curl_post_data (u, data, len, customheader);
-#elif defined(HAVE_SHELL_CURL)
- fprintf(stderr, "\nliboauth: oauth_post_file requires libcurl. libcurl is not available.\n\n");
- return NULL;
-#else
- return (NULL);
-#endif
-}
-
-char *oauth_send_data (const char *u, const char *data, size_t len, const char *customheader, const char *httpMethod) {
-#ifdef HAVE_CURL
- return oauth_curl_send_data (u, data, len, customheader, httpMethod);
-#elif defined(HAVE_SHELL_CURL)
- fprintf(stderr, "\nliboauth: oauth_send_file requires libcurl. libcurl is not available.\n\n");
- return NULL;
-#else
- return (NULL);
-#endif
-}
-
-char *oauth_post_data_with_callback (const char *u, const char *data, size_t len, const char *customheader, void (*callback)(void*,int,size_t,size_t), void *callback_data) {
-#ifdef HAVE_CURL
- return oauth_curl_post_data_with_callback(u, data, len, customheader, callback, callback_data);
-#elif defined(HAVE_SHELL_CURL)
- fprintf(stderr, "\nliboauth: oauth_post_data_with_callback requires libcurl.\n\n");
- return NULL;
-#else
- return (NULL);
-#endif
-}
-/* vi:set ts=8 sts=2 sw=2: */
diff --git a/protocols/Twitter/src/oauth/xmalloc.c b/protocols/Twitter/src/oauth/xmalloc.c
deleted file mode 100644
index f831e13895..0000000000
--- a/protocols/Twitter/src/oauth/xmalloc.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* xmalloc.c -- memory allocation including 'out of memory' checks
- *
- * Copyright 2010 Robin Gareus <robin@gareus.org>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <string.h>
-#include <stdlib.h>
-
-static void *xmalloc_fatal(size_t size) {
- if (size==0) return NULL;
- fprintf(stderr, "Out of memory.");
- exit(1);
-}
-
-void *xmalloc (size_t size) {
- void *ptr = malloc (size);
- if (ptr == NULL) return xmalloc_fatal(size);
- return ptr;
-}
-
-void *xcalloc (size_t nmemb, size_t size) {
- void *ptr = calloc (nmemb, size);
- if (ptr == NULL) return xmalloc_fatal(nmemb*size);
- return ptr;
-}
-
-void *xrealloc (void *ptr, size_t size) {
- void *p = realloc (ptr, size);
- if (p == NULL) return xmalloc_fatal(size);
- return p;
-}
-
-char *xstrdup (const char *s) {
- void *ptr = xmalloc(strlen(s)+1);
- strcpy (ptr, s);
- return (char*) ptr;
-}
-
-// vi: sts=2 sw=2 ts=2
diff --git a/protocols/Twitter/src/oauth/xmalloc.h b/protocols/Twitter/src/oauth/xmalloc.h
deleted file mode 100644
index 7ec9b61fdd..0000000000
--- a/protocols/Twitter/src/oauth/xmalloc.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _OAUTH_XMALLOC_H
-#define _OAUTH_XMALLOC_H 1
-
-/* Prototypes for functions defined in xmalloc.c */
-void *xmalloc (size_t size);
-void *xcalloc (size_t nmemb, size_t size);
-void *xrealloc (void *ptr, size_t size);
-char *xstrdup (const char *s);
-
-#endif
diff --git a/protocols/Twitter/src/proto.h b/protocols/Twitter/src/proto.h
index 84a1b1b439..ca97987c0c 100644
--- a/protocols/Twitter/src/proto.h
+++ b/protocols/Twitter/src/proto.h
@@ -19,9 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "common.h"
#include "utility.h"
-//#include "tc2.h"
#include "stdafx.h"
-#include "oauth.h"
#include <m_protoint.h>
diff --git a/protocols/Twitter/src/tc2.h b/protocols/Twitter/src/tc2.h
deleted file mode 100644
index bbf3884fd6..0000000000
--- a/protocols/Twitter/src/tc2.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* aww yeah creating some crazy .h file
-
-*/
-
-#ifndef TC2_H
-#define TC2_H
-
-//#include "proto.h"
-#include "stdafx.h"
-#include "twitter.h"
-
-using namespace std;
-
-//typedef std::map<wstring, wstring> OAuthParameters;
-
-wstring getHostName();
-wstring getAccessUrl();
-wstring getAuthorizeUrl();
-wstring getRequestUrl();
-wstring getUserTimelineUrl();
-wstring getConsumerKey();
-wstring getConsumerSecret();
-
-//wstring UrlGetQuery( const wstring& url );
-
-OAuthParameters ParseQueryString( const wstring& url );
-
-wstring OAuthCreateNonce();
-
-wstring OAuthCreateTimestamp();
-
-string HMACSHA1( const string& keyBytes, const string& data );
-
-wstring Base64String( const string& hash );
-
-string char2hex( char dec );
-
-string urlencode(const string &c);
-
-wstring UrlEncode( const wstring& url );
-
-wstring OAuthCreateSignature( const wstring& signatureBase, const wstring& consumerSecret, const wstring& requestTokenSecret );
-
-wstring OAuthConcatenateRequestElements( const wstring& httpMethod, wstring url, const wstring& parameters );
-
-wstring OAuthNormalizeRequestParameters( const OAuthParameters& requestParameters );
-
-//wstring OAuthNormalizeUrl( const wstring& url );
-
-/*OAuthParameters BuildSignedOAuthParameters( const OAuthParameters& requestParameters,
- const wstring& url,
- const wstring& httpMethod,
- const wstring& consumerKey,
- const wstring& consumerSecret,
- const wstring& requestToken,
- const wstring& requestTokenSecret,
- const wstring& pin );*/
-
-/*wstring OAuthWebRequestSubmit(
- const OAuthParameters& parameters,
- const wstring& url
- );*/
-
-// OAuthWebRequest used for all OAuth related queries
-//
-// consumerKey and consumerSecret - must be provided for every call, they identify the application
-// oauthToken and oauthTokenSecret - need to be provided for every call, except for the first token request before authorizing
-// pin - only used during authorization, when the user enters the PIN they received from the twitter website
-/*wstring OAuthWebRequestSubmit(
- const wstring& url,
- const wstring& httpMethod,
- const wstring& consumerKey,
- const wstring& consumerSecret,
- const wstring& oauthToken = L"",
- const wstring& oauthTokenSecret = L"",
- const wstring& pin = L""
- );*/
-
-
-
-int testfunc(int argc, _TCHAR* argv[]);
-
-#endif
diff --git a/protocols/Twitter/twitter_10.vcxproj b/protocols/Twitter/twitter_10.vcxproj
index 7679561d44..9ad01a2983 100644
--- a/protocols/Twitter/twitter_10.vcxproj
+++ b/protocols/Twitter/twitter_10.vcxproj
@@ -72,7 +72,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;src\oauth;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;_USRDLL;TWITTER_EXPORTS;_CRT_SECURE_NO_WARNINGS;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -95,7 +95,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;src\oauth;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_WINDOWS;_USRDLL;TWITTER_EXPORTS;_CRT_SECURE_NO_WARNINGS;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -115,7 +115,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;src\oauth;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;TWITTER_EXPORTS;_CRT_SECURE_NO_WARNINGS;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<Optimization>Full</Optimization>
@@ -139,7 +139,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;src\oauth;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;TWITTER_EXPORTS;_CRT_SECURE_NO_WARNINGS;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<Optimization>Full</Optimization>
diff --git a/protocols/Twitter/twitter_11.vcxproj b/protocols/Twitter/twitter_11.vcxproj
index 6213b76668..d5ccd6887c 100644
--- a/protocols/Twitter/twitter_11.vcxproj
+++ b/protocols/Twitter/twitter_11.vcxproj
@@ -76,7 +76,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;src\oauth;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;_USRDLL;TWITTER_EXPORTS;_CRT_SECURE_NO_WARNINGS;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -100,7 +100,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;src\oauth;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_WINDOWS;_USRDLL;TWITTER_EXPORTS;_CRT_SECURE_NO_WARNINGS;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -120,7 +120,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;src\oauth;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;TWITTER_EXPORTS;_CRT_SECURE_NO_WARNINGS;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<Optimization>Full</Optimization>
@@ -143,7 +143,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
- <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;src\oauth;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;..\..\..\boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;TWITTER_EXPORTS;_CRT_SECURE_NO_WARNINGS;NOMINMAX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>Level3</WarningLevel>
<Optimization>Full</Optimization>