HttpReader.xs.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:2k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #include "../http-reader.h"
  2. #include "../std-http-reader.h"
  3. #include "../mirror-http-reader.h"
  4. #include "EXTERN.h"
  5. #include "perl.h"
  6. #include "XSUB.h"
  7. using namespace std;
  8. using namespace OpenKore;
  9. MODULE = Utils::HttpReader PACKAGE = HttpReader
  10. PROTOTYPES: ENABLED
  11. HttpReaderStatus
  12. HttpReader::getStatus()
  13. char *
  14. HttpReader::getError()
  15. CODE:
  16. RETVAL = (char *) THIS->getError();
  17. OUTPUT:
  18. RETVAL
  19. int
  20. HttpReader::pullData(buf, size)
  21. SV *buf
  22. unsigned int size
  23. INIT:
  24. STRLEN dummy;
  25. char *buffer;
  26. CODE:
  27. SvPV_force(buf, dummy);
  28. buffer = SvGROW(buf, size + 1);
  29. RETVAL = THIS->pullData(buffer, size);
  30. if (RETVAL < 0) {
  31. SvCUR_set(buf, 0);
  32. buffer[0] = '';
  33. } else {
  34. SvCUR_set(buf, RETVAL);
  35. buffer[RETVAL] = '';
  36. }
  37. OUTPUT:
  38. RETVAL
  39. char *
  40. HttpReader::getData(len)
  41. unsigned int &len
  42. CODE:
  43. RETVAL = (char *) THIS->getData(len);
  44. OUTPUT:
  45. len
  46. RETVAL
  47. int
  48. HttpReader::getSize()
  49. void
  50. HttpReader::DESTROY()
  51. MODULE = Utils::StdHttpReader   PACKAGE = StdHttpReader
  52. void
  53. init()
  54. CODE:
  55. StdHttpReader::init();
  56. StdHttpReader *
  57. StdHttpReader::new(url, postData = NULL)
  58. char *url
  59. SV *postData
  60. CODE:
  61. if (postData == NULL) {
  62. RETVAL = StdHttpReader::create(url);
  63. } else if (!SvOK(postData)) {
  64. croak("Invalid postData parameter.");
  65. } else {
  66. char *postDataString;
  67. STRLEN len;
  68. postDataString = SvPV(postData, len);
  69. RETVAL = StdHttpReader::createAndPost(url, postDataString, len);
  70. }
  71. OUTPUT:
  72. RETVAL
  73. MODULE = Utils::HttpReader PACKAGE = MirrorHttpReader
  74. MirrorHttpReader *
  75. MirrorHttpReader::new(urls, timeout = 0)
  76. AV *urls
  77. unsigned int timeout
  78. INIT:
  79. list<const char *> urls_list;
  80. I32 i, len;
  81. CODE:
  82. len = av_len(urls);
  83. for (i = 0; i <= len; i++) {
  84. SV **item;
  85. item = av_fetch(urls, i, 0);
  86. if (item && *item && SvOK(*item)) {
  87. char *url = SvPV_nolen(*item);
  88. urls_list.push_back(url);
  89. }
  90. }
  91. RETVAL = new MirrorHttpReader(urls_list, timeout);
  92. OUTPUT:
  93. RETVAL