⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udp_nds.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
字号:
/*
 * Domain Name Service - address convertions
 *
 * v 0.0 : Jan 11, 1991 : E. Engelke
 * v 0.2 : Apr 10, 1995 : G. Vanem, function priv_addr()
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "copyrigh.h"
#include "wattcp.h"
#include "misc.h"
#include "strings.h"
#include "pcbsd.h"
#include "udp_nds.h"


/*
 * aton()
 *      - converts [a.b.c.d] or a.b.c.d to 32 bit long (host order)
 *      - returns 0 on error (safer than -1)
 */
DWORD aton (const char *str)
{
  int   i;
  DWORD ip = 0;

  if (*str == '[')
     ++str;

  for (i = 24; i >= 0; i -= 8)
  {
    int cur = atoi (str);

    ip |= (DWORD)(cur & 0xFF) << i;
    if (!i)
       return (ip);

    str = strchr (str, '.');
    if (!str)
       return (0);      /* return 0 on error */
    ++str;
  }
  return (0);           /* cannot happen ??  */
}

/*
 * isaddr()
 *      - returns nonzero if 'str' is simply an ip address
 *      - Should it accept dotless ip-addresses?
 */
int isaddr (const char *str)
{
  char ch;

  while ((ch = *str++) != 0)
  {
    if (isdigit(ch))
       continue;
    if (ch == '.' || ch == ' ' || ch == '[' || ch == ']')
       continue;
    return (0);
  }
  return (1);
}

/*
 * aton_dotless()
 *      - converts `[dotless]' or `dotless' to 32 bit long (host order)
 *      - returns 0 on error (safer than -1)
 */
DWORD aton_dotless (const char *str)
{
  DWORD ip = 0UL;

  isaddr_dotless (str, &ip);
  return (ip);
}

/*
 * isaddr_dotless()
 *      - returns nonzero if 'str' is an dotless ip address
 *      - accept "[ 0-9\[\]]+". Doesn't accept octal base.
 */
int isaddr_dotless (const char *str, DWORD *ip)
{
  char  ch, buf[10] = { 0 };
  int   i = 0;
  DWORD adr;

  while ((ch = *str++) != 0)
  {
    if (ch == '.' || i == sizeof(buf))
       return (0);

    if (isdigit(ch))
    {
      buf[i++] = ch;
      continue;
    }
    if (ch == ' ' || ch == '[' || ch == ']')
       continue;
    return (0);
  }

  buf[i] = '\0';
  adr = atol (buf);
  if (adr == 0)
     return (0);

  if ((adr % 256) == 0)         /* LSB must be non-zero */
     return (0);

  if (((adr >> 24) % 256) == 0) /* MSB must be non-zero */
     return (0);

  if (ip)
     *ip = adr;
  return (1);
}

void psocket (const tcp_Socket *s)
{
  char buffer[20];

  (*_outch) ('[');
  outs (_inet_ntoa(buffer, s->hisaddr));
  (*_outch) (':');
  itoa (s->hisport,buffer,10);
  outs (buffer);
  (*_outch) (']');
}

#ifdef NOT_USED
int priv_addr (DWORD ip)
{
  /*
   * private addresses in the "black range":
   *
   * 10.0.0.0    - 10.255.255.255
   * 172.16.0.0  - 172.31.255.255
   * 192.168.0.0 - 192.168.255.255
   */
  if (ip >= aton("10.0.0.0") && ip <= aton("10.255.255.255"))
     return (1);

  if (ip >= aton("172.16.0.0") && ip <= aton("172.31.255.255"))
     return (1);

  if (ip >= aton("192.168.0.0") && ip <= aton("192.168.255.255"))
     return (1);

  return (0);
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -