annotate seobeo/s_http_client.c @ 279:b3b547563ec7

Add Google connector service and agent wiki Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code. Co-authored-by: Copilot <[email protected]> Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 22:22:36 -0700
parents ce7f4400c2de
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1 #include "seobeo/seobeo.h"
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2 #include <ctype.h>
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
3 #include <time.h>
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
4
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
5 static int64_t Seobeo_Client_Monotonic_Milliseconds(void)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
6 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
7 struct timespec now;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
8 clock_gettime(CLOCK_MONOTONIC, &now);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
9 return (int64_t)now.tv_sec * 1000 + now.tv_nsec / 1000000;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
10 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
11
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
12 static boolean Seobeo_Client_Read_Timed_Out(int32 timeout_ms, int64_t last_progress_ms)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
13 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
14 return timeout_ms > 0 &&
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
15 Seobeo_Client_Monotonic_Milliseconds() - last_progress_ms >= timeout_ms;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
16 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
17
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
18 static size_t Seobeo_Client_Find_Header_Length(const uint8 *buffer, size_t length)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
19 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
20 if (!buffer || length < 4)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
21 return 0;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
22 for (size_t i = 0; i + 3 < length; i++)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
23 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
24 if (buffer[i] == '\r' && buffer[i + 1] == '\n' &&
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
25 buffer[i + 2] == '\r' && buffer[i + 3] == '\n')
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
26 return i + 4;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
27 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
28 return 0;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
29 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
30
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
31 static const char *Seobeo_Client_Header_Value(
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
32 Seobeo_Request_Entry *headers,
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
33 const char *name)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
34 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
35 if (!headers || !name)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
36 return NULL;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
37 for (size_t i = 0; i < Dowa_Array_Length(headers); i++)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
38 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
39 if (headers[i].key && strcasecmp(headers[i].key, name) == 0)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
40 return headers[i].value;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
41 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
42 return NULL;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
43 }
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
44
279
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
45 static boolean Seobeo_Client_Header_Has_Token(
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
46 const char *value, const char *token)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
47 {
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
48 if (!value || !token)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
49 return FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
50 size_t token_length = strlen(token);
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
51 const char *cursor = value;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
52 while (*cursor)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
53 {
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
54 while (*cursor == ' ' || *cursor == '\t' || *cursor == ',')
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
55 cursor++;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
56 const char *end = cursor;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
57 while (*end && *end != ',')
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
58 end++;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
59 const char *trimmed_end = end;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
60 while (trimmed_end > cursor &&
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
61 (trimmed_end[-1] == ' ' || trimmed_end[-1] == '\t'))
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
62 trimmed_end--;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
63 if ((size_t)(trimmed_end - cursor) == token_length &&
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
64 strncasecmp(cursor, token, token_length) == 0)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
65 return TRUE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
66 cursor = end;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
67 }
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
68 return FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
69 }
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
70
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
71 static boolean Seobeo_Client_Decode_Chunked(
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
72 const char *encoded, size_t encoded_length,
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
73 char *decoded, size_t decoded_capacity, size_t *decoded_length)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
74 {
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
75 if (!encoded || !decoded || !decoded_length)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
76 return FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
77 size_t input_offset = 0;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
78 size_t output_offset = 0;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
79 while (input_offset < encoded_length)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
80 {
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
81 size_t line_end = input_offset;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
82 while (line_end + 1 < encoded_length &&
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
83 !(encoded[line_end] == '\r' && encoded[line_end + 1] == '\n'))
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
84 line_end++;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
85 if (line_end + 1 >= encoded_length)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
86 return FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
87
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
88 size_t chunk_size = 0;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
89 boolean have_digit = FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
90 for (size_t i = input_offset; i < line_end && encoded[i] != ';'; i++)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
91 {
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
92 uint8 c = (uint8)encoded[i];
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
93 int32 digit;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
94 if (c >= '0' && c <= '9')
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
95 digit = c - '0';
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
96 else if (c >= 'a' && c <= 'f')
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
97 digit = c - 'a' + 10;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
98 else if (c >= 'A' && c <= 'F')
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
99 digit = c - 'A' + 10;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
100 else
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
101 return FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
102 if (chunk_size > (SIZE_MAX - (size_t)digit) / 16)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
103 return FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
104 chunk_size = chunk_size * 16 + (size_t)digit;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
105 have_digit = TRUE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
106 }
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
107 if (!have_digit)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
108 return FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
109 input_offset = line_end + 2;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
110 if (chunk_size == 0)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
111 {
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
112 *decoded_length = output_offset;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
113 return TRUE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
114 }
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
115 if (chunk_size > encoded_length - input_offset ||
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
116 chunk_size > decoded_capacity - output_offset)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
117 return FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
118 memcpy(decoded + output_offset, encoded + input_offset, chunk_size);
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
119 output_offset += chunk_size;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
120 input_offset += chunk_size;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
121 if (input_offset + 1 >= encoded_length ||
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
122 encoded[input_offset] != '\r' || encoded[input_offset + 1] != '\n')
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
123 return FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
124 input_offset += 2;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
125 }
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
126 return FALSE;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
127 }
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
128
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
129 static void Seobeo_Client_Parse_Url(const char *url, char **p_host,
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
130 char **p_port, char **p_path, boolean *p_use_tls, Dowa_Arena *p_arena)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
131 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
132 if (!url)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
133 return;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
134
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
135 const char *start = url;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
136 *p_use_tls = FALSE;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
137
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
138 if (strncmp(url, "https://", 8) == 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
139 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
140 *p_use_tls = TRUE;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
141 start = url + 8;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
142 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
143 else if (strncmp(url, "http://", 7) == 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
144 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
145 *p_use_tls = FALSE;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
146 start = url + 7;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
147 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
148
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
149 const char *slash = strchr(start, '/');
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
150 const char *colon = strchr(start, ':');
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
151
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
152 if (colon && (!slash || colon < slash))
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
153 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
154 size_t host_len = colon - start;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
155 *p_host = Dowa_Arena_Allocate(p_arena, host_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
156 memcpy(*p_host, start, host_len);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
157 (*p_host)[host_len] = '\0';
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
158
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
159 const char *port_start = colon + 1;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
160 size_t port_len = slash ? (slash - port_start) : strlen(port_start);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
161 *p_port = Dowa_Arena_Allocate(p_arena, port_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
162 memcpy(*p_port, port_start, port_len);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
163 (*p_port)[port_len] = '\0';
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
164 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
165 else
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
166 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
167 size_t host_len = slash ? (slash - start) : strlen(start);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
168 *p_host = Dowa_Arena_Allocate(p_arena, host_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
169 memcpy(*p_host, start, host_len);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
170 (*p_host)[host_len] = '\0';
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
171
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
172 *p_port = Dowa_Arena_Allocate(p_arena, 8);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
173 strcpy(*p_port, *p_use_tls ? "443" : "80");
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
174 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
175
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
176 if (slash)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
177 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
178 size_t path_len = strlen(slash);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
179 *p_path = Dowa_Arena_Allocate(p_arena, path_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
180 strcpy(*p_path, slash);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
181 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
182 else
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
183 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
184 *p_path = Dowa_Arena_Allocate(p_arena, 2);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
185 strcpy(*p_path, "/");
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
186 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
187 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
188
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
189 Seobeo_Client_Request *Seobeo_Client_Request_Create(const char *url)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
190 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
191 Seobeo_Client_Request *p_req = malloc(sizeof(Seobeo_Client_Request));
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
192 if (!p_req)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
193 return NULL;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
194
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
195 memset(p_req, 0, sizeof(Seobeo_Client_Request));
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
196
175
71ad34a8bc9a [HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents: 168
diff changeset
197 p_req->p_arena = Dowa_Arena_Create(1024 * 1024 * 5);
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
198 if (!p_req->p_arena)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
199 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
200 free(p_req);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
201 return NULL;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
202 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
203
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
204 size_t url_len = strlen(url);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
205 p_req->url = Dowa_Arena_Allocate(p_req->p_arena, url_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
206 strcpy(p_req->url, url);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
207
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
208 Seobeo_Client_Parse_Url(url, &p_req->host, &p_req->port, &p_req->path, &p_req->use_tls, p_req->p_arena);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
209
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
210 p_req->method = Dowa_Arena_Allocate(p_req->p_arena, 4);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
211 strcpy(p_req->method, "GET");
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
212
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
213 p_req->follow_redirects = FALSE;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
214 p_req->max_redirects = 10;
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
215 p_req->timeout_ms = 0;
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
216
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
217 return p_req;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
218 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
219
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
220 void Seobeo_Client_Request_Set_Method(Seobeo_Client_Request *p_req, const char *method)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
221 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
222 if (!p_req || !method)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
223 return;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
224
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
225 size_t len = strlen(method);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
226 p_req->method = Dowa_Arena_Allocate(p_req->p_arena, len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
227 strcpy(p_req->method, method);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
228 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
229
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
230 void Seobeo_Client_Request_Add_Header_Map(Seobeo_Client_Request *p_req, const char *key, const char *value)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
231 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
232 if (!p_req || !key || !value)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
233 return;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
234
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
235 char *key_copy = Dowa_Arena_Allocate(p_req->p_arena, strlen(key) + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
236 strcpy(key_copy, key);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
237
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
238 char *value_copy = Dowa_Arena_Allocate(p_req->p_arena, strlen(value) + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
239 strcpy(value_copy, value);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
240
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
241 Dowa_HashMap_Push_Arena(p_req->headers_map, key_copy, value_copy, p_req->p_arena);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
242 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
243
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
244 void Seobeo_Client_Request_Add_Header_Array(Seobeo_Client_Request *p_req, const char *header)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
245 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
246 if (!p_req || !header)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
247 return;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
248
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
249 char *header_copy = Dowa_Arena_Allocate(p_req->p_arena, strlen(header) + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
250 strcpy(header_copy, header);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
251
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
252 Dowa_Array_Push_Arena(p_req->headers_array, header_copy, p_req->p_arena);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
253 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
254
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
255 void Seobeo_Client_Request_Set_Body(Seobeo_Client_Request *p_req, const char *body, size_t length)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
256 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
257 if (!p_req || !body)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
258 return;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
259
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
260 if (length == 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
261 length = strlen(body);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
262
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
263 p_req->body = Dowa_Arena_Allocate(p_req->p_arena, length + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
264 memcpy(p_req->body, body, length);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
265 p_req->body[length] = '\0';
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
266 p_req->body_length = length;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
267 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
268
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
269 void Seobeo_Client_Request_Set_Follow_Redirects(Seobeo_Client_Request *p_req, boolean follow, int32 max_redirects)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
270 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
271 if (!p_req)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
272 return;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
273
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
274 p_req->follow_redirects = follow;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
275 p_req->max_redirects = max_redirects > 0 ? max_redirects : 10;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
276 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
277
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
278 void Seobeo_Client_Request_Set_Timeout_Milliseconds(Seobeo_Client_Request *p_req, int32 timeout_ms)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
279 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
280 if (!p_req)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
281 return;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
282 p_req->timeout_ms = timeout_ms > 0 ? timeout_ms : 0;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
283 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
284
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
285 void Seobeo_Client_Request_Set_Download_Path(Seobeo_Client_Request *p_req, const char *path)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
286 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
287 if (!p_req || !path)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
288 return;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
289
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
290 size_t len = strlen(path);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
291 p_req->download_path = Dowa_Arena_Allocate(p_req->p_arena, len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
292 strcpy(p_req->download_path, path);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
293 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
294
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
295 static int Seobeo_Client_Build_Request_Header(Seobeo_Client_Request *p_req, char *buffer, size_t buffer_size)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
296 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
297 int offset = 0;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
298
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
299 offset += snprintf(buffer + offset, buffer_size - offset,
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
300 "%s %s HTTP/1.1\r\n"
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
301 "Host: %s\r\n",
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
302 p_req->method, p_req->path, p_req->host);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
303
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
304 boolean has_content_length = FALSE;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
305 boolean has_connection = FALSE;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
306
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
307 if (p_req->headers_map)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
308 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
309 size_t count = Dowa_Array_Length(p_req->headers_map);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
310 for (size_t i = 0; i < count; i++)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
311 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
312 const char *key = p_req->headers_map[i].key;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
313 const char *value = p_req->headers_map[i].value;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
314
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
315 if (strcasecmp(key, "content-length") == 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
316 has_content_length = TRUE;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
317 if (strcasecmp(key, "connection") == 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
318 has_connection = TRUE;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
319
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
320 offset += snprintf(buffer + offset, buffer_size - offset,
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
321 "%s: %s\r\n", key, value);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
322 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
323 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
324
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
325 if (p_req->headers_array)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
326 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
327 size_t count = Dowa_Array_Length(p_req->headers_array);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
328 for (size_t i = 0; i < count; i++)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
329 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
330 const char *header = p_req->headers_array[i];
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
331
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
332 if (strncasecmp(header, "content-length:", 15) == 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
333 has_content_length = TRUE;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
334 if (strncasecmp(header, "connection:", 11) == 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
335 has_connection = TRUE;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
336
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
337 offset += snprintf(buffer + offset, buffer_size - offset,
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
338 "%s\r\n", header);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
339 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
340 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
341
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
342 if (p_req->body && !has_content_length)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
343 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
344 offset += snprintf(buffer + offset, buffer_size - offset,
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
345 "Content-Length: %zu\r\n", p_req->body_length);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
346 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
347
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
348 if (!has_connection)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
349 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
350 offset += snprintf(buffer + offset, buffer_size - offset,
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
351 "Connection: close\r\n");
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
352 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
353
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
354 offset += snprintf(buffer + offset, buffer_size - offset, "\r\n");
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
355
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
356 return offset;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
357 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
358
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
359 static Seobeo_Client_Response *Seobeo_Client_Parse_Response(
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
360 Seobeo_Handle *p_handle,
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
361 const char *download_path,
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
362 int32 timeout_ms)
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
363 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
364 Seobeo_Client_Response *p_resp = malloc(sizeof(Seobeo_Client_Response));
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
365 if (!p_resp)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
366 return NULL;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
367
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
368 memset(p_resp, 0, sizeof(Seobeo_Client_Response));
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
369
175
71ad34a8bc9a [HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents: 168
diff changeset
370 p_resp->p_arena = Dowa_Arena_Create(1024 * 1024 * 10); // 10 MB
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
371 if (!p_resp->p_arena)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
372 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
373 free(p_resp);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
374 return NULL;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
375 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
376
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
377 int64_t last_progress_ms = Seobeo_Client_Monotonic_Milliseconds();
163
058de208e640 [Config] Adding os ignore files.
June Park <parkjune1995@gmail.com>
parents: 119
diff changeset
378 while (TRUE)
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
379 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
380 int r = Seobeo_Handle_Read(p_handle);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
381 if (r == -2)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
382 break;
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
383 if (r < 0)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
384 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
385 Seobeo_Client_Response_Destroy(p_resp);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
386 return NULL;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
387 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
388 if (r > 0)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
389 last_progress_ms = Seobeo_Client_Monotonic_Milliseconds();
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
390
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
391 if (Seobeo_Client_Find_Header_Length(
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
392 p_handle->read_buffer, p_handle->read_buffer_len) > 0)
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
393 break;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
394
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
395 if (r == 0)
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
396 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
397 if (Seobeo_Client_Read_Timed_Out(timeout_ms, last_progress_ms))
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
398 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
399 Seobeo_Log(SEOBEO_ERROR, "HTTP response header timed out\n");
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
400 Seobeo_Client_Response_Destroy(p_resp);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
401 return NULL;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
402 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
403 usleep(1000);
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
404 continue;
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
405 }
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
406 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
407
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
408 size_t hdr_len = Seobeo_Client_Find_Header_Length(
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
409 p_handle->read_buffer, p_handle->read_buffer_len);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
410 if (hdr_len == 0)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
411 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
412 Seobeo_Client_Response_Destroy(p_resp);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
413 return NULL;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
414 }
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
415
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
416 char *buf = Dowa_Arena_Allocate(p_resp->p_arena, hdr_len + 1);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
417 memcpy(buf, p_handle->read_buffer, hdr_len);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
418 buf[hdr_len] = '\0';
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
419 char *hdr_end = buf + hdr_len - 4;
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
420
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
421 char version[16];
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
422 int status_code;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
423 char status_text[256];
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
424 int scan_result = sscanf(buf, "%15s %d %255[^\r\n]", version, &status_code, status_text);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
425
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
426 if (scan_result >= 2)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
427 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
428 p_resp->status_code = status_code;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
429 if (scan_result >= 3)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
430 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
431 size_t len = strlen(status_text);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
432 p_resp->status_text = Dowa_Arena_Allocate(p_resp->p_arena, len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
433 strcpy(p_resp->status_text, status_text);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
434 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
435 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
436
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
437 char *line = buf + strlen(version) + 1;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
438 while (*line && !isdigit(*line))
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
439 line++;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
440 while (*line && isdigit(*line))
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
441 line++;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
442 while (*line && *line == ' ')
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
443 line++;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
444 while (*line && *line != '\r')
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
445 line++;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
446 line += 2;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
447
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
448 while (line < hdr_end)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
449 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
450 char *next = strstr(line, "\r\n");
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
451 if (!next)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
452 break;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
453
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
454 char *colon = memchr(line, ':', next - line);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
455 if (colon)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
456 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
457 size_t key_len = colon - line;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
458 size_t value_len = next - colon - 1;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
459
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
460 char *val_start = colon + 1;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
461 if (*val_start == ' ')
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
462 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
463 val_start++;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
464 value_len--;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
465 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
466
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
467 char *key = Dowa_Arena_Allocate(p_resp->p_arena, key_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
468 memcpy(key, line, key_len);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
469 key[key_len] = '\0';
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
470
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
471 char *val = Dowa_Arena_Allocate(p_resp->p_arena, value_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
472 memcpy(val, val_start, value_len);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
473 val[value_len] = '\0';
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
474
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
475 Dowa_HashMap_Push_Arena(p_resp->headers, key, val, p_resp->p_arena);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
476
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
477 if (strcasecmp(key, "Location") == 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
478 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
479 p_resp->redirect_url = Dowa_Arena_Allocate(p_resp->p_arena, value_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
480 strcpy(p_resp->redirect_url, val);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
481 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
482 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
483
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
484 line = next + 2;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
485 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
486
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
487 Seobeo_Handle_Consume(p_handle, (uint32)hdr_len);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
488
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
489 size_t body_len = 0;
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
490 const char *content_length = Seobeo_Client_Header_Value(
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
491 p_resp->headers, "Content-Length");
279
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
492 const char *transfer_encoding = Seobeo_Client_Header_Value(
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
493 p_resp->headers, "Transfer-Encoding");
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
494 boolean is_chunked = Seobeo_Client_Header_Has_Token(
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
495 transfer_encoding, "chunked");
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
496 if (content_length && !is_chunked)
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
497 {
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
498 body_len = (size_t)strtoull(content_length, NULL, 10);
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
499 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
500
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
501 FILE *p_file = NULL;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
502 if (download_path)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
503 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
504 p_file = fopen(download_path, "wb");
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
505 if (!p_file)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
506 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
507 Seobeo_Log(SEOBEO_ERROR, "Failed to open file for writing: %s\n", download_path);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
508 return p_resp;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
509 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
510 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
511
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
512 if (body_len > 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
513 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
514 char *body = download_path ? NULL : Dowa_Arena_Allocate(p_resp->p_arena, body_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
515 size_t total_read = 0;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
516
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
517 while (total_read < body_len)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
518 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
519 size_t available = p_handle->read_buffer_len;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
520 size_t to_copy = (body_len - total_read) < available ? (body_len - total_read) : available;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
521
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
522 if (to_copy > 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
523 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
524 if (download_path)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
525 fwrite(p_handle->read_buffer, 1, to_copy, p_file);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
526 else
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
527 memcpy(body + total_read, p_handle->read_buffer, to_copy);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
528
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
529 total_read += to_copy;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
530 Seobeo_Handle_Consume(p_handle, (uint32)to_copy);
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
531 last_progress_ms = Seobeo_Client_Monotonic_Milliseconds();
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
532 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
533
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
534 if (total_read < body_len)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
535 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
536 int r = Seobeo_Handle_Read(p_handle);
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
537 if (r == -2 || r < 0)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
538 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
539 if (p_file) fclose(p_file);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
540 Seobeo_Client_Response_Destroy(p_resp);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
541 return NULL;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
542 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
543 if (r > 0)
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
544 last_progress_ms = Seobeo_Client_Monotonic_Milliseconds();
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
545 if (r == 0)
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
546 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
547 if (Seobeo_Client_Read_Timed_Out(timeout_ms, last_progress_ms))
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
548 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
549 Seobeo_Log(SEOBEO_ERROR, "HTTP response body timed out\n");
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
550 if (p_file) fclose(p_file);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
551 Seobeo_Client_Response_Destroy(p_resp);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
552 return NULL;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
553 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
554 usleep(1000);
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
555 continue;
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
556 }
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
557 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
558 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
559
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
560 if (!download_path)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
561 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
562 body[body_len] = '\0';
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
563 p_resp->body = body;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
564 p_resp->body_length = body_len;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
565 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
566 else
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
567 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
568 p_resp->body_length = total_read;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
569 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
570 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
571 else
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
572 {
175
71ad34a8bc9a [HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents: 168
diff changeset
573 size_t cap = 1024 * 1024 * 5;
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
574 size_t used = 0;
279
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
575 char *body = (!download_path || is_chunked)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
576 ? Dowa_Arena_Allocate(p_resp->p_arena, cap) : NULL;
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
577
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
578 while (1)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
579 {
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
580 int n = p_handle->read_buffer_len > 0
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
581 ? (int)p_handle->read_buffer_len
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
582 : Seobeo_Handle_Read(p_handle);
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
583 if (n > 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
584 {
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
585 last_progress_ms = Seobeo_Client_Monotonic_Milliseconds();
279
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
586 if (download_path && !is_chunked)
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
587 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
588 fwrite(p_handle->read_buffer, 1, p_handle->read_buffer_len, p_file);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
589 used += p_handle->read_buffer_len;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
590 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
591 else
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
592 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
593 if (used + p_handle->read_buffer_len >= cap)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
594 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
595 Seobeo_Log(SEOBEO_WARNING, "Response body too large, truncating...\n");
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
596 break;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
597 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
598 memcpy(body + used, p_handle->read_buffer, p_handle->read_buffer_len);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
599 used += p_handle->read_buffer_len;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
600 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
601 Seobeo_Handle_Consume(p_handle, (uint32)p_handle->read_buffer_len);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
602 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
603 else if (n == -2)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
604 break;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
605 else if (n == 0)
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
606 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
607 if (Seobeo_Client_Read_Timed_Out(timeout_ms, last_progress_ms))
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
608 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
609 Seobeo_Log(SEOBEO_ERROR, "HTTP response body timed out\n");
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
610 if (p_file) fclose(p_file);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
611 Seobeo_Client_Response_Destroy(p_resp);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
612 return NULL;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
613 }
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
614 usleep(1000);
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
615 continue;
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
616 }
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
617 else
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
618 {
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
619 if (p_file) fclose(p_file);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
620 Seobeo_Client_Response_Destroy(p_resp);
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
621 return NULL;
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
622 }
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
623 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
624
279
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
625 if (is_chunked)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
626 {
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
627 char *decoded = Dowa_Arena_Allocate(p_resp->p_arena, used + 1);
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
628 size_t decoded_length = 0;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
629 if (!decoded ||
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
630 !Seobeo_Client_Decode_Chunked(
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
631 body, used, decoded, used, &decoded_length))
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
632 {
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
633 if (p_file) fclose(p_file);
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
634 Seobeo_Client_Response_Destroy(p_resp);
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
635 return NULL;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
636 }
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
637 decoded[decoded_length] = '\0';
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
638 if (download_path)
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
639 {
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
640 fwrite(decoded, 1, decoded_length, p_file);
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
641 p_resp->body_length = decoded_length;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
642 }
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
643 else
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
644 {
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
645 p_resp->body = decoded;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
646 p_resp->body_length = decoded_length;
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
647 }
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
648 }
b3b547563ec7 Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents: 221
diff changeset
649 else if (!download_path)
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
650 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
651 p_resp->body = body;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
652 p_resp->body_length = used;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
653 if (used < cap)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
654 body[used] = '\0';
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
655 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
656 else
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
657 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
658 p_resp->body_length = used;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
659 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
660 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
661
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
662 if (p_file)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
663 fclose(p_file);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
664
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
665 return p_resp;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
666 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
667
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
668 static Seobeo_Client_Response *Seobeo_Client_Execute_Single(Seobeo_Client_Request *p_req)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
669 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
670 Seobeo_Handle *p_handle = Seobeo_Stream_Handle_Client_Create(p_req->host, p_req->port, p_req->use_tls);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
671 if (!p_handle || p_handle->socket < 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
672 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
673 if (p_handle)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
674 Seobeo_Handle_Destroy(p_handle);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
675 return NULL;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
676 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
677
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
678 char request_buffer[8192];
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
679 int request_len = Seobeo_Client_Build_Request_Header(p_req, request_buffer, sizeof(request_buffer));
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
680
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
681 Seobeo_Handle_Queue(p_handle, (uint8*)request_buffer, (uint32)request_len);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
682
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
683 if (p_req->body && p_req->body_length > 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
684 Seobeo_Handle_Queue(p_handle, (uint8*)p_req->body, (uint32)p_req->body_length);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
685
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
686 if (Seobeo_Handle_Flush(p_handle) < 0)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
687 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
688 Seobeo_Handle_Destroy(p_handle);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
689 return NULL;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
690 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
691
221
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
692 Seobeo_Client_Response *p_resp =
ce7f4400c2de [hg-web] Harden forge and add changeset UI
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
693 Seobeo_Client_Parse_Response(p_handle, p_req->download_path, p_req->timeout_ms);
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
694
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
695 Seobeo_Handle_Destroy(p_handle);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
696
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
697 return p_resp;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
698 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
699
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
700 Seobeo_Client_Response *Seobeo_Client_Request_Execute(Seobeo_Client_Request *p_req)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
701 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
702 if (!p_req)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
703 return NULL;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
704
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
705 Seobeo_Client_Response *p_resp = Seobeo_Client_Execute_Single(p_req);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
706
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
707 if (!p_resp)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
708 return NULL;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
709
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
710 int redirect_count = 0;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
711 while (p_req->follow_redirects &&
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
712 p_resp->redirect_url &&
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
713 (p_resp->status_code == 301 || p_resp->status_code == 302 ||
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
714 p_resp->status_code == 303 || p_resp->status_code == 307 ||
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
715 p_resp->status_code == 308) &&
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
716 redirect_count < p_req->max_redirects)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
717 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
718 char *redirect_url = malloc(strlen(p_resp->redirect_url) + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
719 strcpy(redirect_url, p_resp->redirect_url);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
720
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
721 Seobeo_Client_Response_Destroy(p_resp);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
722
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
723 // Relative redirect
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
724 if (redirect_url[0] == '/')
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
725 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
726 size_t path_len = strlen(redirect_url);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
727 p_req->path = Dowa_Arena_Allocate(p_req->p_arena, path_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
728 strcpy(p_req->path, redirect_url);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
729
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
730 size_t url_len = strlen(p_req->host) + strlen(p_req->port) + path_len + 16;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
731 p_req->url = Dowa_Arena_Allocate(p_req->p_arena, url_len);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
732 snprintf(p_req->url, url_len, "%s://%s:%s%s",
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
733 p_req->use_tls ? "https" : "http",
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
734 p_req->host, p_req->port, p_req->path);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
735 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
736 else
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
737 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
738 size_t url_len = strlen(redirect_url);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
739 p_req->url = Dowa_Arena_Allocate(p_req->p_arena, url_len + 1);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
740 strcpy(p_req->url, redirect_url);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
741
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
742 Seobeo_Client_Parse_Url(redirect_url, &p_req->host, &p_req->port, &p_req->path, &p_req->use_tls, p_req->p_arena);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
743 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
744
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
745 free(redirect_url);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
746
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
747 p_resp = Seobeo_Client_Execute_Single(p_req);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
748 if (!p_resp)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
749 return NULL;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
750
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
751 redirect_count++;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
752 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
753
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
754 return p_resp;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
755 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
756
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
757 void Seobeo_Client_Request_Destroy(Seobeo_Client_Request *p_req)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
758 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
759 if (!p_req)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
760 return;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
761
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
762 if (p_req->p_arena)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
763 Dowa_Arena_Free(p_req->p_arena);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
764
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
765 // Note: headers_map and headers_array are allocated using arena functions
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
766 // (Dowa_HashMap_Push_Arena, Dowa_Array_Push_Arena), so they are freed
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
767 // when the arena is freed above. Do not call Dowa_HashMap_Free or
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
768 // Dowa_Array_Free on them.
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
769
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
770 free(p_req);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
771 }
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
772
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
773 void Seobeo_Client_Response_Destroy(Seobeo_Client_Response *p_resp)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
774 {
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
775 if (!p_resp)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
776 return;
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
777
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
778 if (p_resp->p_arena)
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
779 Dowa_Arena_Free(p_resp->p_arena);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
780
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
781 // Note: headers are allocated using Dowa_HashMap_Push_Arena, so they are
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 163
diff changeset
782 // freed when the arena is freed above. Do not call Dowa_HashMap_Free.
119
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
783
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
784 free(p_resp);
c39582f937e5 [Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
785 }