diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.c b/src/http/modules/proxy/ngx_http_proxy_handler.c
index baecb25..962dcbf 100644
--- a/src/http/modules/proxy/ngx_http_proxy_handler.c
+++ b/src/http/modules/proxy/ngx_http_proxy_handler.c
@@ -8,6 +8,10 @@
 
 
 
+static void ngx_http_proxy_send_request(ngx_event_t *wev);
+static void *ngx_http_proxy_create_loc_conf(ngx_conf_t *cf);
+
+
 static ngx_command_t ngx_http_proxy_commands[] = {
     ngx_null_command
 };
@@ -20,12 +24,11 @@
     NULL,                                  /* create server configuration */
     NULL,                                  /* merge server configuration */
 
+    ngx_http_proxy_create_loc_conf,        /* create location configration */
 #if 0
-    ngx_http_proxy_create_conf,            /* create location configration */
     ngx_http_proxy_merge_conf              /* merge location configration */
 #endif
 
-    NULL,
     NULL
 };
 
@@ -46,24 +49,25 @@
 
 int ngx_http_proxy_handler(ngx_http_request_t *r)
 {
-    int                     rc;
-    ngx_http_proxy_ctx_t   *p;
-    ngx_peer_connection_t  *pc;
-
+    int                         rc;
+    ngx_http_proxy_ctx_t       *p;
+    ngx_http_proxy_loc_conf_t  *lcf;
 
     ngx_http_create_ctx(r, p, ngx_http_proxy_module,
                         sizeof(ngx_http_proxy_ctx_t),
                         NGX_HTTP_INTERNAL_SERVER_ERROR);
 
+    p->lcf = ngx_http_get_module_loc_conf(r, ngx_http_proxy_module);
+
+#if 0
+    create_request;
+#endif
 
     p->action = "connecting to upstream";
     p->request = r;
+    p->upstream.peers = p->lcf->peers;
 
-
-#if 0
-    pc->peers = lcf->peers;
-#endif
-
+    /* TODO: change log->data, how to restore log->data ? */
     p->upstream.log = r->connection->log;
 
     do {
@@ -74,56 +78,89 @@
         }
 
         if (rc == NGX_OK) {
-            send_proxy_request(p);
-            return NGX_OK;
+            ngx_http_proxy_send_request(p->upstream.connection->write);
+            /* ??? */ return NGX_OK;
         }
 
-        if (rc == NGX_AGAIN && p->upstream.connection) {
-            return NGX_OK;
+        if (rc == NGX_AGAIN) {
+            /* ??? */ return NGX_OK;
         }
 
+        /* rc == NGX_CONNECT_FAILED */
+
+        ngx_event_connect_peer_failed(&p->upstream);
+
     } while (p->upstream.tries);
 
     return NGX_HTTP_BAD_GATEWAY;
 }
 
 
-#if 0
+static void ngx_http_proxy_send_request(ngx_event_t *wev)
+{
+    int                    rc;
+    ngx_chain_t           *chain;
+    ngx_connection_t      *c;
+    ngx_http_proxy_ctx_t  *p;
 
-ngx_http_proxy_connect()
-    do {
-        ngx_event_connect_peer()
-        if error
-            return error
-        if ok
-            return ok
-        if again
-            return again
+    c = wev->data;
+    p = c->data;
 
-        /* next */
-    while (tries)
-}
-
-
-ngx_http_proxy_send_request(ngx_event_t *wev)
     for ( ;; ) {
-       send
-       if ok
-          ???
-       if again
-          return
-       if error
-          close
-          ngx_http_proxy_connect()
-          if ok
-              continue
-          if error
-              return
-          if again
-              return
-    }
+        chain = ngx_write_chain(c, p->request_hunks);
 
+        if (chain == (ngx_chain_t *) -1) {
+            ngx_http_proxy_close_connection(c);
+
+            do {
+                rc = ngx_event_connect_peer(&p->upstream);
+
+                if (rc == NGX_OK) {
+#if 0
+                    copy chain and hunks p->request_hunks from p->initial_request_hunks;
 #endif
+                    c = p->connection;
+                    wev = c->write;
+
+                    break;
+                }
+
+                if (rc == NGX_ERROR) {
+                    ngx_http_finalize_request(p->request,
+                                              NGX_HTTP_INTERNAL_SERVER_ERROR);
+                    return;
+                }
+
+                if (rc == NGX_AGAIN) {
+                    return;
+                }
+
+                /* rc == NGX_CONNECT_FAILED */
+
+                ngx_event_connect_peer_failed(&p->upstream);
+
+            } while (p->upstream.tries);
+
+            return;
+
+        } else {
+            p->request_hunks = chain;
+
+            ngx_del_timer(wev);
+
+            if (chain) {
+                ngx_add_timer(wev, p->lcf->send_timeout);
+                wev->timer_set = 1;
+
+            } else {
+                wev->timer_set = 0;
+                /* TODO: del event */
+            }
+
+            return;
+        }
+    }
+}
 
 
 static size_t ngx_http_proxy_log_error(void *data, char *buf, size_t len)
@@ -137,3 +174,30 @@
             p->request->connection->addr_text.data,
             p->request->unparsed_uri.data);
 }
+
+
+static void *ngx_http_proxy_create_loc_conf(ngx_conf_t *cf)
+{
+    ngx_http_proxy_loc_conf_t  *conf;
+
+    ngx_test_null(conf,
+                  ngx_pcalloc(cf->pool, sizeof(ngx_http_proxy_loc_conf_t)),
+                  NGX_CONF_ERROR);
+
+    /* STUB */
+    ngx_test_null(conf->peers, ngx_pcalloc(cf->pool, sizeof(ngx_peers_t)),
+                  NGX_CONF_ERROR);
+
+    conf->peers->number = 1;
+    conf->peers->peers[0].addr = inet_addr("127.0.0.1");
+    conf->peers->peers[0].host.data = "localhost";
+    conf->peers->peers[0].host.len = sizeof("localhost") - 1;
+    conf->peers->peers[0].port = htons(9000);
+    conf->peers->peers[0].addr_port_text.data = "127.0.0.1:9000";
+    conf->peers->peers[0].addr_port_text.len = sizeof("127.0.0.1:9000") - 1;
+
+    conf->send_timeout = 30000;
+    /* */
+
+    return conf;
+}
