Pass header sent from client.
This commit is contained in:
parent
20f21b707b
commit
ed7d430f2b
2 changed files with 41 additions and 1 deletions
|
@ -17,6 +17,7 @@ namespace atom {
|
||||||
|
|
||||||
NodeDebugger::NodeDebugger()
|
NodeDebugger::NodeDebugger()
|
||||||
: thread_("NodeDebugger"),
|
: thread_("NodeDebugger"),
|
||||||
|
content_length_(-1),
|
||||||
weak_factory_(this) {
|
weak_factory_(this) {
|
||||||
bool use_debug_agent = false;
|
bool use_debug_agent = false;
|
||||||
int port = 5858;
|
int port = 5858;
|
||||||
|
@ -69,8 +70,10 @@ void NodeDebugger::StartServer(int port) {
|
||||||
void NodeDebugger::DidAccept(net::StreamListenSocket* server,
|
void NodeDebugger::DidAccept(net::StreamListenSocket* server,
|
||||||
scoped_ptr<net::StreamListenSocket> socket) {
|
scoped_ptr<net::StreamListenSocket> socket) {
|
||||||
// Only accept one session.
|
// Only accept one session.
|
||||||
if (accepted_socket_)
|
if (accepted_socket_) {
|
||||||
|
socket->Send(std::string("Remote debugging session already active"), true);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
accepted_socket_ = socket.Pass();
|
accepted_socket_ = socket.Pass();
|
||||||
}
|
}
|
||||||
|
@ -78,6 +81,38 @@ void NodeDebugger::DidAccept(net::StreamListenSocket* server,
|
||||||
void NodeDebugger::DidRead(net::StreamListenSocket* socket,
|
void NodeDebugger::DidRead(net::StreamListenSocket* socket,
|
||||||
const char* data,
|
const char* data,
|
||||||
int len) {
|
int len) {
|
||||||
|
buffer_.append(data, len);
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (buffer_.size() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Read the "Content-Length" header.
|
||||||
|
if (content_length_ < 0) {
|
||||||
|
size_t pos = buffer_.find("\r\n\r\n");
|
||||||
|
if (pos == std::string::npos)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// We can be sure that the header is "Content-Length: xxx\r\n".
|
||||||
|
std::string content_length = buffer_.substr(16, pos - 16);
|
||||||
|
if (!base::StringToInt(content_length, &content_length_)) {
|
||||||
|
DidClose(accepted_socket_.get());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Strip header from buffer.
|
||||||
|
buffer_ = buffer_.substr(pos + 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the message.
|
||||||
|
if (buffer_.size() >= static_cast<size_t>(content_length_)) {
|
||||||
|
std::string message = buffer_.substr(0, content_length_);
|
||||||
|
buffer_ = buffer_.substr(content_length_);
|
||||||
|
|
||||||
|
// Get ready for next message.
|
||||||
|
content_length_ = -1;
|
||||||
|
}
|
||||||
|
} while (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeDebugger::DidClose(net::StreamListenSocket* socket) {
|
void NodeDebugger::DidClose(net::StreamListenSocket* socket) {
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
#ifndef ATOM_BROWSER_NODE_DEBUGGER_H_
|
#ifndef ATOM_BROWSER_NODE_DEBUGGER_H_
|
||||||
#define ATOM_BROWSER_NODE_DEBUGGER_H_
|
#define ATOM_BROWSER_NODE_DEBUGGER_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "base/memory/scoped_ptr.h"
|
#include "base/memory/scoped_ptr.h"
|
||||||
#include "base/memory/weak_ptr.h"
|
#include "base/memory/weak_ptr.h"
|
||||||
#include "base/threading/thread.h"
|
#include "base/threading/thread.h"
|
||||||
|
@ -33,6 +35,9 @@ class NodeDebugger : public net::StreamListenSocket::Delegate {
|
||||||
scoped_ptr<net::StreamListenSocket> server_;
|
scoped_ptr<net::StreamListenSocket> server_;
|
||||||
scoped_ptr<net::StreamListenSocket> accepted_socket_;
|
scoped_ptr<net::StreamListenSocket> accepted_socket_;
|
||||||
|
|
||||||
|
std::string buffer_;
|
||||||
|
int content_length_;
|
||||||
|
|
||||||
base::WeakPtrFactory<NodeDebugger> weak_factory_;
|
base::WeakPtrFactory<NodeDebugger> weak_factory_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(NodeDebugger);
|
DISALLOW_COPY_AND_ASSIGN(NodeDebugger);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue