Riremito

html parser/brynhildr.cpp

Apr 14th, 2017
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.92 KB | None | 0 0
  1. #include"brynhildr.h"
  2. #include<stdio.h>
  3.  
  4. /*
  5.     Download Class Start
  6. */
  7.  
  8. class Download{
  9. private:
  10.     char *memory;
  11.     DWORD length;
  12.     Download *next;
  13.  
  14. public:
  15.     Download();
  16.     ~Download();
  17.     void Add(char *Memory, int Length);
  18.     DWORD GetFileSize();
  19.     char* GetFile();
  20. };
  21.  
  22. Download::Download(){
  23.     memory = NULL;
  24.     length = 0;
  25.     next = NULL;
  26. }
  27.  
  28. Download::~Download(){
  29.     free(memory);
  30.     if(next){
  31.         delete next;
  32.     }
  33. }
  34.  
  35. void Download::Add(char *Memory, int Length){
  36.     if(!memory){
  37.         memory = (char *)malloc(Length);
  38.         memcpy(memory, Memory, Length);
  39.         length = Length;
  40.     }
  41.     else if(!next){
  42.         next = new Download;
  43.         next->Add(Memory, Length);
  44.     }
  45.     else{
  46.         next->Add(Memory, Length);
  47.     }
  48. }
  49.  
  50. DWORD Download::GetFileSize(){
  51.     Download *DL = this;
  52.     int FileSize = 0;
  53.     while(DL){
  54.         FileSize += DL->length;
  55.         DL = DL->next;
  56.     }
  57.     return FileSize;
  58. }
  59.  
  60. char* Download::GetFile(){
  61.     DWORD FileSize = GetFileSize();
  62.     DWORD WrittenSize = 0;
  63.     char *File = (char *)malloc(FileSize + 1);
  64.     Download *DL = this;
  65.     while(DL){
  66.         memcpy(&File[WrittenSize], DL->memory, DL->length);
  67.         WrittenSize += DL->length;
  68.         DL = DL->next;
  69.     }
  70.     File[WrittenSize] = 0;
  71.     return File;
  72. }
  73. /*
  74.     Download Class End
  75. */
  76.  
  77. Brynhildr::Brynhildr(char *url){
  78.     Buffer = NULL;
  79.     memcpy(cURL, url, strlen(url) + 1);
  80.     hBrowser = InternetOpenA("brynhildr", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
  81.     Referer = (char *)malloc(strlen(url) + 10);
  82.     sprintf(Referer, "Referer: %s", url);
  83. }
  84.  
  85. Brynhildr::~Brynhildr(){
  86.     if(Buffer){
  87.         free(Buffer);
  88.     }
  89.     free(Referer);
  90.     InternetCloseHandle(hBrowser);
  91. }
  92.  
  93. void Brynhildr::Replace(char *s, char *p, char *n){
  94.     char *sl = strstr(s, p);
  95.     if(!sl) return;
  96.     char *sr = sl + strlen(p);
  97.     sprintf(sl, "%s%s", n, sr);
  98.     return Replace(s, p, n);
  99. }
  100.  
  101. void Brynhildr::Access(char *url){
  102.     if(strncmp(url, "http", 4) == 0){
  103.         memcpy(cURL, url, strlen(url) + 1);
  104.         hPage = InternetOpenUrlA(hBrowser, url, Referer, strlen(Referer), INTERNET_FLAG_RELOAD, 0);
  105.     }
  106.     else{
  107.             int i, length;
  108.             length = strlen(cURL);
  109.             for(i=0; &cURL[length - i] >= cURL; i++){
  110.                 if(cURL[length - i] == '/'){
  111.                     sprintf(&cURL[length - i + 1], "%s", url);
  112.                     Replace(cURL, "&amp;", "&");
  113.                     hPage = InternetOpenUrlA(hBrowser, cURL, Referer, strlen(Referer), INTERNET_FLAG_RELOAD, 0);
  114.                     break;
  115.                 }
  116.             }
  117.     }
  118.     if(Buffer){
  119.         free(Buffer);
  120.         Buffer = NULL;
  121.     }
  122.     DWORD Length;
  123.     Download DL;
  124.     Buffer = (char *)malloc(MAX_BUFFER_LENGTH);
  125.     do{
  126.         InternetReadFile(hPage, Buffer, MAX_BUFFER_LENGTH, &Length);
  127.         DL.Add(Buffer, Length);
  128.     }while(Length);
  129.     free(Buffer);
  130.     Buffer = DL.GetFile();
  131.     InternetCloseHandle(hPage);
  132. }
  133.  
  134. char* Brynhildr::Get(){
  135.     return Buffer;
  136. }
  137.  
  138. void Brynhildr::Convert(){
  139.     int length = strlen(Buffer);
  140.     wchar_t *ws = (wchar_t *)malloc(length * sizeof(wchar_t));
  141.     MultiByteToWideChar(CP_UTF8, 0, Buffer, length, ws, length);
  142.     WideCharToMultiByte(CP_ACP, 0, ws,length, Buffer, length, NULL, NULL);
  143.     free(ws);
  144. }
Add Comment
Please, Sign In to add comment