Commit 2d67a4f9 authored by jan.koester's avatar jan.koester
Browse files

new version

parent 381bb481
Loading
Loading
Loading
Loading
+22 −9
Original line number Diff line number Diff line
@@ -36,11 +36,12 @@ const uint8_t payload_template[A2S_INFO_PAYLOAD_LEN_WITH_CHALLENGE] = {
    'S', 'o', 'u', 'r', 'c', 'e', ' ', 'E', 'n', 'g', 'i', 'n', 'e', ' ', 'Q', 'u', 'e', 'r', 'y', '\0'
};

HldsView::HldsView(const char *addr,int port) : clientSocket(addr,port,1,0){
HldsView::HldsView(const char *addr,int port){
    try{
        sport = port;
        saddr = addr;
        serverSocket.connect(&clientSocket);
        clientSocket = new netplus::udp(addr,port,1,0);
        serverSocket = new netplus::udp();
        memset(challange,0,sizeof(challange));
    }catch(netplus::NetException &exp){
        throw exp.what();
@@ -48,23 +49,35 @@ HldsView::HldsView(const char *addr,int port) : clientSocket(addr,port,1,0){
}

HldsView::~HldsView(){
    delete clientSocket;
    delete serverSocket;
}

HldsView::HldsView(const HldsView &view) : HldsView(view.saddr.c_str(),view.sport){
HldsView::HldsView(const HldsView &view){
    try{
        sport = view.sport;
        saddr = view.saddr;
        clientSocket = new netplus::udp(saddr.c_str(),sport,1,0);
        serverSocket = new netplus::udp();
        memset(challange,0,sizeof(challange));
    }catch(netplus::NetException &exp){
        throw exp.what();
    }
};

void HldsView::refresh(HldsData &info){
    const std::lock_guard<std::mutex> lock(rlock);
    serverSocket->connect(clientSocket);
    char buffer[1400];
    size_t rcv=0;
    try{
        uint8_t payload[A2S_INFO_PAYLOAD_LEN_WITH_CHALLENGE];
        memcpy(payload, payload_template, A2S_INFO_PAYLOAD_LEN_WITHOUT_CHALLENGE);

        serverSocket.sendData(&clientSocket,(void*)&payload,A2S_INFO_PAYLOAD_LEN_WITHOUT_CHALLENGE);
        serverSocket->sendData(clientSocket,(void*)&payload,A2S_INFO_PAYLOAD_LEN_WITHOUT_CHALLENGE);

        char recv[9];
        rcv=serverSocket.recvData(&clientSocket,&recv,sizeof(recv));
        rcv=serverSocket->recvData(clientSocket,&recv,sizeof(recv));

        if(recv[4] == 0x41){
            memcpy(challange,recv+5,4);
@@ -73,13 +86,13 @@ void HldsView::refresh(HldsData &info){
        AGAIN:
        if(challange[0]!=0){
            memcpy(payload + A2S_INFO_PAYLOAD_CHALLENGE_OFFSET, &challange, sizeof (challange));
            serverSocket.sendData(&clientSocket,(void*)payload,A2S_INFO_PAYLOAD_LEN_WITH_CHALLENGE);
            serverSocket->sendData(clientSocket,(void*)payload,A2S_INFO_PAYLOAD_LEN_WITH_CHALLENGE);
        }else{
            serverSocket.sendData(&clientSocket,(void*)payload,A2S_INFO_PAYLOAD_LEN_WITHOUT_CHALLENGE);
            serverSocket->sendData(clientSocket,(void*)payload,A2S_INFO_PAYLOAD_LEN_WITHOUT_CHALLENGE);
        }


        rcv=serverSocket.recvData(&clientSocket,buffer,1400);
        rcv=serverSocket->recvData(clientSocket,buffer,1400);

        if(rcv >4 && buffer[4] == 0x41){
            memcpy(challange,buffer+5,4);
+2 −2
Original line number Diff line number Diff line
@@ -51,8 +51,8 @@ private:

    uint8_t       challange[4];

    netplus::udp  clientSocket;
    netplus::udp  serverSocket;
    netplus::udp  *clientSocket;
    netplus::udp  *serverSocket;

    std::mutex rlock;