http-reader.cpp.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:3k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. /*  Asynchronous HTTP client - C bindings
  2.  *  Copyright (C) 2006   Written by VCL
  3.  *
  4.  *  This program is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This program is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  */
  18. #include "http-reader.h"
  19. #include "../http-reader.h"
  20. #include "../std-http-reader.h"
  21. #include "../mirror-http-reader.h"
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <list>
  25. using namespace std;
  26. using namespace OpenKore;
  27. struct _OHttpReader {
  28. HttpReader *obj;
  29. };
  30. O_DECL(OHttpReader *)
  31. o_mirror_http_reader_new(const char *urls[]) {
  32. OHttpReader *reader;
  33. list<const char *> urls_list;
  34. unsigned int i = 0;
  35. while (urls[i] != NULL) {
  36. urls_list.push_back(urls[i]);
  37. i++;
  38. }
  39. reader = new _OHttpReader;
  40. reader->obj = new MirrorHttpReader(urls_list);
  41. return reader;
  42. }
  43. O_DECL(void)
  44. o_std_http_reader_init() {
  45. StdHttpReader::init();
  46. }
  47. O_DECL(OHttpReader *)
  48. o_std_http_reader_new(const char *url) {
  49. OHttpReader *reader;
  50. reader = new _OHttpReader;
  51. reader->obj = StdHttpReader::create(url);
  52. return reader;
  53. }
  54. O_DECL(OHttpReaderStatus)
  55. o_http_reader_get_status(OHttpReader *http) {
  56. HttpReaderStatus status = http->obj->getStatus();
  57. switch (status) {
  58. case HTTP_READER_CONNECTING:
  59. return O_HTTP_READER_CONNECTING;
  60. case HTTP_READER_DOWNLOADING:
  61. return O_HTTP_READER_DOWNLOADING;
  62. case HTTP_READER_DONE:
  63. return O_HTTP_READER_DONE;
  64. case HTTP_READER_ERROR:
  65. return O_HTTP_READER_ERROR;
  66. default:
  67. fprintf(stdout, "OHttpReader: invalid status %dn", (int) status);
  68. abort(); // Never reached
  69. return O_HTTP_READER_ERROR;
  70. };
  71. }
  72. O_DECL(const char *)
  73. o_http_reader_get_error(OHttpReader *http) {
  74. return http->obj->getError();
  75. }
  76. O_DECL(int)
  77. o_http_reader_pull_data(OHttpReader *http, void *buf, unsigned int size) {
  78. return http->obj->pullData(buf, size);
  79. }
  80. O_DECL(const char *)
  81. o_http_reader_get_data(OHttpReader *http, unsigned int *len) {
  82. unsigned int len2;
  83. const char *result;
  84. result = http->obj->getData(len2);
  85. *len = len2;
  86. return result;
  87. }
  88. O_DECL(int)
  89. o_http_reader_get_size(OHttpReader *http) {
  90. return http->obj->getSize();
  91. }
  92. O_DECL(void)
  93. o_http_reader_free(OHttpReader *http) {
  94. delete http->obj;
  95. delete http;
  96. }