if (uh->state >= HTTP_STATE_HEADERS_SENT)
return;
- if (uh->auth_type == AUTH_TYPE_UNKNOWN)
- req_type = REQ_HEAD;
-
ustream_printf(uh->us,
"%s %s HTTP/1.1\r\n"
"Host: %s\r\n",
uh->uc.meta = uh->meta.head;
uclient_http_process_headers(uh);
- if (auth_type == AUTH_TYPE_UNKNOWN) {
+ if (auth_type == AUTH_TYPE_UNKNOWN && uh->uc.status_code == 401 &&
+ (uh->req_type == REQ_HEAD || uh->req_type == REQ_GET)) {
uclient_http_init_request(uh);
uclient_http_send_headers(uh);
uh->state = HTTP_STATE_REQUEST_DONE;
uc->cb->data_read(uc);
}
+static void __uclient_notify_write(struct uclient_http *uh)
+{
+ struct uclient *uc = &uh->uc;
+ uc->cb->data_sent(uc);
+}
+
static void uclient_notify_read(struct ustream *us, int bytes)
{
struct uclient_http *uh = container_of(us, struct uclient_http, ufd.stream);
__uclient_notify_read(uh);
}
+static void uclient_notify_write(struct ustream *us, int bytes)
+{
+ struct uclient_http *uh = container_of(us, struct uclient_http, ufd.stream);
+
+ __uclient_notify_write(uh);
+}
+
static void uclient_notify_state(struct ustream *us)
{
struct uclient_http *uh = container_of(us, struct uclient_http, ufd.stream);
us->string_data = true;
us->notify_state = uclient_notify_state;
us->notify_read = uclient_notify_read;
+ us->notify_write = uclient_notify_write;
ret = uclient_do_connect(uh, "80");
if (ret)
__uclient_notify_read(uh);
}
+static void uclient_ssl_notify_write(struct ustream *us, int bytes)
+{
+ struct uclient_http *uh = container_of(us, struct uclient_http, ussl.stream);
+
+ __uclient_notify_write(uh);
+}
+
static void uclient_ssl_notify_state(struct ustream *us)
{
struct uclient_http *uh = container_of(us, struct uclient_http, ussl.stream);
us->string_data = true;
us->notify_state = uclient_ssl_notify_state;
us->notify_read = uclient_ssl_notify_read;
+ us->notify_write = uclient_ssl_notify_write;
uh->ussl.notify_error = uclient_ssl_notify_error;
uh->ussl.notify_verify_error = uclient_ssl_notify_verify_error;
uh->ussl.notify_connected = uclient_ssl_notify_connected;