Changeset 197
- Timestamp:
- 07/28/10 16:40:08 (22 months ago)
- Location:
- tinkering/Kraken
- Files:
-
- 2 added
- 4 modified
-
Fragment.cpp (modified) (1 diff)
-
Kraken.cpp (modified) (11 diffs)
-
Kraken.h (modified) (4 diffs)
-
ServerCore.cpp (added)
-
ServerCore.h (added)
-
build.sh (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
tinkering/Kraken/Fragment.cpp
r192 r197 97 97 if (start_round<0) { 98 98 /* Found */ 99 printf("Found %016llx @ %i\n", result, mBitPos); 99 char msg[128]; 100 snprintf(msg,128,"Found %016llx @ %i (table:%i)\n", result, mBitPos, mAdvance); 101 printf("%s",msg); 102 Kraken::getInstance()->reportFind(string(msg)); 100 103 } 101 104 return Kraken::getInstance()->removeFragment(this); -
tinkering/Kraken/Kraken.cpp
r192 r197 5 5 #include <assert.h> 6 6 #include <string.h> 7 #include <stdlib.h> 7 8 #include "../a5_cpu/A5CpuStubs.h" 8 9 #include "../a5_ati/A5AtiStubs.h" … … 10 11 Kraken* Kraken::mInstance = NULL; 11 12 12 Kraken::Kraken(const char* config ) :13 Kraken::Kraken(const char* config, int server_port) : 13 14 mNumDevices(0) 14 15 { … … 80 81 sem_init( &mMutex, 0, 1 ); 81 82 82 83 83 A5CpuInit(8, 12, 4); 84 84 … … 91 91 mUsingAti = false; 92 92 } 93 93 94 mBusy = false; 95 mCurrentClient = 0; 96 mServer = NULL; 97 if (server_port) { 98 mServer = new ServerCore(server_port, serverCmd); 99 } 94 100 } 95 101 … … 115 121 } 116 122 117 void Kraken::Crack( const char* plaintext)123 void Kraken::Crack(int client, const char* plaintext) 118 124 { 119 125 sem_wait(&mMutex); 120 126 mWorkOrders.push(string(plaintext)); 127 mWorkClients.push(client); 121 128 sem_post(&mMutex); 122 129 } … … 148 155 mBusy = true; 149 156 mWorkOrders.pop(); 157 mCurrentClient = mWorkClients.front(); 158 mWorkClients.pop(); 150 159 const char* plaintext = work.c_str(); 160 if (mCurrentClient && mServer) { 161 string txt = string("Cracking ")+work+string("\n"); 162 mServer->Write(mCurrentClient, txt); 163 } 151 164 printf("Cracking %s\n", plaintext ); 152 165 … … 180 193 sem_post(&mMutex); 181 194 if (mBusy) { 195 char msg[128]; 182 196 struct timeval tv; 183 197 gettimeofday(&tv, NULL); 184 198 unsigned long diff = 1000000*(tv.tv_sec-mStartTime.tv_sec); 185 199 diff += tv.tv_usec-mStartTime.tv_usec; 186 printf("crack took %i msec\n",(int)(diff/1000)); 200 snprintf(msg,128,"crack took %i msec\n",(int)(diff/1000)); 201 printf("%s",msg); 202 if (mCurrentClient&&mServer) { 203 mServer->Write(mCurrentClient, string(msg)); 204 } 187 205 mBusy = false; 188 206 } … … 205 223 } 206 224 225 void Kraken::reportFind(string found) 226 { 227 if (mCurrentClient && mServer) { 228 mServer->Write(mCurrentClient, found); 229 } 230 } 231 232 void Kraken::serverCmd(int clientID, string cmd) 233 { 234 const char* command = cmd.c_str(); 235 if (strncmp(command,"crack",5)==0) { 236 const char* ch = command+5; 237 while (*ch && (*ch!='0') && (*ch!='1')) ch++; 238 int len = strlen(ch); 239 if (len>63) { 240 getInstance()->Crack(clientID, ch); 241 } 242 } 243 } 244 207 245 int main(int argc, char* argv[]) 208 246 { 209 247 if (argc<2) { 210 printf("usage: %s index_path \n", argv[0] );248 printf("usage: %s index_path (server port)\n", argv[0] ); 211 249 return -1; 212 250 } 213 251 214 Kraken kr(argv[1]);215 252 char command[256]; 253 int server_port = 0; 254 if (argc>2) server_port=atoi(argv[2]); 255 Kraken kr(argv[1], server_port); 216 256 217 257 printf("Commands are: crack test quit\n"); … … 220 260 if (busy) { 221 261 usleep(500); 222 } else {262 } else if (server_port==0) { 223 263 printf("\nKraken> "); 224 264 char* ch = fgets(command, 256 , stdin); … … 234 274 if (strncmp(command,"test",4)==0) { 235 275 // Test frame 998 236 kr.Crack( "001101110011000000001000001100011000100110110110011011010011110001101010100100101111111010111100000110101001101011");276 kr.Crack(0, "001101110011000000001000001100011000100110110110011011010011110001101010100100101111111010111100000110101001101011"); 237 277 } else if (strncmp(command,"crack",5)==0) { 238 278 ch = command+5; … … 240 280 len = strlen(ch); 241 281 if (len>63) { 242 kr.Crack( ch);282 kr.Crack(0, ch); 243 283 } 244 284 } else if (strncmp(command,"quit",4)==0) { -
tinkering/Kraken/Kraken.h
r192 r197 14 14 #include <string> 15 15 #include <sys/time.h> 16 #include "ServerCore.h" 16 17 17 18 using namespace std; … … 19 20 class Kraken { 20 21 public: 21 Kraken(const char* config );22 Kraken(const char* config, int server_port=0); 22 23 ~Kraken(); 23 24 24 void Crack( const char* plaintext);25 void Crack(int client, const char* plaintext); 25 26 bool Tick(); 26 27 … … 29 30 30 31 bool isUsingAti() {return mUsingAti;} 32 33 void reportFind(string); 34 static void serverCmd(int, string); 31 35 32 36 private: … … 39 43 sem_t mMutex; 40 44 queue<string> mWorkOrders; 45 queue<int> mWorkClients; 46 int mCurrentClient; 41 47 bool mUsingAti; 42 48 bool mBusy; 43 49 struct timeval mStartTime; 50 ServerCore* mServer; 44 51 }; 45 52 -
tinkering/Kraken/build.sh
r193 r197 2 2 cd ../a5_cpu/;./build.sh;cd ../Kraken/;cp ../a5_cpu/A5Cpu.so . 3 3 4 g++ -O2 -o kraken Kraken.cpp NcqDevice.cpp DeltaLookup.cpp Fragment.cpp ../a5_cpu/A5CpuStubs.cpp ../a5_ati/A5AtiStubs.cpp -lpthread -ldl4 g++ -O2 -o kraken Kraken.cpp NcqDevice.cpp DeltaLookup.cpp Fragment.cpp ServerCore.cpp ../a5_cpu/A5CpuStubs.cpp ../a5_ati/A5AtiStubs.cpp -lpthread -ldl
