1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
BOOL SendHTTPPost(char *pHostname, char *pURI, char *pUserAgent, char *pFileName)
{
  BOOL lRetVal = FALSE;
  HANDLE lInputFH = INVALID_HANDLE_VALUE;
  HINTERNET lInetInit = NULL;
  HINTERNET lInetConn = NULL; 
  HINTERNET lInetReq = NULL;
  DWORD lBytesRead = 0;
  DWORD lBytesWritten = 0;
  DWORD lTotalBytesWritten = 0;
  char lTemp[MAX_BUF_SIZE + 1];
  char lHeader[MAX_BUF_SIZE + 1];
  BYTE lBuffer[MAX_BUF_SIZE];
  INTERNET_BUFFERS lBufferIn = {0}; 
 
 
  if (pHostname != NULL && pURI != NULL && pFileName != NULL)
  {
    if (PathFileExists(pFileName))
	{      
      if ((lInputFH = CreateFile(pFileName, GENERIC_READ, FILE_SHARE_READ, NULL, 
          OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)
	  {
        // Set default User Agent.
        if (pUserAgent == NULL)
          pUserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.153.1 Safari/525.19";
 
 
        if ((lInetInit = InternetOpen (pUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL,
             0)) != NULL)
        {
          if ((lInetConn = InternetConnect(lInetInit, pHostname, INTERNET_DEFAULT_HTTP_PORT,
              NULL,NULL,INTERNET_SERVICE_HTTP, 0, 0)) != NULL)
          {
            if ((lInetReq = HttpOpenRequest(lInetConn, "POST", pURI, NULL, NULL, NULL, 0, 0))
                 != NULL)
            {
              lBufferIn.dwStructSize = sizeof(INTERNET_BUFFERS); 
              lBufferIn.dwBufferTotal = GetFileSize (lInputFH, NULL);
 
              // Add HTTP header
              ZeroMemory(lHeader, sizeof(lHeader));
              strcat(lHeader, "Content-type: application/x-www-form-urlencoded");
              HttpAddRequestHeaders(lInetReq, lHeader, strnlen(lHeader, sizeof(lHeader)-1), 
                                    HTTP_ADDREQ_FLAG_REPLACE|HTTP_ADDREQ_FLAG_ADD);
 
              if (HttpSendRequestEx(lInetReq, &lBufferIn, NULL, HSR_INITIATE, 0))
              {
                  do 
                  { 
                    if (!ReadFile(lInputFH, lBuffer, sizeof(lBuffer), &lBytesRead, NULL))
                    { 
                      printf("ReadFile failed on buffer %d.\n", GetLastError()); 
                      break; 
                    } 
                    if (!InternetWriteFile(lInetReq, lBuffer, lBytesRead, &lBytesWritten))
                    { 
                      printf("InternetWriteFile failed %d.\n", GetLastError()); 
                      break; 
                    } 
 
                    lTotalBytesWritten += lBytesWritten; 
                  } while (lBytesRead == sizeof(lBuffer)); 
 
                  if (lTotalBytesWritten == GetFileSize (lInputFH, NULL))
                    lRetVal = TRUE;
              } // if(HttpSendReque...
              InternetCloseHandle(lInetReq);
            } // if ((lInetReq...
            InternetCloseHandle(lInetConn);
          } // if ((lInetCo...
          InternetCloseHandle(lInetInit);
        } // if ((lInetIn...
      } // if ((lInputFH = CreateFile(...
    } // if (PathFileExists(...
  } // if (pHostn...
 
  return(lRetVal);
}