File: win32-fetch.c

package info (click to toggle)
gpredict 2.4-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 12,920 kB
  • sloc: ansic: 39,846; makefile: 486; python: 145; sh: 85; xml: 31
file content (69 lines) | stat: -rw-r--r-- 2,098 bytes parent folder | download | duplicates (4)
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
/*
    Gpredict: Real-time satellite tracking and orbit prediction program

    Copyright (C)  2001-2017  Alexandru Csete, OZ9AEC.
    Copyright (C)  2017 Phil Ashby, 2E0IPX.

    Comments, questions and bugreports should be submitted via
    http://sourceforge.net/projects/gpredict/
    More details can be found at the project home page:

            http://gpredict.oz9aec.net/

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, visit http://www.fsf.org/


    Fetch URL content to a specified handle using Wininet as no libcurl
    dev libs available for Win32/64.
*/
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <wininet.h>
#include <stdio.h>
#include "win32-fetch.h"

#define BUFLEN 8192

int win32_fetch(char *url, FILE *file, char *proxy, char *ua)
{
    HINTERNET hInt, hUrl;
    char buf[BUFLEN];
    DWORD nRead;

    if (proxy != NULL)
        hInt = InternetOpen(ua, INTERNET_OPEN_TYPE_PROXY, proxy, "<local>", 0);
    else
        hInt = InternetOpen(ua, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    if (NULL == hInt)
        return 0x80000000 | (int)GetLastError();

    hUrl = InternetOpenUrl(hInt, url, NULL, 0, INTERNET_FLAG_RELOAD, 0);
    if (NULL == hUrl)
    {
        InternetCloseHandle(hInt);
        return 0x40000000 | (int)GetLastError();
    }

    while (InternetReadFile(hUrl, buf, BUFLEN, &nRead))
    {
        if (nRead > 0)
            fwrite(buf, nRead, 1, file);
        else
            break;
    }
    InternetCloseHandle(hUrl);
    InternetCloseHandle(hInt);
    return 0;
}