Lines Matching refs:conn

370     RewriteConnection*  conn = (RewriteConnection*)root;
372 if (conn->slirp_fd >= 0) {
373 socket_close(conn->slirp_fd);
374 conn->slirp_fd = -1;
376 http_request_free(conn->request);
378 qemu_free(conn);
383 rewrite_connection_init( RewriteConnection* conn )
385 HttpService* service = (HttpService*) conn->root->service;
386 ProxyConnection* root = conn->root;
388 conn->slirp_fd = -1;
389 conn->state = STATE_CONNECTING;
393 PROXY_LOG("%s: connecting", conn->root->name);
402 conn->state = STATE_CREATE_SOCKET_PAIR;
408 rewrite_connection_create_sockets( RewriteConnection* conn )
413 ProxyConnection* root = conn->root;
415 if (socket_pair( &slirp_1, &conn->slirp_fd ) < 0) {
422 conn->state = STATE_REQUEST_FIRST_LINE;
429 rewrite_connection_read_request( RewriteConnection* conn )
431 ProxyConnection* root = conn->root;
434 ret = proxy_connection_receive_line(root, conn->slirp_fd);
461 if (conn->request)
462 http_request_free(conn->request);
464 conn->request = http_request_alloc( method, uri, version );
465 if (!conn->request)
475 rewrite_connection_read_reply( RewriteConnection* conn )
477 ProxyConnection* root = conn->root;
482 HttpRequest* request = conn->request;
514 rewrite_connection_read_headers( RewriteConnection* conn,
518 ProxyConnection* root = conn->root;
539 ret = http_request_add_to_last_header( conn->request, line );
553 if (http_request_add_header(conn->request, key, value) < 0)
563 rewrite_connection_rewrite_request( RewriteConnection* conn )
565 ProxyConnection* root = conn->root;
567 HttpRequest* r = conn->request;
571 proxy_connection_rewind(conn->root);
599 rewrite_connection_rewrite_reply( RewriteConnection* conn )
601 HttpRequest* r = conn->request;
602 ProxyConnection* root = conn->root;
618 rewrite_connection_get_body_length( RewriteConnection* conn,
621 HttpRequest* r = conn->request;
622 ProxyConnection* root = conn->root;
626 conn->body_mode = BODY_NONE;
627 conn->body_length = 0;
628 conn->body_total = 0;
629 conn->body_sent = 0;
630 conn->body_is_closed = 0;
631 conn->body_is_full = 0;
632 conn->body_has_data = 0;
660 conn->body_mode = BODY_KNOWN_LENGTH;
661 conn->body_length = body_len;
666 conn->body_mode = BODY_CHUNKED;
667 conn->parse_chunk_header = 0;
668 conn->parse_chunk_trailer = 0;
669 conn->chunk_length = -1;
670 conn->chunk_total = 0;
671 conn->chunk_state = CHUNK_HEADER;
674 if (conn->body_mode == BODY_NONE) {
690 conn->body_mode = BODY_UNTIL_CLOSE;
693 root->name, conn->body_length,
694 body_mode_str[conn->body_mode]);
703 rewrite_connection_read_body( RewriteConnection* conn, int fd )
705 ProxyConnection* root = conn->root;
710 if (conn->body_is_closed) {
715 switch (conn->body_mode) {
722 if (conn->body_length == 0)
725 if (conn->body_length > MAX_BODY_BUFFER)
728 wanted = (int)conn->body_length;
737 if (conn->chunk_state == CHUNK_DATA_END) {
753 conn->chunk_state = CHUNK_HEADER;
757 if (conn->chunk_state == CHUNK_HEADER) {
763 if (!conn->parse_chunk_header) {
764 if (conn->body_has_data)
767 conn->parse_chunk_header = 1;
773 conn->parse_chunk_header = 0;
793 conn->chunk_length = length;
794 conn->chunk_total = 0;
795 conn->chunk_state = CHUNK_DATA;
798 conn->chunk_state = CHUNK_TRAILER;
799 conn->parse_chunk_trailer = 0;
803 if (conn->chunk_state == CHUNK_TRAILER) {
805 if (!conn->parse_chunk_trailer) {
806 if (conn->body_has_data)
808 conn->parse_chunk_trailer = 1;
810 ret = rewrite_connection_read_headers(conn, fd);
812 conn->body_is_closed = 1;
818 if (conn->chunk_length > MAX_BODY_BUFFER)
821 wanted = (int)conn->chunk_length;
834 conn->body_is_full = 1;
844 conn->body_has_data = (str->n > 0);
845 conn->body_is_full = (str->n == MAX_BODY_BUFFER);
848 if (conn->body_mode == BODY_UNTIL_CLOSE) {
851 conn->body_total += root->str_recv;
853 root->name, conn->body_total);
854 conn->body_is_closed = 1;
861 switch (conn->body_mode) {
863 conn->chunk_total += avail;
864 conn->chunk_length -= avail;
866 if (conn->chunk_length == 0) {
868 root->name, conn->chunk_total);
869 conn->body_total += conn->chunk_total;
870 conn->chunk_total = 0;
871 conn->chunk_length = -1;
872 conn->chunk_state = CHUNK_DATA;
877 conn->body_length -= avail;
878 conn->body_total += avail;
880 if (conn->body_length == 0) {
882 root->name, conn->body_total);
883 conn->body_is_closed = 1;
889 conn->body_total += avail;
900 rewrite_connection_send_body( RewriteConnection* conn, int fd )
902 ProxyConnection* root = conn->root;
906 if (conn->body_has_data) {
914 conn->body_is_full = (str->n == MAX_BODY_BUFFER);
915 conn->body_has_data = (str->n > 0);
916 conn->body_sent += root->str_sent;
922 if (!conn->body_is_closed || conn->body_has_data)
926 root->name, conn->body_sent);
930 root->name, conn->body_is_closed,
931 conn->body_has_data, str->n,
943 RewriteConnection* conn = (RewriteConnection*)root;
944 int slirp = conn->slirp_fd;
947 switch (conn->state) {
964 if (!conn->body_is_closed && !conn->body_is_full)
967 if (conn->body_has_data)
981 if (conn->body_has_data)
984 if (!conn->body_is_closed && !conn->body_is_full)
996 RewriteConnection* conn = (RewriteConnection*)root;
998 int slirp = conn->slirp_fd;
1004 switch (conn->state) {
1008 conn->state = STATE_CREATE_SOCKET_PAIR;
1014 if (rewrite_connection_create_sockets(conn) < 0) {
1018 conn->state = STATE_REQUEST_FIRST_LINE;
1025 ret = rewrite_connection_read_request(conn);
1028 conn->state = STATE_REQUEST_HEADERS;
1035 ret = rewrite_connection_read_headers(conn, slirp);
1038 if (rewrite_connection_rewrite_request(conn) < 0)
1041 conn->state = STATE_REQUEST_SEND;
1050 if (rewrite_connection_get_body_length(conn, 1) < 0) {
1052 } else if (conn->body_mode != BODY_NONE) {
1055 conn->state = STATE_REQUEST_BODY;
1059 conn->state = STATE_REPLY_FIRST_LINE;
1067 ret = rewrite_connection_read_body(conn, slirp);
1070 ret = rewrite_connection_send_body(conn, proxy);
1074 conn->state = STATE_REPLY_FIRST_LINE;
1081 ret = rewrite_connection_read_reply(conn);
1084 conn->state = STATE_REPLY_HEADERS;
1091 ret = rewrite_connection_read_headers(conn, proxy);
1094 if (rewrite_connection_rewrite_reply(conn) < 0)
1097 conn->state = STATE_REPLY_SEND;
1104 ret = proxy_connection_send(conn->root, slirp);
1106 if (rewrite_connection_get_body_length(conn, 0) < 0) {
1108 } else if (conn->body_mode != BODY_NONE) {
1111 conn->state = STATE_REPLY_BODY;
1115 conn->state = STATE_REQUEST_FIRST_LINE;
1123 ret = rewrite_connection_read_body(conn, proxy);
1126 ret = rewrite_connection_send_body(conn, slirp);
1128 if (conn->body_mode == BODY_UNTIL_CLOSE) {
1134 conn->state = STATE_REQUEST_FIRST_LINE;
1154 RewriteConnection* conn;
1161 conn = qemu_mallocz(sizeof(*conn));
1162 if (conn == NULL) {
1167 proxy_connection_init( conn->root, s, address, service->root,
1172 if ( rewrite_connection_init( conn ) < 0 ) {
1173 rewrite_connection_free( conn->root );
1177 return conn->root;