source: trunk/CrypPlugins/KeySearcher/ExternalClient/Network.cpp @ 2207

Last change on this file since 2207 was 2207, checked in by Sven Rech, 11 years ago

Some work on the external keysearcher client (not tested)

File size: 2.6 KB
Line 
1#include <ctype.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <sstream>
5#include <unistd.h>
6#include <sys/types.h>
7#include <arpa/inet.h>
8#include <sys/sysctl.h>
9
10#include <sys/types.h>
11#include <sys/sysctl.h>
12
13
14
15#include "PlatformIndependentWrapper.h"
16#include "Opcodes.h"
17#include "Job.h"
18#include "Cryptool.h"
19
20Cryptool cryptool;
21
22std::string getIdentificationStr()
23{
24    std::stringstream out;
25    out << "cores:";
26    out << sysconf( _SC_NPROCESSORS_ONLN );
27    // todo: more
28    return out.str();
29}
30
31void GetJobsAndPostResults(PlatformIndependentWrapper wrapper)
32{
33    wrapper.WriteInt(ClientOpcodes::HELLO);
34    wrapper.WriteString(getIdentificationStr());
35
36    // loop will be escaped by wrapper exceptions
37    while(true)
38    {
39        switch(wrapper.ReadInt())
40        {
41            case ServerOpcodes::NEW_JOB:
42                {
43                    Job j;
44                    j.Guid = wrapper.ReadString();
45                    j.Src = wrapper.ReadString();
46                    j.KeySize = wrapper.ReadInt();
47                    j.Key = new char[j.KeySize];
48                    wrapper.ReadArray(j.Key, j.KeySize);
49                    j.LargerThen = (wrapper.ReadInt() ? true : false);
50                    j.Size = wrapper.ReadInt();
51                    j.ResultSize = wrapper.ReadInt();
52                    printf("Got new job! guid=%s\n", j.Guid.c_str());
53
54                    JobResult res = cryptool.doOpenCLJob(j);
55
56                    //send results back:
57                    wrapper.WriteInt(ClientOpcodes::JOB_RESULT);
58                    wrapper.WriteString(j.Guid);
59                    wrapper.WriteInt(res.ResultList.size());
60                    for (std::list<std::pair<float, int> >::iterator it = res.ResultList.begin(); it != res.ResultList.end(); it++)
61                    {
62                        wrapper.WriteInt(it->first);
63                        wrapper.WriteFloat(it->second);
64                    }
65                }
66                break;
67        }
68    }
69}
70
71void networkThread(sockaddr_in serv_addr, int port)
72{
73    printf("Connecting to %s on port %i\n", inet_ntoa(serv_addr.sin_addr), port);
74    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
75
76    if (sockfd < 0) 
77    {
78        printf("ERROR opening socket\n");
79        return;
80    }
81    printf("Connecting established\n");
82    if (connect(sockfd, (sockaddr*)&serv_addr, sizeof(serv_addr)) < 0)
83    {
84        printf("Couldn't connect\n");
85        close(sockfd);
86        return;
87    }
88
89    try{
90        PlatformIndependentWrapper w(sockfd);
91        GetJobsAndPostResults(w);
92    } catch(SocketException)
93    {
94        close(sockfd);
95        return;
96    }
97}
98
Note: See TracBrowser for help on using the repository browser.