home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BUG 14
/
BUGCD1998_05.ISO
/
internet
/
tcp4u
/
tcp4u330.exe
/
tcp4u.330
/
src
/
util.c
< prev
Wrap
C/C++ Source or Header
|
1998-03-05
|
4KB
|
146 lines
/*
* Tcp4u v 3.30 Last Revision 27/02/1998 3.30.02
*
*===========================================================================
*
* Project: Tcp4u, Library for tcp protocol
* File: util.c
* Purpose: A few utilities functions
*
*===========================================================================
*
* This software is Copyright (c) 1996-1998 by Philippe Jounin
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
*
* If you make modifications to this software that you feel
* increases it usefulness for the rest of the community, please
* email the changes, enhancements, bug fixes as well as any and
* all ideas to me. This software is going to be maintained and
* enhanced as deemed necessary by the community.
*
*
* Philippe Jounin (ph.jounin@computer.org)
*/
#include "build.h"
/* this definition will be enough for our use */
#undef toupper
#define toupper(x) ( (x) & 0xDF )
/* ------------------------------------------------------------------------- */
/* Conversion d'un nom de machine en adresse IP */
/* Le nom est soit une "dotted address" soit un alias */
/* return : INADDR_NONE or IP address */
/* ------------------------------------------------------------------------- */
struct in_addr Tcp4uGetIPAddr (LPCSTR szHost)
{
struct hostent far * lpHostEnt;
struct in_addr sin_addr;
Tcp4uLog (LOG4U_INTERN, "Tcp4uGetIPAddr host %s", szHost);
sin_addr.s_addr = inet_addr (szHost); /* doted address */
if (sin_addr.s_addr==INADDR_NONE) /* si pas une doted address */
{ /* regarder le fichier hosts */
Tcp4uLog (LOG4U_CALL, "gethostbyname host %s", szHost);
lpHostEnt = gethostbyname (szHost);
if (lpHostEnt!=NULL)
memcpy (& sin_addr.s_addr, lpHostEnt->h_addr, lpHostEnt->h_length);
else
{
Tcp4uLog (LOG4U_ERROR, "gethostbyname host %s", szHost);
}
}
return sin_addr;
} /* Tcp4uGetIPAddr */
/* -------------------------------------- */
/* a self-made atoi */
/* -------------------------------------- */
/* Note: ne pas utiliser la fonction isdigit: qui donne des */
/* resultats errones en Windows */
#define IsDigit(x) ( (x)>='0' && (x)<='9')
int Tcp4uAtoi (LPCSTR p)
{
int n;
Tcp4uLog (LOG4U_INTERN, "Tcp4uAtoi");
for (n=0 ; IsDigit (*p) ; p++)
{
n *= 10;
n += (*p - '0');
}
return n;
} /* tcp4u_atoi */
long Tcp4uAtol (LPCSTR p)
{
long n;
Tcp4uLog (LOG4U_INTERN, "Tcp4uAtol");
for (n=0 ; IsDigit (*p) ; p++)
{
n *= 10;
n += (*p - '0');
}
return n;
} /* Tcp4uAtol */
/* a unix function which is not available under Windows */
/* should have same proto than strncmp */
/* adapted from the GNU strncasecmp */
int Tcp4uStrncasecmp (LPCSTR s1, LPCSTR s2, size_t n)
{
char c1, c2;
for ( ; n!=0 ; --n)
{
c1 = *s1++;
c2 = *s2++;
if (toupper (c1)!=toupper(c2)) return toupper (c1) - toupper(c2);
if (c1==0) return 0;
}
return 0;
} /* Strncasecmp */
/* ------------------------------------------------------------------------- */
/* a case-insentive strstr */
/* ------------------------------------------------------------------------- */
LPSTR Tcp4uStrIStr (LPCSTR s1, LPCSTR s2)
{
size_t nLength = Strlen(s2);
for (;;)
{
while (*s1!=0 && toupper(*s1)!=toupper(*s2) ) s1++;
if (*s1==0) return NULL;
if (Tcp4uStrncasecmp (s1, s2, nLength)==0) return (LPSTR) s1;
s1++;
}
} /* Tcp4uStrIStr */