示例#1
0
void AdafruitMQTT::randomClientID(char* clientid)
{
  // length is from 10 to 23
  uint8_t length = 10+(rng_u32()%13);
  rng_base64(clientid, length);
  clientid[length] = 0;
}
void AdafruitTwitter::generate_oauth_authorization(char authorization[], const char* http_method, const char* json_api,
                                                   char const* contents_para[][2], uint8_t contents_count)
{
  //------------- Generate Oauth nonce & timestamp -------------//
  // Generate Auth nonce
  char nonce[32+1];
  rng_base64(nonce, 32);
  nonce[32] = 0;

  // Timestamp (UTC)
  char timestamp[32];
  sprintf(timestamp, "%u", Feather.getUtcTime());

#if TWITTER_DEBUG // test code
  strcpy(timestamp, "1469790936");
  strcpy(nonce, "9b936321c0aaeab59e47fdc04934baa7");
#endif

  //------------- OAUTH parameter & Data contents -------------//
  // OAUTH parameters: ASSUME key and values are already in urlencoded
  char const* oauth_para[][2] =
  {
      { "oauth_consumer_key"     , _consumer_key },
      { "oauth_nonce"            , nonce         },
      { "oauth_signature"        , NULL          },
      { "oauth_signature_method" , "HMAC-SHA1"   },
      { "oauth_timestamp"        , timestamp     },
      { "oauth_token"            , _token_access },
      { "oauth_version"          , "1.0"         },
  };
  uint8_t oauth_count = sizeof(oauth_para) / sizeof(oauth_para[0]);

  //------------- Create Signature with HMAC SHA1 -------------//
  char signature[TWITTER_OAUTH_SIGNATURE_MAXLEN];
  create_oauth_signature(signature, http_method, json_api, oauth_para, oauth_count, contents_para, contents_count);

  // Update OAUTH table
  oauth_para[2][1] = signature;

  //------------- Construct Authorization header -------------//
  // format: key1="value1", key2="value2" ...
  authorization += sprintf(authorization, "OAuth ");

  for(uint8_t i=0; i<oauth_count; i++)
  {
    char const* key   = oauth_para[i][0];
    char const* value = oauth_para[i][1];

    if (i != 0 )
    {
      *authorization++ = ',';
      *authorization++ = ' ';
    }

    authorization += sprintf(authorization, "%s=\"%s\"", key, value);
  }
}