BBS2chProxyPoster.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #pragma once
  2. #include <string>
  3. #include <vector>
  4. #include <map>
  5. #include <curl/curl.h>
  6. #include "BBS2chProxyConnection.h"
  7. #include "BBS2chProxyHttpHeaders.h"
  8. #include "BBS2chProxyFormData.h"
  9. #include "BBS2chProxyURL.h"
  10. class IBBS2chProxyPoster {
  11. protected:
  12. std::string _url;
  13. BBS2chProxyHttpHeaders &_requestHeaders;
  14. BBS2chProxyFormData &_requestBody;
  15. std::string _host;
  16. std::string _board;
  17. std::string _thread;
  18. std::string _nic;
  19. std::string _forceProxy;
  20. long _verbose;
  21. void prepareHeadersAndBody(const BBS2chProxyURL &url);
  22. curl_slist* prepareCurlHandle(BBS2chProxyHttpHeaders &headers, BBS2chProxyFormData &body, curl_slist* headersForCurl);
  23. void runLuaScript(BBS2chProxyHttpHeaders &headers, BBS2chProxyFormData &body);
  24. public:
  25. BBS2chProxyConnection *connectionDelegate;
  26. std::string _userAgentForRequest;
  27. std::string _monaKeyForRequest;
  28. bool _manageCookies;
  29. IBBS2chProxyPoster(BBS2chProxyURL &url, BBS2chProxyHttpHeaders &headers, BBS2chProxyFormData &body, BBS2chProxyConnection *delegate);
  30. virtual ~IBBS2chProxyPoster() {};
  31. virtual long post() = 0;
  32. std::string identifier();
  33. };
  34. class BBS2chProxy5chPoster : public IBBS2chProxyPoster {
  35. protected:
  36. void makeSignature(BBS2chProxyHttpHeaders &headers, BBS2chProxyFormData &body);
  37. public:
  38. struct ConfirmationManager {
  39. pthread_mutex_t _mutex;
  40. std::map<std::string, std::pair<time_t, PBBS2chProxyFormData> > _cachedForms;
  41. time_t _lastCached;
  42. ConfirmationManager() : _lastCached() {
  43. pthread_mutex_init(&_mutex, NULL);
  44. }
  45. ~ConfirmationManager() {
  46. pthread_mutex_destroy(&_mutex);
  47. }
  48. void add(IBBS2chProxyPoster &poster, PBBS2chProxyFormData body);
  49. bool modifyRequestBodyIfNeeded(IBBS2chProxyPoster &poster, BBS2chProxyFormData &body);
  50. };
  51. bool _isFirstRun;
  52. int _status;
  53. bool _isResponseChunked;
  54. std::string _responseHeaders;
  55. bool _hasSetCookie;
  56. std::vector<char> _responseBody;
  57. bool _useTransparentContentEncoding;
  58. int _confirmationHandlerMode;
  59. bool _hasAcceptEncoding;
  60. static ConfirmationManager confirmationManager;
  61. BBS2chProxy5chPoster(BBS2chProxyURL &url, BBS2chProxyHttpHeaders &headers, BBS2chProxyFormData &body, BBS2chProxyConnection *delegate);
  62. virtual ~BBS2chProxy5chPoster() {};
  63. virtual long post();
  64. };
  65. class BBS2chProxyTalkPoster : public IBBS2chProxyPoster {
  66. void makeSignature(BBS2chProxyHttpHeaders &headers, BBS2chProxyFormData &body);
  67. public:
  68. BBS2chProxyTalkPoster(BBS2chProxyURL &url, BBS2chProxyHttpHeaders &headers, BBS2chProxyFormData &body, BBS2chProxyConnection *delegate);
  69. virtual ~BBS2chProxyTalkPoster() {};
  70. virtual long post();
  71. };
  72. class BBS2chProxyTalkTo5chPoster : public BBS2chProxy5chPoster {
  73. public:
  74. BBS2chProxyTalkTo5chPoster(BBS2chProxyURL &url, BBS2chProxyHttpHeaders &headers, BBS2chProxyFormData &body, BBS2chProxyConnection *delegate);
  75. virtual ~BBS2chProxyTalkTo5chPoster() {};
  76. virtual long post();
  77. };