Changeset 197

Show
Ignore:
Timestamp:
07/28/10 16:40:08 (22 months ago)
Author:
frank
Message:

Add a TCP/IP servercore to Kraken.

Location:
tinkering/Kraken
Files:
2 added
4 modified

Legend:

Unmodified
Added
Removed
  • tinkering/Kraken/Fragment.cpp

    r192 r197  
    9797        if (start_round<0) { 
    9898            /* 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)); 
    100103        } 
    101104        return Kraken::getInstance()->removeFragment(this); 
  • tinkering/Kraken/Kraken.cpp

    r192 r197  
    55#include <assert.h> 
    66#include <string.h> 
     7#include <stdlib.h> 
    78#include "../a5_cpu/A5CpuStubs.h" 
    89#include "../a5_ati/A5AtiStubs.h" 
     
    1011Kraken* Kraken::mInstance = NULL; 
    1112 
    12 Kraken::Kraken(const char* config) : 
     13Kraken::Kraken(const char* config, int server_port) : 
    1314    mNumDevices(0) 
    1415{ 
     
    8081    sem_init( &mMutex, 0, 1 ); 
    8182 
    82      
    8383    A5CpuInit(8, 12, 4); 
    8484     
     
    9191        mUsingAti = false; 
    9292    } 
     93 
    9394    mBusy = false; 
     95    mCurrentClient = 0; 
     96    mServer = NULL; 
     97    if (server_port) { 
     98        mServer = new ServerCore(server_port, serverCmd); 
     99    } 
    94100} 
    95101 
     
    115121} 
    116122 
    117 void Kraken::Crack(const char* plaintext) 
     123void Kraken::Crack(int client, const char* plaintext) 
    118124{ 
    119125    sem_wait(&mMutex); 
    120126    mWorkOrders.push(string(plaintext)); 
     127    mWorkClients.push(client); 
    121128    sem_post(&mMutex); 
    122129} 
     
    148155            mBusy = true; 
    149156            mWorkOrders.pop(); 
     157            mCurrentClient = mWorkClients.front(); 
     158            mWorkClients.pop(); 
    150159            const char* plaintext = work.c_str(); 
     160            if (mCurrentClient && mServer) { 
     161                string txt = string("Cracking ")+work+string("\n"); 
     162                mServer->Write(mCurrentClient, txt); 
     163            } 
    151164            printf("Cracking %s\n", plaintext ); 
    152165 
     
    180193            sem_post(&mMutex); 
    181194            if (mBusy) { 
     195                char msg[128]; 
    182196                struct timeval tv; 
    183197                gettimeofday(&tv, NULL); 
    184198                unsigned long diff = 1000000*(tv.tv_sec-mStartTime.tv_sec); 
    185199                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                } 
    187205                mBusy = false; 
    188206            } 
     
    205223} 
    206224 
     225void Kraken::reportFind(string found) 
     226{ 
     227    if (mCurrentClient && mServer) { 
     228        mServer->Write(mCurrentClient, found); 
     229    } 
     230} 
     231 
     232void 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 
    207245int main(int argc, char* argv[]) 
    208246{ 
    209247    if (argc<2) { 
    210         printf("usage: %s index_path\n", argv[0] ); 
     248        printf("usage: %s index_path (server port)\n", argv[0] ); 
    211249        return -1; 
    212250    } 
    213251 
    214     Kraken kr(argv[1]); 
    215252    char command[256]; 
     253    int server_port = 0; 
     254    if (argc>2) server_port=atoi(argv[2]); 
     255    Kraken kr(argv[1], server_port); 
    216256 
    217257    printf("Commands are: crack test quit\n"); 
     
    220260        if (busy) { 
    221261            usleep(500); 
    222         } else { 
     262        } else if (server_port==0) { 
    223263            printf("\nKraken> "); 
    224264            char* ch = fgets(command, 256 , stdin); 
     
    234274            if (strncmp(command,"test",4)==0) { 
    235275                // Test frame 998 
    236                 kr.Crack("001101110011000000001000001100011000100110110110011011010011110001101010100100101111111010111100000110101001101011");  
     276                kr.Crack(0, "001101110011000000001000001100011000100110110110011011010011110001101010100100101111111010111100000110101001101011");  
    237277            } else if (strncmp(command,"crack",5)==0) { 
    238278                ch = command+5; 
     
    240280                len = strlen(ch); 
    241281                if (len>63) { 
    242                     kr.Crack(ch); 
     282                    kr.Crack(0, ch); 
    243283                } 
    244284            } else if (strncmp(command,"quit",4)==0) { 
  • tinkering/Kraken/Kraken.h

    r192 r197  
    1414#include <string> 
    1515#include <sys/time.h> 
     16#include "ServerCore.h" 
    1617 
    1718using namespace std; 
     
    1920class Kraken { 
    2021public: 
    21     Kraken(const char* config); 
     22    Kraken(const char* config, int server_port=0); 
    2223    ~Kraken(); 
    2324 
    24     void Crack(const char* plaintext); 
     25    void Crack(int client, const char* plaintext); 
    2526    bool Tick(); 
    2627 
     
    2930 
    3031    bool isUsingAti() {return mUsingAti;} 
     32 
     33    void reportFind(string); 
     34    static void serverCmd(int, string); 
    3135 
    3236private: 
     
    3943    sem_t mMutex; 
    4044    queue<string> mWorkOrders; 
     45    queue<int> mWorkClients; 
     46    int mCurrentClient; 
    4147    bool mUsingAti; 
    4248    bool mBusy; 
    4349    struct timeval mStartTime; 
     50    ServerCore* mServer; 
    4451}; 
    4552 
  • tinkering/Kraken/build.sh

    r193 r197  
    22cd ../a5_cpu/;./build.sh;cd ../Kraken/;cp ../a5_cpu/A5Cpu.so . 
    33 
    4 g++ -O2 -o kraken Kraken.cpp NcqDevice.cpp DeltaLookup.cpp Fragment.cpp ../a5_cpu/A5CpuStubs.cpp ../a5_ati/A5AtiStubs.cpp -lpthread -ldl 
     4g++ -O2 -o kraken Kraken.cpp NcqDevice.cpp DeltaLookup.cpp Fragment.cpp ServerCore.cpp ../a5_cpu/A5CpuStubs.cpp ../a5_ati/A5AtiStubs.cpp -lpthread -ldl