view plugins/icq/proxy.c @ 1401:bf041349b11e

[gaim-migrate @ 1411] abliity to set accounts away independent of each other. also allows for all the other states (like in yahoo and icq). probably breaks MSN, so don't use it until rob fixes it. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Wed, 10 Jan 2001 22:15:24 +0000
parents 0a766047b4fd
children 4c510ca3563f
line wrap: on
line source

/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
$Id: proxy.c 1319 2000-12-19 10:08:29Z warmenhoven $
$Log$
Revision 1.2  2000/12/19 10:08:29  warmenhoven
Yay, new icqlib

Revision 1.8  2000/05/10 18:51:23  denis
icq_Disconnect() now called before icq_Disconnected callback to
prevent high CPU usage in kicq's "reconnect on disconnect" code.

Revision 1.7  2000/05/03 18:29:15  denis
Callbacks have been moved to the ICQLINK structure.

Revision 1.6  2000/04/05 14:37:02  denis
Applied patch from "Guillaume R." <grs@mail.com> for basic Win32
compatibility.

Revision 1.5  1999/10/07 18:00:59  denis
proxy.h file removed.

Revision 1.4  1999/07/16 12:01:06  denis
ICQLINK support added.

Revision 1.3  1999/07/12 15:13:33  cproch
- added definition of ICQLINK to hold session-specific global variabled
  applications which have more than one connection are now possible
- changed nearly every function defintion to support ICQLINK parameter

Revision 1.2  1999/04/14 14:51:42  denis
Switched from icq_Log callback to icq_Fmt function.
Cleanups for "strict" compiling (-ansi -pedantic)

Revision 1.1  1999/03/24 11:37:38  denis
Underscored files with TCP stuff renamed.
TCP stuff cleaned up
Function names changed to corresponding names.
icqlib.c splitted to many small files by subject.
C++ comments changed to ANSI C comments.

*/

#ifndef _WIN32
#include <unistd.h>
#endif

#ifdef _WIN32
#include <winsock.h>
#endif

#include <stdlib.h>

#include "util.h"
#include "icqtypes.h"
#include "icq.h"
#include "icqlib.h"

void icq_HandleProxyResponse(ICQLINK *link)
{
  int s;
  char buf[256];
#ifdef _WIN32
  s = recv(link->icq_ProxySok, buf, sizeof(buf), 0);
#else
  s = read(link->icq_ProxySok, &buf, sizeof(buf));
#endif
  if(s<=0)
  {
    icq_FmtLog(link, ICQ_LOG_FATAL, "[SOCKS] Connection terminated\n");
    icq_Disconnect(link);
    if(link->icq_Disconnected)
      (*link->icq_Disconnected)(link);
  }
}

/*******************
SOCKS5 Proxy support
********************/
void icq_SetProxy(ICQLINK *link, const char *phost, unsigned short pport, int pauth, const char *pname, const char *ppass)
{
  if(link->icq_ProxyHost)
    free(link->icq_ProxyHost);
  if(link->icq_ProxyName)
    free(link->icq_ProxyName);
  if(link->icq_ProxyPass)
    free(link->icq_ProxyPass);
  if(strlen(pname)>255)
  {
    icq_FmtLog(link, ICQ_LOG_ERROR, "[SOCKS] User name greater than 255 chars\n");
    link->icq_UseProxy = 0;
    return;
  }
  if(strlen(ppass)>255)
  {
    icq_FmtLog(link, ICQ_LOG_ERROR, "[SOCKS] User password greater than 255 chars\n");
    link->icq_UseProxy = 0;
    return;
  }
  link->icq_UseProxy = 1;
  link->icq_ProxyHost = strdup(phost);
  link->icq_ProxyPort = pport;
  link->icq_ProxyAuth = pauth;
  link->icq_ProxyName = strdup(pname);
  link->icq_ProxyPass = strdup(ppass);
}

void icq_UnsetProxy(ICQLINK *link)
{
  link->icq_UseProxy = 0;
}

int icq_GetProxySok(ICQLINK *link)
{
  return link->icq_ProxySok;
}