annotate seobeo/s_http_client.c @ 281:c57149ad216e

Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
author MrJuneJune <me@mrjunejune.com>
date Tue, 18 Aug 2026 22:18:15 -0700
parents b3b547563ec7
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 }