Twitch SDK (Internal)
httprequestutils.h
Go to the documentation of this file.
1 /********************************************************************************************
2 * Twitch Broadcasting SDK
3 *
4 * This software is supplied under the terms of a license agreement with Twitch Interactive, Inc. and
5 * may not be copied or used except in accordance with the terms of that agreement
6 * Copyright (c) 2012-2016 Twitch Interactive, Inc.
7 *********************************************************************************************/
8 
9 #pragma once
10 
12 
13 #include <sstream>
14 
15 
16 namespace ttv
17 {
18  class TaskRunner;
19  class Task;
20 
21  std::string BuildUrlEncodedRequestParams(const std::vector<std::pair<std::string, std::string>>& requestParams);
22  std::string BuildUrlEncodedRequestParams(const std::vector<HttpParam>& requestParams);
23  std::string BuildUrlEncodedRequestParams(const std::map<std::string, std::string>& requestParams);
24  std::string BuildHttpHeader(const std::vector<ttv::HttpParam>& headerParams);
25  bool ContainsHttpParameter(const std::vector<HttpParam>& headers, const std::string& name);
26  void UrlEncode(const std::string& inputString, std::stringstream& outputStream);
27  std::string UrlEncode(const std::string& inputString);
28  void UrlDecode(const std::string& inputString, std::stringstream& outputStream);
29  void UrlDecode(const std::string& input, std::string& result);
30  std::string UrlDecode(const std::string& inputString);
31 
32  TTV_ErrorCode SplitHttpParameters(const std::string& parameterString, std::vector<std::pair<std::string, std::string>>& result);
33  TTV_ErrorCode SplitHttpParameters(const std::string& parameterString, std::map<std::string, std::string>& result);
34 
39  TTV_ErrorCode GenerateSslVerificationHosts(const std::string& originalHost, std::vector<std::string>& result);
40 
46  bool IsHostAnIpAddress(const std::string& hostName);
47 
48  class Uri;
49  class PagedRequestFetcher;
50 }
51 
52 
53 class ttv::Uri
54 {
55 public:
56  Uri();
57  Uri(const std::string& url);
58 
59  void SetUrl(const std::string& url);
60  std::string GetUrl() const;
61 
62  std::string GetPath() const { return mPath; }
63  void GetPathComponents(std::vector<std::string>& result) const;
64  void SetPath(const std::string& path) { mPath = path; }
65 
66  std::string GetProtocol() const { return mProtocol; }
67  void SetProtocol(const std::string& protocol) { mProtocol = protocol; }
68 
69  std::string GetHostName() const { return mHostName; }
70  void SetHostName(const std::string& host) { mHostName = host; }
71 
72  std::string GetPort() const { return mPort; }
73  void SetPort(const std::string& port) { mPort = port; }
74 
75  bool GetPort(uint32_t& result) const;
76 
77  void ClearParams();
78  void SetParam(const std::string& param, const char* value);
79  void SetParam(const std::string& param, const std::string& value);
80  void SetParam(const std::string& param, uint32_t value);
81  void SetParam(const std::string& param, int32_t value);
82  void SetParam(const std::string& param, uint64_t value);
83  void SetParam(const std::string& param, int64_t value);
84  void SetParam(const std::string& param, bool value);
85 
86  std::map<std::string, std::string>& GetParams() { return mParams; }
87  const std::map<std::string, std::string>& GetParams() const { return mParams; }
88 
89  bool ContainsParam(const std::string& param) const;
90 
91  operator std::string() const;
92  bool operator==(const Uri& other) const;
93  bool operator!=(const Uri& other) const;
94 
95 private:
96  void DisassembleUrl(const std::string& url);
97  std::string AssembleUrl() const;
98 
99  std::string mProtocol;
100  std::string mHostName;
101  std::string mPort;
102  std::string mPath;
103  std::map<std::string, std::string> mParams;
104 };
105 
106 
111 {
112 public:
116  typedef std::function<TTV_ErrorCode(const std::string& cursor, std::shared_ptr<Task>& task)> CreateTaskCallback;
120  typedef std::function<void(TTV_ErrorCode ec)> CompleteCallback;
121 
122 public:
124 
128  TTV_ErrorCode Start(const std::string& initialCursor, CreateTaskCallback createTaskCallback, CompleteCallback completeCallback);
132  void Cancel();
136  void FetchComplete(TTV_ErrorCode ec, const std::string& cursor);
137 
141  bool InProgress() const { return mCurrentTask != nullptr; }
142 
143 protected:
144  TTV_ErrorCode FetchPage();
145 
147  CompleteCallback mCompleteCallback;
148  std::shared_ptr<Task> mCurrentTask;
149  std::string mCursor;
150  bool mCancel;
151 };
const std::map< std::string, std::string > & GetParams() const
Definition: httprequestutils.h:87
std::string GetPath() const
Definition: httprequestutils.h:62
Definition: httprequestutils.h:110
std::function< void(TTV_ErrorCode ec)> CompleteCallback
Definition: httprequestutils.h:120
std::string GetProtocol() const
Definition: httprequestutils.h:66
std::map< std::string, std::string > mParams
Definition: httprequestutils.h:103
void SetPort(const std::string &port)
Definition: httprequestutils.h:73
CompleteCallback mCompleteCallback
Definition: httprequestutils.h:147
std::string mPath
Definition: httprequestutils.h:102
std::string GetUrl() const
void SetProtocol(const std::string &protocol)
Definition: httprequestutils.h:67
Definition: httprequestutils.h:53
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
std::string mPort
Definition: httprequestutils.h:101
void ClearParams()
std::string BuildHttpHeader(const std::vector< ttv::HttpParam > &headerParams)
void SetUrl(const std::string &url)
void SetHostName(const std::string &host)
Definition: httprequestutils.h:70
void UrlDecode(const std::string &inputString, std::stringstream &outputStream)
TTV_ErrorCode GenerateSslVerificationHosts(const std::string &originalHost, std::vector< std::string > &result)
bool operator!=(const Uri &other) const
void DisassembleUrl(const std::string &url)
std::shared_ptr< Task > mCurrentTask
Definition: httprequestutils.h:148
std::string BuildUrlEncodedRequestParams(const std::vector< std::pair< std::string, std::string >> &requestParams)
void SetParam(const std::string &param, const char *value)
std::map< std::string, std::string > & GetParams()
Definition: httprequestutils.h:86
bool ContainsParam(const std::string &param) const
bool InProgress() const
Definition: httprequestutils.h:141
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
std::string mProtocol
Definition: httprequestutils.h:99
std::string GetPort() const
Definition: httprequestutils.h:72
bool operator==(const Uri &other) const
bool IsHostAnIpAddress(const std::string &hostName)
void UrlEncode(const std::string &inputString, std::stringstream &outputStream)
TTV_ErrorCode SplitHttpParameters(const std::string &parameterString, std::vector< std::pair< std::string, std::string >> &result)
bool mCancel
Definition: httprequestutils.h:150
std::string AssembleUrl() const
void SetPath(const std::string &path)
Definition: httprequestutils.h:64
void GetPathComponents(std::vector< std::string > &result) const
std::string mHostName
Definition: httprequestutils.h:100
std::function< TTV_ErrorCode(const std::string &cursor, std::shared_ptr< Task > &task)> CreateTaskCallback
Definition: httprequestutils.h:116
CreateTaskCallback mCreateTaskCallback
Definition: httprequestutils.h:146
std::string GetHostName() const
Definition: httprequestutils.h:69
bool ContainsHttpParameter(const std::vector< HttpParam > &headers, const std::string &name)
std::string mCursor
Definition: httprequestutils.h:149