V8LIB = $(HOME)/src/v8/libv8.a
CFLAGS = -g -I$(V8INC) -Ideps/oi -DHAVE_GNUTLS=0 -Ideps/ebb
-LDFLAGS = -lev #-lefence
+LDFLAGS = -lev -pthread #-lefence
ifdef EVDIR
CFLAGS += -I$(EVDIR)/include
LDFLAGS += -L$(EVDIR)/lib
endif
-server: server.o oi_socket.o ebb_request_parser.o
- g++ $(LDFLAGS) $(V8LIB) $^ -o server
+server: js_http_request_processor.o server.o oi_socket.o ebb_request_parser.o
+ g++ -o server $^ $(LDFLAGS) $(V8LIB)
server.o: server.cc
g++ $(CFLAGS) -c $<
+
+js_http_request_processor.o: js_http_request_processor.cc
+ g++ $(CFLAGS) -c $<
ebb_request_parser.o: ebb_request_parser.c deps/ebb/ebb_request_parser.h
gcc $(CFLAGS) -c $<
--- /dev/null
+// Copyright 2008 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following
+// disclaimer in the documentation and/or other materials provided
+// with the distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived
+// from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function Initialize() { }
+
+
+function Process(request) {
+ print("hello ");
+ if (options.verbose) {
+ log("Processing " + request.host + request.path +
+ " from " + request.referrer + "@" + request.userAgent);
+ }
+ if (!output[request.host]) {
+ output[request.host] = 1;
+ } else {
+ output[request.host]++
+ }
+}
+
+Initialize();
#include <string>
#include <map>
-#include <js_http_request_processor.h>
+#include "js_http_request_processor.h"
using namespace std;
using namespace v8;
printf("Logged: %s\n", event);
}
-
-/**
- * A simplified http request.
- */
-class StringHttpRequest : public HttpRequest
-{
-public:
- StringHttpRequest
- ( const string& path
- , const string& referrer
- , const string& host
- , const string& user_agent
- );
- virtual const string& Path () { return path_; }
- virtual const string& Referrer () { return referrer_; }
- virtual const string& Host () { return host_; }
- virtual const string& UserAgent () { return user_agent_; }
-private:
- string path_;
- string referrer_;
- string host_;
- string user_agent_;
-};
-
-
-StringHttpRequest::StringHttpRequest
- ( const string& path
- , const string& referrer
- , const string& host
- , const string& user_agent
- )
- : path_ (path)
- , referrer_ (referrer)
- , host_ (host)
- , user_agent_ (user_agent)
-{
-}
-
-void ParseOptions
- ( int argc
- , char* argv[]
- , map<string, string>& options
- , string* file
- )
-{
- for (int i = 1; i < argc; i++) {
- string arg = argv[i];
- int index = arg.find('=', 0);
- if (index == string::npos) {
- *file = arg;
- } else {
- string key = arg.substr(0, index);
- string value = arg.substr(index+1);
- options[key] = value;
- }
- }
-}
-
-
-// Reads a file into a v8 string.
-Handle<String> ReadFile
- ( const string& name
- )
-{
- FILE* file = fopen(name.c_str(), "rb");
- if (file == NULL) return Handle<String>();
-
- fseek(file, 0, SEEK_END);
- int size = ftell(file);
- rewind(file);
-
- char* chars = new char[size + 1];
- chars[size] = '\0';
- for (int i = 0; i < size;) {
- int read = fread(&chars[i], 1, size - i, file);
- i += read;
- }
- fclose(file);
- Handle<String> result = String::New(chars, size);
- delete[] chars;
- return result;
-}
-
-
-const int kSampleSize = 6;
-StringHttpRequest kSampleRequests[kSampleSize] =
- { StringHttpRequest("/process.cc", "localhost", "google.com", "firefox")
- , StringHttpRequest("/", "localhost", "google.net", "firefox")
- , StringHttpRequest("/", "localhost", "google.org", "safari")
- , StringHttpRequest("/", "localhost", "yahoo.com", "ie")
- , StringHttpRequest("/", "localhost", "yahoo.com", "safari")
- , StringHttpRequest("/", "localhost", "yahoo.com", "firefox")
- };
-
-
-bool ProcessEntries
- ( HttpRequestProcessor* processor
- , int count
- , StringHttpRequest* reqs
- )
-{
- for (int i = 0; i < count; i++) {
- if (!processor->Process(&reqs[i]))
- return false;
- }
- return true;
-}
-
-
void PrintMap
( map<string, string>* m
)