Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. int myconnect(SOCKET s, const struct sockaddr *name, int namelen) {
  2. unsigned int ip;
  3. unsigned short port;
  4. int cr = 0,
  5. lf = 0,
  6. len;
  7. unsigned char buff[100];
  8.  
  9. ip = ((struct sockaddr_in *)name)->sin_addr.s_addr;
  10. port = ntohs(((struct sockaddr_in *)name)->sin_port);
  11.  
  12. // skip local IP, Firefox REQUIRES at least that 127.0.0.1 is not proxified at the beginning
  13. if(((ip & 0xff) == 127) || ((ip & 0xff) == 192) || ((ip & 0xff) == 10)) return(0);
  14.  
  15. ((struct sockaddr_in *)name)->sin_addr.s_addr = proxy_ip;
  16. ((struct sockaddr_in *)name)->sin_port = proxy_port;
  17.  
  18. len = sprintf(buff,
  19. "CONNECT %u.%u.%u.%u:%hu HTTP/1.0rn"
  20. "rn",
  21. (ip & 0xff), ((ip >> 8) & 0xff), ((ip >> 16) & 0xff), ((ip >> 24) & 0xff),
  22. port);
  23.  
  24. if(real_connect(s, name, namelen) == SOCKET_ERROR) goto quit_error;
  25.  
  26. if(real_send(s, buff, len, 0) != len) goto quit_error;
  27.  
  28. for(;;) {
  29. if(real_recv(s, buff, 1, 0) != 1) goto quit_error;
  30. switch(buff[0]) {
  31. case 'r': cr++; break;
  32. case 'n': lf++; break;
  33. default: cr = 0; lf = 0; break;
  34. }
  35. if(lf == 2) break;
  36. }
  37.  
  38. // ignore the return number
  39. return(1); // > 0 skips the real connect()... it's REQUIRED Proxocket 0.1.4a or more!!!
  40. quit_error: // error, restore
  41. ((struct sockaddr_in *)name)->sin_addr.s_addr = ip;
  42. ((struct sockaddr_in *)name)->sin_port = htons(port);
  43. return(SOCKET_ERROR);
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement