All pastes #1968168 Raw Edit

trzeci

public cpp v1 · immutable
#1968168 ·published 2010-10-20 16:12 UTC
rendered paste body
/*   onettunel.c        v. 2010-4   (2008 - 2010) Zakodowane przez Olo   unix.onlinewebshop.net / Gaahl586@wp.pl      program do laczenia sie klientem IRC do czat.onet.pl   -----------   kompilacja ( -std=c89 ):    - Win32:     gcc onettunel.c -o tunel -lws2_32           lub: gcc onettunel.c -o tunel -L"/mingw/lib/" /mingw/lib/libws2_32.a   - *BSD, POSIX, Linux: gcc onettunel.c -o tunel -lpthread   -----------   uzycie:    ./tunel wybrany_port ,jesli nie wybierzesz portu zostanie zabindowany 8899   w irssi:     /set nick twoj_nick    /server 127.0.0.1 8899 twoje_haslo_do_nicka*/#define WERSJA "2010-4_test.1"/************** CONFIG *******************//*    zamiast 1 daj 0 aby wylaczyc opcje */#define CONFIG_817_HISTORY	1     /* historia rozmowy */#define CONFIG_819_820_SLIST	1     /* lista kanalow */#define CONFIG_CS_HOMES		1     /* lista twoich kanalow */#define CONFIG_MODERMSG		1     /* obsluga MODERMSG jako PRIVMSG */#define CONFIG_BOLD		1     /* obsluga pogrubienia czcionki */#define CONFIG_COLOR		1     /* obsluga kolorow,             */#define CONFIG_CP1250    1  /* obsluga MS CP-1250 */				      /* ustawiajac na 0 usuniesz ja  */				      /* statycznie z kodu           *//****************************************/#include <stdio.h>#include <ctype.h>#include <string.h>#include <time.h>#if __WIN32__#include <winsock.h>#define WYKREUJ_THREAD \        CreateThread(NULL, 0, (PVOID)jedziemy, (PVOID)klientfd, 0, &it);#else#include <stdlib.h>#include <arpa/inet.h>#include <unistd.h>#include <netdb.h>#include <sys/socket.h>#include <sys/select.h>#include <netinet/in.h>#include <pthread.h>#define closesocket close#define WYKREUJ_THREAD \        pthread_create(&it, NULL, (void*)jedziemy, (void *)klientfd);#endif#define AUT "by Olo , unix.onlinewebshop.net"typedef struct{        char *a;        int b;        } mem;char irc_kolor_tab[2][14][4]=      {{{0x03,'1','4',0},        {0x03,'5',0},        {0x03,'7',0},        {0x03,'5',0},        {0x03,'1','3',0},        {0x03,'4',0},        {0x03,'1','2',0},        {0x03,'3',0},        {0x03,'1','0',0},        {0x03,'1','1',0},        {0x03,'6',0},        {0x03,'2',0},        {0x03,'7',0},        {0x03,'4',0}},       {{0x03,'1','4',0},        {0x03,'0','5',0},        {0x03,'0','7',0},        {0x03,'0','5',0},        {0x03,'1','3',0},        {0x03,'0','4',0},        {0x03,'1','2',0},        {0x03,'0','3',0},        {0x03,'1','0',0},        {0x03,'1','1',0},        {0x03,'0','6',0},        {0x03,'0','2',0},        {0x03,'0','7',0},        {0x03,'0','4',0}}};char *onet_kolor_tab[14] =            {"%C959595%",            "%C990033%",            "%Cc86c00%",            "%C623c00%",            "%Cce00ff%",            "%Ce40f0f%",            "%C3030ce%",            "%C008100%",            "%C1a866e%",            "%C006699%",            "%C8800ab%",            "%C0f2ab1%",            "%Cff6500%",            "%Cff0000%"};char *fbold_tab[12] =           {"%Fb%",           "%Fbi%",           "%Fb:arial%",           "%Fb:courier%",           "%Fb:tahoma%",           "%Fb:times%",           "%Fbi:arial%",           "%Fbi:courier%",           "%Fbi:tahoma%",           "%Fbi:times%",           /* T2: */           "%Fb:verdana%",           "%Fbi:verdana%"};char *ffont_tab[11] =           {"%Fi%",           "%F:arial%",           "%F:courier%",           "%F:tahoma%",           "%F:times%",           "%Fi:arial%",           "%Fi:courier%",           "%Fi:tahoma%",           "%Fi:times%",           /* znacznik dla verdany dodawany tylko przez klienta Taboret2 */           "%F:verdana%",           "%Fi:verdana%"};short int mstat[4]= {#if CONFIG_CP1250 && __WIN32__    1, /* CP-1250 */#else    0,#endif    CONFIG_BOLD, /* BOLD */    CONFIG_COLOR,  /* kolory */    CONFIG_817_HISTORY /* historia rozmowy */     };char *mstat_tab =            "tunel - USTAWIENIA TUNELA DLA TWOJEGO POLACZENIA:\r\n"            "tunel - KOLORY: %d\r\n"            "tunel - BOLD:   %d\r\n"            "tunel - CP1250: %d\r\n"            "tunel - HIST:   %d\r\n"            ;            /* auth() zmontuj authkey`a do autoryzacji */void auth(char *stringbuffer){ int f1[] = { 29, 43,  7,  5, 52, 58, 30, 59, 26, 35,              35, 49, 45,  4, 22,  4,  0,  7,  4, 30,              51, 39, 16,  6, 32, 13, 40, 44, 14, 58,              27, 41, 52, 33,  9, 30, 30, 52, 16, 45,              43, 18, 27, 52, 40, 52, 10,  8, 10, 14,              10, 38, 27, 54, 48, 58, 17, 34,  6, 29,              53, 39, 31, 35, 60, 44, 26, 34, 33, 31,              10, 36, 51, 44, 39, 53,  5, 56   }; int f2[] = {  7, 32, 25, 39, 22, 26, 32, 27, 17, 50,              22, 19, 36, 22, 40, 11, 41, 10, 10,  2,              10,  8, 44, 40, 51,  7,  8, 39, 34, 52,              52,  4, 56, 61, 59, 26, 22, 15, 17,  9,              47, 38, 45, 10,  0, 12,  9, 20, 51, 59,              32, 58, 19, 28, 11, 40,  8, 28,  6,  0,              13, 47, 34, 60,  4, 56, 21, 60, 59, 16,              38, 52, 61, 44,  8, 35,  4, 11   }; int f3[] = { 60, 30, 12, 34, 33,  7, 15, 29, 16, 20,              46, 25,  8, 31,  4, 48,  6, 44, 57, 16,              12, 58, 48, 59, 21, 32,  2, 18, 51,  8,              50, 29, 58,  6, 24, 34, 11, 23, 57, 43,              59, 50, 10, 56, 27, 32, 12, 59, 16,  4,              40, 39, 26, 10, 49, 56, 51, 60, 21, 37,              12, 56, 39, 15, 53, 11, 33, 43, 52, 37,              30, 25, 19, 55,  7, 34, 48, 36   }; int p1[] = { 11,  9, 12,  0,  1,  4, 10, 13,  3,  6,               7,  8, 15,  5,  2, 14   }; int p2[] = {  1, 13,  5,  8,  7, 10,  0, 15, 12,  3,              14, 11,  2,  9,  6,  4   }; int i = 0; int ai[16], ai1[16]; if(strlen(stringbuffer) < 16) return; do {  char c = stringbuffer[i];  ai[i] = (c > '9' ? c > 'Z' ? (c - 97) + 36 : (c - 65) + 10 : c - 48); } while(++i < 16); for(i = 0; i < 16; i++) ai[i] = f1[ai[i] + i]; memcpy(ai1, ai, sizeof(ai1)); for(i = 0; i < 16; i++) ai[i] = (ai[i] + ai1[p1[i]]) % 62; for(i = 0; i < 16; i++) ai[i] = f2[ai[i] + i]; memcpy(ai1, ai, sizeof(ai1)); for(i = 0; i < 16; i++) ai[i] = (ai[i] + ai1[p2[i]]) % 62; for(i = 0; i < 16; i++) ai[i] = f3[ai[i] + i]; i = 0; do {  int j = ai[i];  ai[i] = j >= 10 ? j >= 36 ? (97 + j) - 36 : (65 + j) - 10 : 48 + j; } while(++i < 16); for(i = 0; i < 16; i++) stringbuffer[i] = (char)ai[i]; stringbuffer[16] = '\0';}int dawaj_pamiec(mem *a2, unsigned b2){ char *test; if(a2->b > 0){  test = (char *)realloc(a2->a,a2->b + b2);  if(test == NULL){   fprintf(stderr, "dawaj_pamiec(%d): system nie przydzielil pamieci!\n",a2->b + b2);   return 1;  }  a2->a = test;  a2->b += b2;  return 0; } a2->a=(char*)malloc(b2); if(a2->a == NULL){  fprintf(stderr, "dawaj_pamiec(%d): system nie przydzielil pamieci!\n",b2);  return 1; } a2->b=b2; return 0;}void zwolnij_pamiec(mem *a2){ free(a2->a); a2->b = 0;}int ot_send(int a, char *b){    return send(a,b,strlen(b),0);}int http_1(char *host, char *z, mem *cookies, char *uo, int suo, int klient){   int s, i;   mem buf;   buf.b=0;   char tmp_buf[1024], *u, *u2;   struct sockaddr_in www;   struct hostent *hostname;   hostname = gethostbyname(host);   if(hostname == NULL){     sprintf(tmp_buf,"tunel - http_1(): Nie mozna pobrac adresu hosta: %s\r\n", host);     ot_send(klient, tmp_buf);     return 1;   }   s = socket(AF_INET, SOCK_STREAM, 0);   www.sin_family = AF_INET;   www.sin_port = htons(80);   www.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)hostname->h_addr)));   memset(&(www.sin_zero), '\0', 8);   if(connect(s, (struct sockaddr *)&www, sizeof(struct sockaddr)) == -1){     sprintf(tmp_buf, "tunel - http_1(): Problem z polaczniem do %s\n", host);     ot_send(klient, tmp_buf);     closesocket(s);     return 1;   }   ot_send(s,z);   if(dawaj_pamiec(&buf,1024)==1){                                  closesocket(s);                                  return 2;   }   buf.a[0]='\0';   while((i=recv(s,tmp_buf,1000,0)) > 0){     tmp_buf[i]='\0';     strcat(buf.a, tmp_buf);     if(dawaj_pamiec(&buf,1008) == 1) break;   }   closesocket(s);   u=strstr(buf.a,"Set-Cookie:");   if(!u) goto dalej;   while( (u=strstr(u,"Set-Cookie:"))!=NULL ){    u+=12;    u2=strchr(u,';');    if(u2){           i=strlen(u)-strlen(u2)+1;           if(dawaj_pamiec(cookies,i+4)==1) break;           strncat(cookies->a,u,i);           strcat(cookies->a," ");    }   }   dalej:   if(suo == 1){     u = strstr(buf.a, "uoKey");     if(u){      memcpy(uo, u + 6, 32);      uo[32] = '\0';     }     else{      ot_send(klient,buf.a);      ot_send(klient, "tunel - PROBLEM: nie znaleziono uoKey`a !!!\r\n");      zwolnij_pamiec(&buf);      return 3;     }   }   zwolnij_pamiec(&buf);   return 0;}int http_2(char *host, char *loc, mem *cookies, char *uo, int suo, char *POST, int klient){   char *zp,*zp2,*z;   int ret;   mem zap;   zap.b=0;   zp =         "%s %s HTTP/1.1\r\n"                "Host: %s\r\n"                "User-Agent: Mozilla/5.0 Linux\r\n"                "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n"                "Content-Type: application/x-www-form-urlencoded\r\n";   zp2 =        "Cache-Control: no-cache\r\n"                "Pragma: no-cache\r\n"                "Connection: close\r\n";   if(dawaj_pamiec(&zap,     strlen(zp)+strlen(zp2)+strlen(host)+strlen(POST)+strlen(cookies->a)+500)==1){          return 2;   }   sprintf(zap.a, zp, (*POST=='\0')?"GET":"POST", loc, host);   if(*POST!='\0') sprintf(zap.a, "%sContent-Length: %d\r\n", zap.a,strlen(POST));   strcat(zap.a,zp2);   strcat(zap.a,cookies->a);   strcat(zap.a,"\r\n\r\n");   if(*POST!='\0') strcat(zap.a,POST);   z=zap.a;   ret=http_1(host, z, cookies, uo, suo, klient);   zwolnij_pamiec(&zap);   return ret;}/* onethttpauth() autoryzacja http dla czat.onet.pl , zassanie UOkey`a */int onethttpauth(char *nick, char *pass, char *UO, int klient){    mem cookies;    int i;    char POST[516];    cookies.b=0;    if(dawaj_pamiec(&cookies, 20) == 1) return 2;    i = 1;    strcpy(cookies.a, "Cookie: ");    http_2("kropka.onet.pl","/_s/kropka/1?DV=czat",&cookies,UO,0,"",klient);    http_2("czat.onet.pl","/myimg.gif",&cookies,UO,0,"",klient);    if(*nick!='~'){     sprintf(POST, "r=&url=&login=%s&haslo=%s&app_id=20&ssl=1&ok=1", nick, pass);     http_2("secure.onet.pl","/mlogin.html",&cookies,UO,0,POST,klient);     i = 0;    }    sprintf(POST,"api_function=getUoKey&params=a:3:{s:4:\"nick\";s:%d:\"%s\";"                 "s:8:\"tempNick\";i:%d;"                 "s:7:\"version\";s:22:\"1.0(20090306-1441 - R)\";}",                 strlen(nick) - i, nick + i, i);    i=http_2("czat.onet.pl","/include/ajaxapi.xml.php3",&cookies,UO,1,POST,klient);    zwolnij_pamiec(&cookies);    return i;}/* replace() zamiana w tablicy znakow a, ciagu znakow b na ciag znakow c */void replace(mem *a, char *b, char *c){ char *u,*d; int i; if(*b=='\0') return; u=a->a; for(i=0;(u = strstr(u, b))!=NULL;i++) u++; if(i==0) return; i=strlen(a->a) - i*strlen(b) + i*strlen(c) + 1000; d = (char*)malloc(i); if(d == NULL) return; if(i>a->b) if(dawaj_pamiec(a,i)==1){                             free(d);                             return;                             } u=a->a; while((u = strstr(u, b))!=NULL){  i=strlen(a->a) - strlen(u);  memcpy(d, a->a, i);  d[i] = '\0';  strcat(d, c);  strcat(d, u + strlen(b));  strcpy(a->a, d);  u+=strlen(c); } free(d);}/* czas() - przerob "1254576332" na "15:25:32" */char *czas(char *czczas){ time_t zczas; char *a; zczas = atoi(czczas); a = ctime(&zczas); if(a == NULL) return czczas; a += 11; *(a + 8) = '\0'; strcpy(czczas, a); return czczas;}/* obsluga przesylanych informacji,   dla WIN32 translacja polskich znakow z CP1250 na ISO8859-2 i odwrotnie   zamiana kolorow appletu czat.onet na kolory w IRC i odwrotnie */int wyslij(int from, int to, int onet, short int *lmstat){ char linia[1028], list_linia[1028], a1[1028], a2[1028], a3[52], a4[104], a5[24], a6[104]; char *u, *u2, *bufor, *tmpbufor, *bold; int i, i2; mem bufor_t,tmpbufor_t; bufor_t.b=0; tmpbufor_t.b=0; if(dawaj_pamiec(&tmpbufor_t,1028) == 1) return 1; if(dawaj_pamiec(&bufor_t,1028) == 1){ zwolnij_pamiec(&tmpbufor_t); return 1; } bufor_t.a[0] = '\0'; while((i=recv(from,tmpbufor_t.a,1024,0)) > 0){         tmpbufor_t.a[i]='\0';         strcat(bufor_t.a, tmpbufor_t.a);         if(tmpbufor_t.a[i-1]=='\n') break;         if(dawaj_pamiec(&bufor_t,1028) == 1) break; } if(bufor_t.a[0] == '\0'){              zwolnij_pamiec(&bufor_t);              zwolnij_pamiec(&tmpbufor_t);              return 1; } bufor=bufor_t.a; if(from == onet){  i=dawaj_pamiec(&tmpbufor_t,bufor_t.b);  tmpbufor=tmpbufor_t.a;#if CONFIG_CP1250  if(lmstat[0] == 1){   u = bufor;   while((u = strchr(u, '\xa1'))!=NULL) *u = '\xa5'; u = bufor;   while((u = strchr(u, '\xb1'))!=NULL) *u = '\xb9'; u = bufor;   while((u = strchr(u, '\xa6'))!=NULL) *u = '\x8c'; u = bufor;   while((u = strchr(u, '\xb6'))!=NULL) *u = '\x9c'; u = bufor;   while((u = strchr(u, '\xac'))!=NULL) *u = '\x8f'; u = bufor;   while((u = strchr(u, '\xbc'))!=NULL) *u = '\x9f';  }#endif#if CONFIG_COLOR  if(lmstat[2] == 1){   if(strstr(bufor,"%C"))    for(i2=0;i2<14;i2++) { replace(&bufor_t, onet_kolor_tab[i2], irc_kolor_tab[1][i2]);                           bufor=bufor_t.a; }  }  else{#endif   if(strstr(bufor,"%C"))    for(i2=0;i2<14;i2++) { replace(&bufor_t, onet_kolor_tab[i2], "");                           bufor=bufor_t.a; }#if CONFIG_COLOR   }#endif   /* tutaj obsluga pogrubienia czcionki ;S */   if(strstr(bufor,"%Fb")){#if CONFIG_BOLD    if(lmstat[1] == 1) bold="\x02";    else bold="";#else    bold="";#endif    for(i2=0;i2<12;i2++) { replace(&bufor_t, fbold_tab[i2], bold);                           bufor=bufor_t.a; }   }   if(strstr(bufor,"%F")){    /* wywal kursywe i czcionki z appletu */    for(i2=0;i2<11;i2++) { replace(&bufor_t, ffont_tab[i2], "");                           bufor=bufor_t.a; }   }   if(i == 1) goto odratuj;      while(1){      /* potnij bufor na linie zakonczone '\n'      a2 = 817: historia rozmowy      a2 = 819: lista kanalow: /SLIST      a2 = 820: koniec listy kanalow      zrob tabelke dla: /quote cs homes */    u = strchr(bufor, '\n');    if(!u) break;    u++;    if((strlen(bufor) - strlen(u)) > 1026) break;    strcpy(tmpbufor, u);    memcpy(linia, bufor, strlen(bufor) - strlen(u));    linia[strlen(bufor) - strlen(u)] = '\0';    strcpy(bufor, tmpbufor);    if(sscanf(linia, "%1000s %1000s", a1, a2) == 2){#if CONFIG_817_HISTORY     if(lmstat[3]==1&&(!strcmp(a2, "817"))        &&sscanf(linia, "%1000s %1000s %50s %100s %20s %100s", a1, a2, a3, a4, a5, a6) == 6        &&(u = strchr(linia + 2, ':'))){      strcpy(a1, u);      sprintf(linia, ":_-_!name@host.org PRIVMSG %s :%s <%s> %s", a4, czas(a5), a6, a1 + 1);     }#endif#if CONFIG_819_820_SLIST     if((!strcmp(a2, "819"))        && sscanf(linia, "%1000s %1000s %50s", a1, a2, a3) == 3){      u = strchr(linia + 2, ':');      u++;      while(1){       for(i=0;i<strlen(u);i++){        if(u[i] == ',' || u[i] == '\r' || u[i] == '\n') break;        a6[i] = u[i];       } a6[i] = '\0';       u2 = strchr(a6, ':');       if(!u2) break;       memcpy(a4, a6, strlen(a6) - strlen(u2));       a4[strlen(a6) - strlen(u2)] = '\0';       u2 = strrchr(u2, ':') + 1;       if(!u2) break;       strcpy(a5, u2);       sprintf(list_linia, "%s 322 %s %s %s :\r\n", a1, a3, a4, a5);       ot_send(to, list_linia);       if(u[i] == '\r' || u[i] == '\n') break;       u = u + i + 1;      }     }          if((!strcmp(a2, "820"))        && sscanf(linia, "%1000s %1000s %50s", a1, a2, a3) == 3){      sprintf(linia, "%s 323 %s :End of LIST\r\n", a1, a3);      }#endif#if CONFIG_CS_HOMES     if((!strcmp(a2, "NOTICE"))        && sscanf(linia, "%1000s %1000s %50s %100s", a1, a2, a3, a4) == 4        && (!strcmp(a4, ":151"))){      u = strrchr(linia, ':');      if(!u) break;      u++;      ot_send(to, "tunel : Status:               Nazwa kanalu:\n");      while(1){       for(i = 0; i < strlen(u) && i < 104;i++){        if(u[i] == ' ' || u[i] == '\r' || u[i] == '\n') break;        a6[i] = u[i];       } a6[i] = '\0';       if(a6[0] == 'o')      sprintf(tmpbufor, "tunel : [@ +o ] operator   |  %s\n", a6 + 1);       else if(a6[0] == 'q') sprintf(tmpbufor, "tunel : [` +qo] owner      |  %s\n", a6 + 1);       else if(a6[0] == 'h') sprintf(tmpbufor, "tunel : [%% +h ] halfop     |  %s\n", a6 + 1);       else sprintf(tmpbufor, "tunel : [  +%c ] ????????   |  %s\n", a6[0], a6 + 1);       ot_send(to, tmpbufor);       if(u[i] == '\r' || u[i] == '\n') break;       u = u + i + 1;      }     }#endif#if CONFIG_MODERMSG     if(((!strcmp(a2, "MODERMSG"))        &&sscanf(linia, "%1000s %1000s %50s - %100s",a1,a2,a3,a4)==4)        &&(u = strchr(linia + 2, ':'))){      strcpy(a1,u);      sprintf(linia,":%s!host@local PRIVMSG %s %s", a3,a4,a1);     }#endif    }    ot_send(to, linia);   }   odratuj:   if(*bufor != '\0') ot_send(to, bufor);  } else{  if(sscanf(bufor,"%20s",a1) == 1)   if(strcasecmp(a1,"SETS") == 0){     if(sscanf(bufor,"%20s %20s %1d",a1,a2,&i2) == 3){      if(strcasecmp(a2,"CP1250") == 0) lmstat[0] = (i2==0||i2==1)?i2:lmstat[0];      else if(strcasecmp(a2,"BOLD") == 0) lmstat[1] = (i2==0||i2==1)?i2:lmstat[1];      else if(strcasecmp(a2,"KOLORY") == 0) lmstat[2] = (i2==0||i2==1)?i2:lmstat[2];      else if(strcasecmp(a2,"HIST") == 0) lmstat[3] = (i2==0||i2==1)?i2:lmstat[3];     }    dawaj_pamiec(&tmpbufor_t, strlen(mstat_tab)+100);    sprintf(tmpbufor_t.a, mstat_tab, lmstat[2], lmstat[1], lmstat[0], lmstat[3]);    bufor[0] = '\0';    ot_send(from, tmpbufor_t.a);   }#if CONFIG_CP1250  if(lmstat[0] == 1){   u = bufor;   while((u = strchr(u, '\xa5'))!=NULL) *u = '\xa1'; u = bufor;   while((u = strchr(u, '\xb9'))!=NULL) *u = '\xb1'; u = bufor;   while((u = strchr(u, '\x8c'))!=NULL) *u = '\xa6'; u = bufor;   while((u = strchr(u, '\x9c'))!=NULL) *u = '\xb6'; u = bufor;   while((u = strchr(u, '\x8f'))!=NULL) *u = '\xac'; u = bufor;   while((u = strchr(u, '\x9f'))!=NULL) *u = '\xbc';  }#endif#if CONFIG_COLOR  if(lmstat[2] == 1)   if(strchr(bufor,0x03))    for(i2=0;i2<14;i2++) { replace(&bufor_t, irc_kolor_tab[0][i2], onet_kolor_tab[i2]);                           bufor=bufor_t.a; }#endif#if CONFIG_BOLD  if(lmstat[1] == 1){   replace(&bufor_t, "\x02", "%Fb%");   bufor=bufor_t.a;  }#endif  if(*bufor!='\0') ot_send(to, bufor); } zwolnij_pamiec(&bufor_t); zwolnij_pamiec(&tmpbufor_t); return 0;}void jedziemy(int klient){ int fdmax, onet, koniec = 0, i; time_t c1,c2; short int lmstat[4]; char bufor[1028], nickname[52], password[200], authkey[52], ircname[200]; char *u; struct sockaddr_in onetaddr; fd_set mfd; fd_set tmpfd; nickname[0] = '\0'; password[0] = '\0'; FD_ZERO(&mfd); memcpy(lmstat,mstat,sizeof(mstat)); onetaddr.sin_family = AF_INET; onetaddr.sin_port = htons(5015); onetaddr.sin_addr.s_addr = inet_addr("213.180.130.192"); memset(&(onetaddr.sin_zero), '\0', 8); u=   "tunel - $$$ onettunel.c v. "WERSJA" / "AUT" $$$\r\n\r\n"; ot_send(klient,u); u = #if CONFIG_CS_HOMES              "tunel - komendy: /quote cs homes   <-- pokazuje Twoje pokoje i statusy\r\n"#endif#if CONFIG_819_820_SLIST              "tunel -          /quote SLIST      <-- lista kanalow\r\n"#endif              "tunel - \r\n"              "tunel - dodatkowe opcje:\r\n"; ot_send(klient, u); u =    "tunel - /server 127.0.0.1 8899 haslo_do_nicka:ircname=Twoje_IRCname\r\n"        "tunel -   jesli ircname=Twoje_IRCname   <-- ustawia ircname na Twoje_IRCname\r\n"        "tunel - \r\n"; ot_send(klient, u);  u =   "tunel - USTAWIENIA TUNELU:\r\n"        "tunel -   /quote SETS     <-- pokazuje ustawienia tunelu\r\n"#if CONFIG_COLOR        "tunel - /quote SETS KOLORY 0 <-- wylacz kolory, 1 aby wlaczyc\r\n"#endif#if CONFIG_CP1250        "tunel - /quote SETS CP1250 0 <-- wylacz kodowanie CP1250 (Win), 1 aby wlaczyc\r\n"#endif#if CONFIG_BOLD        "tunel - /quote SETS BOLD 0 <-- wylacz pogrubienie czcionki, 1 wlacza\r\n"#endif#if CONFIG_817_HISTORY        "tunel - HIST <-- historia rozmowy w pokoju widoczna po wejsciu\r\n"#endif        "tunel - /quote SETS OPCJA 0 <-- wlacza/wylacza wybrana opcje z listy /quote SETS\r\n"; ot_send(klient, u); while(1){  i = recv(klient, bufor, 1024, 0);  if(i <= 0) goto koniec1;  u = strstr(bufor, "NICK");  if(u){   u = u + 5;   for(i = 0; i < 50 && *u!='\0'; u++,i++){    if(*u == '\r' || *u == '\n') break;    nickname[i] = *u;   } nickname[i] = '\0';   if(nickname[0] == '~') break;  }  u = strstr(bufor, "PASS");  if(u){   u = u + 5;   for(i = 0; i < 196 && *u!='\0'; u++,i++){    if(*u == '\r' || *u == '\n') break;    password[i] = *u;   } password[i] = '\0';  }  if(nickname[0] != '\0' && password[0] != '\0') break; }  strcpy(ircname, nickname); if(strchr(password, ':')){  u = strstr(password, "ircname");  if(u){   u += 8;   for(i = 0; *u!='\0'; u++,i++)    if(*u == '\r' || *u == '\n' || *u == ':') break;    else ircname[i] = *u;   ircname[i] = '\0';  }  u = strchr(password, ':');  *u = '\0'; } time(&c1); if(onethttpauth(nickname, password, authkey, klient) != 0){  ot_send(klient, "onethttpauth(): blad autoryzacji http, sprawdz nick/haslo lub zmiany autoryzacji\r\n");  goto koniec1; } time(&c2); sprintf(bufor, "tunel - \x03%cczas autoryzacji http: %d sekundy\r\n",'4',(int)(c2-c1)); ot_send(klient,bufor); onet = socket(AF_INET, SOCK_STREAM, 0); FD_SET(onet, &mfd); FD_SET(klient, &mfd); if(connect(onet, (struct sockaddr *)&onetaddr, sizeof(struct sockaddr)) == -1){  ot_send(klient, "connect(): nie mozna polaczyc sie do serwera IRC onetu\r\n");  closesocket(onet);  goto koniec1; } i = recv(onet, bufor, 1024, 0); if(i <= 0) goto koniec1; bufor[i] = '\0'; ot_send(klient, bufor); ot_send(onet, "AUTHKEY\r\n"); sprintf(bufor, "NICK %s\r\n", nickname); ot_send(onet, bufor); sprintf(bufor, "USER * %s czat-app.onet.pl :%s\r\n", authkey, ircname); ot_send(onet, bufor); i = recv(onet, bufor, 1024, 0); if(i <= 0) goto koniec1; bufor[i] = '\0'; u = strstr(bufor, "unknown"); if(!u){  ot_send(klient, "tunel - AUTHKEY: zmiana autoryzacji\r\n");  goto koniec1; } memcpy(authkey, strchr(u, ':') + 1, 16); authkey[16] = '\0'; auth(authkey); sprintf(bufor, "AUTHKEY %s\r\n", authkey); ot_send(onet, bufor); if(onet > klient) fdmax = onet; else fdmax = klient; while(koniec == 0){  tmpfd = mfd;  select(fdmax + 1, &tmpfd, NULL, NULL, NULL);  if(FD_ISSET(onet, &tmpfd)) koniec = wyslij(onet, klient, onet, lmstat);  if(FD_ISSET(klient, &tmpfd)) koniec = wyslij(klient, onet, onet, lmstat); } closesocket(onet); koniec1: closesocket(klient); return;}int main(int a, char *b[]){ int serwer, klientfd, klen, BindPort; char mojhost[650]; /* 650 bajtow na wszelki wypadek */ struct sockaddr_in serw, klient; struct hostent *myhost;#if __WIN32__ WSADATA wd; WSAStartup(267, &wd); DWORD it;#else pthread_t it;#endif puts("$$$ onettunel.c v. "WERSJA" / "AUT" $$$");#if __GNUC__ && __GNUC_MINOR__ printf("kompilacja: GCC %d.%d.? , "__DATE__" " __TIME__"\n\n", __GNUC__, __GNUC_MINOR__);#else#warning nieznany kompilator! puts("kompilacja: CC nieznany , "__DATE__" " __TIME__"\n");#endif if(a == 1) BindPort = 8899; else BindPort = atoi(b[1]);  if(gethostname(mojhost,600) != 0) strcpy(mojhost, "localhost"); myhost = gethostbyname(mojhost); serw.sin_family = AF_INET; serw.sin_port = htons(BindPort); serw.sin_addr.s_addr = INADDR_ANY; memset(&(serw.sin_zero), '\0', 8); serwer = socket(AF_INET, SOCK_STREAM, 0); if(bind(serwer, (struct sockaddr *)&serw, sizeof(serw)) == -1){  printf("- error_bind: nie mozna zabindowac portu %d, wybierz inny\n", BindPort);  closesocket(serwer);#if __WIN32__  WSACleanup();#endif  exit(1); } listen(serwer, 3); if(myhost == NULL) printf("+ serwer: %s.%d\r\n", mojhost, BindPort); else printf("+ serwer: %s.%d     nazwa hosta: %s\r\n", (char*)inet_ntoa(*((struct in_addr *)myhost->h_addr)), BindPort, mojhost); klen = sizeof(klient); while(1){  klientfd = accept(serwer, (struct sockaddr *)&klient, &klen);  WYKREUJ_THREAD } closesocket(serwer);#if __WIN32__ WSACleanup();#endif return 0;}