68 if (uri_include_all) {
69 if (uri->scheme != NULL) {
70 len += bstr_len(uri->scheme);
74 if ((uri->username != NULL) || (uri->password != NULL)) {
75 if (uri->username != NULL) {
76 len += bstr_len(uri->username);
81 if (uri->password != NULL) {
82 len += bstr_len(uri->password);
88 if (uri->hostname != NULL) {
89 len += bstr_len(uri->hostname);
92 if (uri->port != NULL) {
94 len += bstr_len(uri->port);
98 if (uri->path != NULL) {
99 len += bstr_len(uri->path);
102 if (uri->query != NULL) {
104 len += bstr_len(uri->query);
107 if (uri->fragment != NULL) {
109 len += bstr_len(uri->fragment);
114 bstr *r = bstr_alloc(
len);
119 if (uri_include_all) {
120 if (uri->scheme != NULL) {
121 bstr_add_noex(r, uri->scheme);
122 bstr_add_c_noex(r,
"://");
125 if ((uri->username != NULL) || (uri->password != NULL)) {
126 if (uri->username != NULL) {
127 bstr_add_noex(r, uri->username);
130 bstr_add_c_noex(r,
":");
132 if (uri->password != NULL) {
133 bstr_add_noex(r, uri->password);
136 bstr_add_c_noex(r,
"@");
139 if (uri->hostname != NULL) {
140 bstr_add_noex(r, uri->hostname);
143 if (uri->port != NULL) {
144 bstr_add_c_noex(r,
":");
145 bstr_add_noex(r, uri->port);
149 if (uri->path != NULL) {
150 bstr_add_noex(r, uri->path);
153 if (uri->query != NULL) {
154 bstr *query = bstr_dup(uri->query);
157 htp_urldecode_inplace(tx->cfg, HTP_DECODER_URLENCODED, query, &
flags);
158 bstr_add_c_noex(r,
"?");
159 bstr_add_noex(r, query);
164 if (uri->fragment != NULL) {
165 bstr_add_c_noex(r,
"#");
166 bstr_add_noex(r, uri->fragment);