Example #1
0
File: curl.c Project: Shoes3/shoes3
size_t
shoes_curl_header_funk(char *ptr, size_t size, size_t nmemb, void *user)
{
  shoes_curl_data *data = (shoes_curl_data *)user;
  size_t realsize = size * nmemb;
  if (data->status == 0 && data->handler != NULL)
  {
    curl_easy_getinfo(data->curl, CURLINFO_RESPONSE_CODE, (long *)&data->status);
    if (data->handler != NULL)
    {
      shoes_http_event *event = SHOE_ALLOC(shoes_http_event);
      SHOE_MEMZERO(event, shoes_http_event, 1);
      event->stage = SHOES_HTTP_STATUS;
      event->status = data->status;
      data->handler(event, data->data);
      SHOE_FREE(event);
    }
  }

  HTTP_HEADER(ptr, realsize, data->handler, data->data);
  if ((data->mem != NULL || data->fp != NULL) &&
      strncmp(ptr, content_len_str, strlen(content_len_str)) == 0)
  {
    data->total = strtoull(ptr + strlen(content_len_str), NULL, 10);
    if (data->mem != NULL && data->total > data->memlen)
    {
      data->memlen = data->total;
      SHOE_REALLOC_N(data->mem, char, data->memlen);
      if (data->mem == NULL) return -1;
    }
Example #2
0
File: curl.c Project: FiXato/shoes
size_t
shoes_curl_header_funk(char *ptr, size_t size, size_t nmemb, shoes_curl_data *data)
{
  size_t realsize = size * nmemb;
  if (data->status == 0)
  {
    shoes_download_event event;
    event.stage = SHOES_HTTP_STATUS;
    curl_easy_getinfo(data->curl, CURLINFO_RESPONSE_CODE, &event.status);
    data->status = event.status;
    if (data->handler != NULL) data->handler(&event, data->data);
  }

  HTTP_HEADER(ptr, realsize, data->handler, data->data);
  if (strncmp(ptr, content_len_str, strlen(content_len_str)) == 0)
  {
    data->total = strtoull(ptr + strlen(content_len_str), NULL, 10);
    if (data->mem != NULL && data->total > data->memlen)
    {
      data->memlen = data->total;
      SHOE_REALLOC_N(data->mem, char, data->memlen);
      if (data->mem == NULL) return -1;
    }
Example #3
-1
void
shoes_winhttp_headers(HINTERNET req, shoes_download_handler handler, void *data)
{ 
  DWORD size;
  WinHttpQueryHeaders(req, WINHTTP_QUERY_RAW_HEADERS,
    WINHTTP_HEADER_NAME_BY_INDEX, NULL, &size, WINHTTP_NO_HEADER_INDEX);

  if(GetLastError() == ERROR_INSUFFICIENT_BUFFER)
  {
    int whdrlen = 0, hdrlen = 0;
    LPCWSTR whdr;
    LPSTR hdr = SHOE_ALLOC_N(CHAR, MAX_PATH);
    LPCWSTR hdrs = SHOE_ALLOC_N(WCHAR, size/sizeof(WCHAR));
    BOOL res = WinHttpQueryHeaders(req, WINHTTP_QUERY_RAW_HEADERS,
      WINHTTP_HEADER_NAME_BY_INDEX, (LPVOID)hdrs, &size, WINHTTP_NO_HEADER_INDEX);
    if (res)
    {
      for (whdr = hdrs; whdr - hdrs < size / sizeof(WCHAR); whdr += whdrlen)
      {
        WideCharToMultiByte(CP_UTF8, 0, whdr, -1, hdr, MAX_PATH, NULL, NULL);
        hdrlen = strlen(hdr);
        HTTP_HEADER(hdr, hdrlen, handler, data);
        whdrlen = wcslen(whdr) + 1;
      }
    }
    SHOE_FREE(hdrs);
    SHOE_FREE(hdr);
  }
}