The code from open discussion

Drop a note here when you delete a post and so on so we can keep track of troublemakers...

Moderator: Moderators

Xan1977
Forum Moderator
Posts: 627
Joined: 2003-06-06 01:15

The code from open discussion

Post by Xan1977 » 2006-01-02 20:08

Code: Select all

#include <windows.h>
#include <winerror.h>
#include <winsock.h>
#pragma comment(lib, "wsock32.lib")

#include <iostream>
#include <strstream>
using namespace std;

#define MAX_BUFFER   8192

char buf[MAX_BUFFER];

void DoRecv(SOCKET s)
{
   int rVal = recv(s, buf, MAX_BUFFER - 1, 0);
   if(rVal == SOCKET_ERROR)
   {
      switch(WSAGetLastError())
      {
      case WSAENOTCONN:
      case WSAECONNRESET:
         cerr << "socket not connected" << endl;
         break;
      case WSAESHUTDOWN:
            cerr << "socket has been shut down" << endl;
         break;
      default:
         cerr << "unknown error\n" << endl;
      };
      exit(1);
   }   
   buf[rVal] = 0;
}


void DoSend(SOCKET s)
{
   int rVal = send(s, buf, strlen(buf), 0);
   if(rVal == SOCKET_ERROR)
   {
      cerr << "Failed send()\n";
      exit(1);
   }   
}


const char *keySubst(const unsigned char* aKey, size_t len) {

   static basic_string<unsigned char> temp;

   if(temp.length() == 0) {
      for(size_t i = 0; i<len; i++) {
         if(aKey[i] == 0 || aKey[i]==5 || aKey[i]==124 || aKey[i]==96 || aKey[i]==126 || aKey[i]==36) {
            temp += (unsigned char *)"/%DCN";
            switch(aKey[i]) {
            case 0: temp += (unsigned char *)"000"; break;
            case 5: temp += (unsigned char *)"005"; break;
            case 36: temp += (unsigned char *)"023"; break;
            case 96: temp += (unsigned char *)"096"; break;
            case 124: temp += (unsigned char *)"124"; break;
            case 126: temp += (unsigned char *)"126"; break;
            }
            temp += (unsigned char *)"%/";
         } else {
            temp.push_back(aKey[i]);
         }
      }
   }

   return (const char *)temp.c_str();
//   return new string((char*)temp.c_str(), temp.length());
}


const char* makeKey(const string& aLock) {
   static const char nolock[] = "";

   if(aLock.size() < 3)
      return nolock;

   basic_string<unsigned char> temp;
   unsigned char v1;
   
   v1 = (unsigned char)(aLock[0]^5);
   v1 = (unsigned char)(((v1 >> 4) | (v1 << 4)) & 0xff);
   temp.push_back(v1);
   
   for(string::size_type i = 1; i<aLock.length(); i++) {
      v1 = (unsigned char)(aLock[i]^aLock[i-1]);
      v1 = (unsigned char)(((v1 >> 4) | (v1 << 4))&0xff);
      temp.push_back(v1);
   }
   
   temp[0] = (unsigned char)(temp[0] ^ temp[aLock.length()-1]);
   
   return keySubst(temp.c_str(), aLock.length());
}


int main()
{
    WORD version = MAKEWORD(1,1);
    WSADATA wsaData;
    int rVal=0;

   if(WSAStartup(version,(LPWSADATA)&wsaData) == SOCKET_ERROR) {
      cerr << "Error initializing WINSOCK." << endl;
   }

   //store information about the server
    LPHOSTENT hostEntry = gethostbyname("underhill.dyndns.dk");

    if(!hostEntry)
    {
        cerr << "Failed gethostbyname()" << endl;
        WSACleanup();
        return -1;
    }

    //create the socket
    SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

    if(s == SOCKET_ERROR)
    {
      cerr << "Failed socket()" << endl;
      WSACleanup();
        return -1;
    }

    //Fill in the sockaddr_in struct
    SOCKADDR_IN serverInfo;

   serverInfo.sin_family = PF_INET;
    serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);
    serverInfo.sin_port = htons(411);

    rVal = connect(s,(LPSOCKADDR)&serverInfo, sizeof(serverInfo));
    if(rVal == SOCKET_ERROR)
    {
        cerr << "Failed connect()" << endl;
      WSACleanup();
        return -1;
    }

   cout << "Connected." << endl;

   for(;;) {
      DoRecv(s);

      char _cmd[2048];
      istrstream is(buf);
      while(is.getline(_cmd, 2047, '|')) {
         string cmd(_cmd);

         if(cmd.compare(0, 5, "$Lock") == 0) {
            string::size_type pos = cmd.find(" Pk=");
            if(pos != string::npos) {
               sprintf(buf, "$Key %s|$ValidateNick FUCKUP|", makeKey(cmd.substr(6, pos - 6)));
               DoSend(s);
            }
            continue;
         }

         if(cmd.compare(0, 9, "$HubName ") == 0) {
            continue;
         }


         if(cmd.compare(0, 8, "$GetPass") == 0) {
            sprintf(buf, "$MyPass howard|");
            DoSend(s);
            continue;
         }

         if(cmd.compare(0, 8, "$BadPass") == 0) {
            cerr << "Incorrect password!" << endl;
            closesocket(s);
            WSACleanup();
            exit(1);
         }

         if(cmd.compare(0, 7, "$Hello ") == 0) {
            sprintf(buf, "$MyINFO $ALL FUCKUP HUBBOT$ $DSL$$0$|");
            DoSend(s);
            continue;
         }

         if(cmd.compare(0, 9, "$LogedIn ") == 0) {
            continue;
         }

         if(cmd.compare(0, 13, "$UserCommand ") == 0) {
            continue;
         }

         cout << "CMD[" << cmd.c_str() << ']' << endl;
      }
   }

   closesocket(s);
  WSACleanup();
   return 0;
}

GargoyleMT
DC++ Contributor
Posts: 3212
Joined: 2003-01-08 02:46
Location: .pa.us

Post by GargoyleMT » 2006-01-03 16:31

What thread did that belong to?

Todi
Forum Moderator
Posts: 699
Joined: 2003-03-04 17:16

Post by Todi » 2006-01-03 16:47


GargoyleMT
DC++ Contributor
Posts: 3212
Joined: 2003-01-08 02:46
Location: .pa.us

Post by GargoyleMT » 2006-01-03 17:06

Weird. The forum wasn't marked as new, but the thread was when I visited.

Thanks, Todi.



All in all, pretty a odd "discussion."

Who is online

Users browsing this forum: Google [Bot] and 0 guests