starting some test client code, minor changes
authorJacob Parker <j3parker@uwaterloo.ca>
Fri, 11 Nov 2011 03:17:58 +0000 (22:17 -0500)
committerJacob Parker <j3parker@uwaterloo.ca>
Fri, 11 Nov 2011 03:17:58 +0000 (22:17 -0500)
.gitignore
database/Makefile
database/client.cpp
database/db_if.cpp
database/dump.cpp [new file with mode: 0644]
database/linus_sha1.c
database/nameserver.cpp

index 5f4ed6d..09fd6cc 100644 (file)
@@ -1,4 +1,8 @@
 a.out
 db
 *.swp
-
+*.o
+*.d
+dump
+client
+server
index dd24e1a..0d78513 100644 (file)
@@ -1,6 +1,6 @@
 # POS\r
 \r
-CXX = g++\r
+CXX = @g++\r
 ifndef NDEBUG\r
 CXXFLAGS = -g -O0 -Wall -I/users/m4burns/thrift/include/thrift -I. -Igen-cpp\r
 else\r
@@ -17,12 +17,13 @@ DEPS = $(patsubst %.c,%.d,$(CPPDEPS))
 \r
 SERVER = server\r
 CLIENT = client\r
+DUMP = dump\r
 \r
 ##################################################################\r
 \r
 .PHONY : all clean\r
 \r
-all : $(SERVER) $(CLIENT)\r
+all : $(SERVER) $(CLIENT) $(DUMP)\r
 \r
 %.d : %.cpp\r
        $(CXX) -MM $(CXXFLAGS) $^ > $@\r
@@ -46,6 +47,9 @@ $(SERVER) : $(OBJECTS) gen-cpp/Pos_server.skeleton.o
 $(CLIENT) : $(OBJECTS) client.o\r
        $(CXX) $(CXXFLAGS) $(OBJECTS) client.o -o $@ $(LDFLAGS)\r
 \r
+$(DUMP) : $(OBJECTS) dump.o\r
+       $(CXX) $(CXXFLAGS) $(OBJECTS) dump.o -o $@ $(LDFLAGS)\r
+\r
 #################################################################\r
 \r
 clean :\r
index cdc8d18..f2d1c9b 100644 (file)
@@ -17,23 +17,75 @@ using namespace pos;
 using namespace boost;
 
 int main(int argc, char** argv) {
-  shared_ptr<TTransport> socket(new TSocket("localhost", 9090));
-  shared_ptr<TTransport> transport(new TBufferedTransport(socket));
+  if (argc != 2) {
+    cout << "Usage: client <host>\n";
+    exit(1);
+  }
+  shared_ptr<TTransport> socket(new TSocket(argv[1], 9090));
+  shared_ptr<TTransport> transport(new TFramedTransport(socket));
   shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
   PosClient client(protocol);
 
   try {
     transport->open();
+  } catch(TException & e) {
+    std::cerr << e.what() << "\n";
+  }
+
+  string s;
+  while(1) {
+    uint32_t in;
+    std::cout << "(0) Exit\n(1) Add card to member\n(2) Register new product\n(3) Buy a product\n(4) Deposit money\n(5) Print balance\n> ";
+    std::cin >> in;
+    switch(in) {
+      case 0: exit(0);
+      case 1: {
+        string user, card;
+        cout << "Username: ";
+        cin >> user;
+        cout << "Swipe card: ";
+        getline(cin,s);
+        getline(cin,card);
+        client.getSalt(s);
+        s = SHA1Hash(s+"balls").toHex();
+        client.associateHashWithName(s, card, user);
+        break;
+      }
+      case 4: {
+        string user;
+        int32_t delta;
+        cout << "Username: ";
+        cin >> user;
+        cout << "Amount to change balance by: ";
+        cin >> delta;
+        client.getSalt(s);
+        s = SHA1Hash(s+"balls").toHex();
+        client.doTransactionOnHash(s, user, delta);
+        break;
+      }
+      case 5: {
+        string user;
+        cout << "Username: ";
+        cin >> user;
+        cout << "$" << client.getNameAccountBalance(user) << "\n";
+        break;
+      }
+    }
+  }
 
-    client.ping();
+
+
+  for (uint32_t i =0; i < 5000; i++) {
     std::string s;
     client.getSalt(s);
-    cout << (s = SHA1Hash(s + "balls").toHex()) << "\n";
-    cout << s << " " << client.associateHashWithName(s, "dongs dongs dongs", "m4burns") << "\n";
-  } catch(TException & e) {
-    std::cerr << e.what() << "\n";
+    s = SHA1Hash(s + "balls").toHex();
+    client.doTransactionOnName(s, "j3parker", 1);
   }
 
+
+  cout << "j3parker balance: " << client.getNameAccountBalance("j3parker") << "\n";
+  cout << "m4burns balance: " << client.getNameAccountBalance("m4burns") << "\n";
+
   return 0;
 }
 
index e91a2f5..4790899 100644 (file)
@@ -50,7 +50,7 @@ std::string DbIf::getSalt() {
        fclose(rand_in);
 
        // zero-terminated strings suck
-       for(int i=0;i<salt_size;++i)
+       for(unsigned int i=0;i<salt_size;++i)
                if(bfr[i] == 0)
                        bfr[i] = 1;
        bfr[salt_size-1] = 0;
diff --git a/database/dump.cpp b/database/dump.cpp
new file mode 100644 (file)
index 0000000..592d690
--- /dev/null
@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <protocol/TBinaryProtocol.h>
+#include <transport/TSocket.h>
+#include <transport/TTransportUtils.h>
+#include "Pos.h"
+#include "sha1.h"
+#include <iostream>
+
+using namespace std;
+using namespace apache::thrift;
+using namespace apache::thrift::protocol;
+using namespace apache::thrift::transport;
+
+using namespace pos;
+
+using namespace boost;
+
+int main(int argc, char** argv) {
+  if (argc != 2) {
+    cout << "Usage: dump <host>\n";
+    exit(1);
+  }
+  shared_ptr<TTransport> socket(new TSocket(argv[1], 9090));
+  shared_ptr<TTransport> transport(new TFramedTransport(socket));
+  shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
+  PosClient client(protocol);
+
+  try {
+    transport->open();
+  } catch(TException & e) {
+    std::cerr << e.what() << "\n";
+    exit(1);
+  }
+
+  vector<string> data;
+  client.toString(data);
+  for (uint32_t i = 0; i < data.size(); i++) {
+    cout << data[i] << "\n";
+  }
+  return 0;
+}
+
index 497c192..fce745c 100644 (file)
@@ -38,7 +38,7 @@ void blk_SHA1_Update(blk_SHA_CTX *ctx, const void *data, unsigned long len)
         */
        if (lenW) {
                int left = 64 - lenW;
-               if (len < left)
+               if (len < (unsigned long)left)
                        left = len;
                memcpy(lenW + (char *)ctx->W, data, left);
                lenW = (lenW + left) & 63;
index 434dbb9..6ffa94a 100644 (file)
@@ -12,6 +12,7 @@ std::string NameServer::get_name (uint32_t id) {
     return "???";
   }
   cache[pwd->pw_name] = id;
+  std::cerr << "Did reverse LDAP lookup on " << pwd->pw_name << "\n";
   return pwd->pw_name;
 }