| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/tools/flip_server/streamer_interface.h" | 5 #include "net/tools/flip_server/streamer_interface.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "net/tools/balsa/balsa_frame.h" | 9 #include "net/tools/balsa/balsa_frame.h" |
| 10 #include "net/tools/flip_server/constants.h" | 10 #include "net/tools/flip_server/constants.h" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 void StreamerSM::InitSMConnection(SMConnectionPoolInterface* connection_pool, | 50 void StreamerSM::InitSMConnection(SMConnectionPoolInterface* connection_pool, |
| 51 SMInterface* sm_interface, | 51 SMInterface* sm_interface, |
| 52 EpollServer* epoll_server, | 52 EpollServer* epoll_server, |
| 53 int fd, | 53 int fd, |
| 54 std::string server_ip, | 54 std::string server_ip, |
| 55 std::string server_port, | 55 std::string server_port, |
| 56 std::string remote_ip, | 56 std::string remote_ip, |
| 57 bool use_ssl) { | 57 bool use_ssl) { |
| 58 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "StreamerSM: Initializing server " | 58 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "StreamerSM: Initializing server " |
| 59 << "connection."; | 59 << "connection."; |
| 60 connection_->InitSMConnection(connection_pool, sm_interface, | 60 connection_->InitSMConnection(connection_pool, |
| 61 epoll_server, fd, server_ip, | 61 sm_interface, |
| 62 server_port, remote_ip, use_ssl); | 62 epoll_server, |
| 63 fd, |
| 64 server_ip, |
| 65 server_port, |
| 66 remote_ip, |
| 67 use_ssl); |
| 63 } | 68 } |
| 64 | 69 |
| 65 size_t StreamerSM::ProcessReadInput(const char* data, size_t len) { | 70 size_t StreamerSM::ProcessReadInput(const char* data, size_t len) { |
| 66 // For now we only want to parse http requests. Just stream responses | 71 // For now we only want to parse http requests. Just stream responses |
| 67 if (is_request_) { | 72 if (is_request_) { |
| 68 return http_framer_->ProcessInput(data, len); | 73 return http_framer_->ProcessInput(data, len); |
| 69 } else { | 74 } else { |
| 70 return sm_other_interface_->ProcessWriteInput(data, len); | 75 return sm_other_interface_->ProcessWriteInput(data, len); |
| 71 } | 76 } |
| 72 } | 77 } |
| 73 | 78 |
| 74 size_t StreamerSM::ProcessWriteInput(const char* data, size_t len) { | 79 size_t StreamerSM::ProcessWriteInput(const char* data, size_t len) { |
| 75 char * dataPtr = new char[len]; | 80 char* dataPtr = new char[len]; |
| 76 memcpy(dataPtr, data, len); | 81 memcpy(dataPtr, data, len); |
| 77 DataFrame* df = new DataFrame; | 82 DataFrame* df = new DataFrame; |
| 78 df->data = (const char *)dataPtr; | 83 df->data = (const char*)dataPtr; |
| 79 df->size = len; | 84 df->size = len; |
| 80 df->delete_when_done = true; | 85 df->delete_when_done = true; |
| 81 connection_->EnqueueDataFrame(df); | 86 connection_->EnqueueDataFrame(df); |
| 82 return len; | 87 return len; |
| 83 } | 88 } |
| 84 | 89 |
| 85 bool StreamerSM::Error() const { | 90 bool StreamerSM::Error() const { return false; } |
| 86 return false; | |
| 87 } | |
| 88 | 91 |
| 89 const char* StreamerSM::ErrorAsString() const { | 92 const char* StreamerSM::ErrorAsString() const { return "(none)"; } |
| 90 return "(none)"; | |
| 91 } | |
| 92 | 93 |
| 93 bool StreamerSM::MessageFullyRead() const { | 94 bool StreamerSM::MessageFullyRead() const { |
| 94 if (is_request_) { | 95 if (is_request_) { |
| 95 return http_framer_->MessageFullyRead(); | 96 return http_framer_->MessageFullyRead(); |
| 96 } else { | 97 } else { |
| 97 return false; | 98 return false; |
| 98 } | 99 } |
| 99 } | 100 } |
| 100 | 101 |
| 101 void StreamerSM::Reset() { | 102 void StreamerSM::Reset() { |
| 102 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "StreamerSM: Reset"; | 103 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "StreamerSM: Reset"; |
| 103 connection_->Cleanup("Server Reset"); | 104 connection_->Cleanup("Server Reset"); |
| 104 http_framer_->Reset(); | 105 http_framer_->Reset(); |
| 105 } | 106 } |
| 106 | 107 |
| 107 void StreamerSM::ResetForNewConnection() { | 108 void StreamerSM::ResetForNewConnection() { |
| 108 http_framer_->Reset(); | 109 http_framer_->Reset(); |
| 109 sm_other_interface_->Reset(); | 110 sm_other_interface_->Reset(); |
| 110 } | 111 } |
| 111 | 112 |
| 112 void StreamerSM::Cleanup() { | 113 void StreamerSM::Cleanup() { |
| 113 if (is_request_) | 114 if (is_request_) |
| 114 http_framer_->Reset(); | 115 http_framer_->Reset(); |
| 115 } | 116 } |
| 116 | 117 |
| 117 int StreamerSM::PostAcceptHook() { | 118 int StreamerSM::PostAcceptHook() { |
| 118 if (!sm_other_interface_) { | 119 if (!sm_other_interface_) { |
| 119 SMConnection *server_connection = | 120 SMConnection* server_connection = SMConnection::NewSMConnection( |
| 120 SMConnection::NewSMConnection(epoll_server_, NULL, NULL, | 121 epoll_server_, NULL, NULL, acceptor_, "server_conn: "); |
| 121 acceptor_, "server_conn: "); | |
| 122 if (server_connection == NULL) { | 122 if (server_connection == NULL) { |
| 123 LOG(ERROR) << "StreamerSM: Could not create server conenction."; | 123 LOG(ERROR) << "StreamerSM: Could not create server conenction."; |
| 124 return 0; | 124 return 0; |
| 125 } | 125 } |
| 126 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "StreamerSM: Creating new server " | 126 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "StreamerSM: Creating new server " |
| 127 << "connection."; | 127 << "connection."; |
| 128 sm_other_interface_ = new StreamerSM(server_connection, this, | 128 sm_other_interface_ = |
| 129 epoll_server_, acceptor_); | 129 new StreamerSM(server_connection, this, epoll_server_, acceptor_); |
| 130 sm_other_interface_->InitSMInterface(this, 0); | 130 sm_other_interface_->InitSMInterface(this, 0); |
| 131 } | 131 } |
| 132 // The Streamer interface is used to stream HTTPS connections, so we | 132 // The Streamer interface is used to stream HTTPS connections, so we |
| 133 // will always use the https_server_ip/port here. | 133 // will always use the https_server_ip/port here. |
| 134 sm_other_interface_->InitSMConnection(NULL, | 134 sm_other_interface_->InitSMConnection(NULL, |
| 135 sm_other_interface_, | 135 sm_other_interface_, |
| 136 epoll_server_, | 136 epoll_server_, |
| 137 -1, | 137 -1, |
| 138 acceptor_->https_server_ip_, | 138 acceptor_->https_server_ip_, |
| 139 acceptor_->https_server_port_, | 139 acceptor_->https_server_port_, |
| 140 std::string(), | 140 std::string(), |
| 141 false); | 141 false); |
| 142 | 142 |
| 143 return 1; | 143 return 1; |
| 144 } | 144 } |
| 145 | 145 |
| 146 size_t StreamerSM::SendSynStream(uint32 stream_id, | 146 size_t StreamerSM::SendSynStream(uint32 stream_id, |
| 147 const BalsaHeaders& headers) { | 147 const BalsaHeaders& headers) { |
| 148 return 0; | 148 return 0; |
| 149 } | 149 } |
| 150 | 150 |
| 151 size_t StreamerSM::SendSynReply(uint32 stream_id, const BalsaHeaders& headers) { | 151 size_t StreamerSM::SendSynReply(uint32 stream_id, const BalsaHeaders& headers) { |
| 152 return 0; | 152 return 0; |
| 153 } | 153 } |
| 154 | 154 |
| 155 void StreamerSM::ProcessBodyInput(const char *input, size_t size) { | 155 void StreamerSM::ProcessBodyInput(const char* input, size_t size) { |
| 156 VLOG(2) << ACCEPTOR_CLIENT_IDENT | 156 VLOG(2) << ACCEPTOR_CLIENT_IDENT |
| 157 << "StreamerHttpSM: Process Body Input Data: " | 157 << "StreamerHttpSM: Process Body Input Data: " |
| 158 << "size " << size; | 158 << "size " << size; |
| 159 sm_other_interface_->ProcessWriteInput(input, size); | 159 sm_other_interface_->ProcessWriteInput(input, size); |
| 160 } | 160 } |
| 161 | 161 |
| 162 void StreamerSM::MessageDone() { | 162 void StreamerSM::MessageDone() { |
| 163 if (acceptor_->flip_handler_type_ == FLIP_HANDLER_PROXY) { | 163 if (acceptor_->flip_handler_type_ == FLIP_HANDLER_PROXY) { |
| 164 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "StreamerHttpSM: MessageDone."; | 164 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "StreamerHttpSM: MessageDone."; |
| 165 // TODO(kelindsay): anything need to be done ehre? | 165 // TODO(kelindsay): anything need to be done ehre? |
| (...skipping 14 matching lines...) Expand all Loading... |
| 180 LOG(INFO) << "NOT adding forward header."; | 180 LOG(INFO) << "NOT adding forward header."; |
| 181 } | 181 } |
| 182 SimpleBuffer sb; | 182 SimpleBuffer sb; |
| 183 char* buffer; | 183 char* buffer; |
| 184 int size; | 184 int size; |
| 185 mod_headers.WriteHeaderAndEndingToBuffer(&sb); | 185 mod_headers.WriteHeaderAndEndingToBuffer(&sb); |
| 186 sb.GetReadablePtr(&buffer, &size); | 186 sb.GetReadablePtr(&buffer, &size); |
| 187 sm_other_interface_->ProcessWriteInput(buffer, size); | 187 sm_other_interface_->ProcessWriteInput(buffer, size); |
| 188 } | 188 } |
| 189 | 189 |
| 190 void StreamerSM::HandleHeaderError(BalsaFrame* framer) { | 190 void StreamerSM::HandleHeaderError(BalsaFrame* framer) { HandleError(); } |
| 191 HandleError(); | |
| 192 } | |
| 193 | 191 |
| 194 void StreamerSM::HandleChunkingError(BalsaFrame* framer) { | 192 void StreamerSM::HandleChunkingError(BalsaFrame* framer) { HandleError(); } |
| 195 HandleError(); | |
| 196 } | |
| 197 | 193 |
| 198 void StreamerSM::HandleBodyError(BalsaFrame* framer) { | 194 void StreamerSM::HandleBodyError(BalsaFrame* framer) { HandleError(); } |
| 199 HandleError(); | |
| 200 } | |
| 201 | 195 |
| 202 void StreamerSM::HandleError() { | 196 void StreamerSM::HandleError() { |
| 203 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "Error detected"; | 197 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "Error detected"; |
| 204 } | 198 } |
| 205 | 199 |
| 206 } // namespace net | 200 } // namespace net |
| 207 | |
| OLD | NEW |