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

📄 xsupconfig_parse_conn_ip.c

📁 linux 下通过802.1认证的安装包
💻 C
字号:
/**
 *
 * Licensed under a dual GPL/BSD license.  (See LICENSE file for more info.)
 *
 * \file xsupconfig_parse_conn_ip.c
 *
 * \author chris@open1x.org
 *
 * $Id: xsupconfig_parse_conn_ip.c,v 1.1.2.6 2007/06/05 16:32:37 chessing Exp $
 * $Date: 2007/06/05 16:32:37 $
 **/

#include <stdio.h>

#ifndef WINDOWS
#include <stdint.h>
#include <strings.h>
#endif

#include <libxml/parser.h>
#include <libxml/tree.h>
#include <string.h>

#include "xsupconfig_structs.h"
#include "../../src/xsup_common.h"
#include "xsupconfig.h"
#include "xsupconfig_common.h"
#include "xsupconfig_parse.h"
#include "xsupconfig_parse_conn_association.h"

multichoice ip_type_choices[] = {
  { 0,   "DHCP" },
  { 1,   "STATIC" },
  { 2,   "NONE" },
  { -1, NULL}};

void *xsupconfig_parse_conn_ip(void **attr, xmlNodePtr node)
{
  return (*attr);
}

void *xsupconfig_parse_conn_ip_type(void **attr, xmlNodePtr node)
{
  struct config_connection *conn = NULL;
  int result = 0;
  char *value = NULL;

  value = xmlNodeGetContent(node);

#ifdef PARSE_DEBUG
  printf("IP Allocation Type : %s\n", value);
#endif

  conn = (*attr);

  xsupconfig_common_upcase(value);

  result = xsupconfig_common_select_from_list(ip_type_choices, value);

  if (result == -1)
  {
	  xsupconfig_common_log("Unknown IP address allocation type '%s' in line %ld.  Defaulting to DHCP.",
		  value, xsupconfig_parse_get_line_num());
	  conn->ip.type = 0;
  }
  else
  {
	  conn->ip.type = result;
  }
  
  FREE(value);

  return conn;
}

/**
 * \brief Verify that an IP address (or netmask) is valid.
 *
 * @param[in] ipstr   The IP or netmask to check.
 *
 * \retval TRUE if it is valid
 * \retval FALSE if it isn't.
 **/
static int xsupconfig_parse_is_addr_valid(char *ipstr)
{
	int oct1 = 0, oct2 = 0, oct3 = 0, oct4 = 0;

	sscanf(ipstr, "%d.%d.%d.%d", &oct1, &oct2, &oct3, &oct4);

	if ((oct1 < 0) || (oct1 > 0xff)) return FALSE;
	if ((oct2 < 0) || (oct2 > 0xff)) return FALSE;
	if ((oct3 < 0) || (oct3 > 0xff)) return FALSE;
	if ((oct4 < 0) || (oct4 > 0xff)) return FALSE;

	return TRUE;
}

void *xsupconfig_parse_conn_ip_addr(void **attr, xmlNodePtr node)
{
	struct config_connection *conn = NULL;
	char *value = NULL;
	
	conn = (*attr);

	value = xmlNodeGetContent(node);

#ifdef PARSE_DEBUG
	printf("IP Address is : %s\n", value);
#endif

	if ((value == NULL) || (strlen(value) == 0))
	{
		free(value);
		conn->ip.ipaddr = NULL;
	}
	else
	{
		if (xsupconfig_parse_is_addr_valid(value) == TRUE)
		{
			conn->ip.ipaddr = value;
		}
		else
		{
			xsupconfig_common_log("IP address specified at line %ld is invalid.",
				xsupconfig_parse_get_line_num());
			conn->ip.ipaddr = NULL;
		}
	}

	return conn;
}

void *xsupconfig_parse_conn_ip_netmask(void **attr, xmlNodePtr node)
{
	struct config_connection *conn = NULL;
	char *value = NULL;
	
	conn = (*attr);

	value = xmlNodeGetContent(node);

#ifdef PARSE_DEBUG
	printf("IP Netmask is : %s\n", value);
#endif

	if ((value == NULL) || (strlen(value) == 0))
	{
		free(value);
		conn->ip.netmask = NULL;
	}
	else
	{
		if (xsupconfig_parse_is_addr_valid(value) == TRUE)
		{
			conn->ip.netmask = value;
		}
		else
		{
			xsupconfig_common_log("Netmask defined at line %ld is invalid.",
				xsupconfig_parse_get_line_num());
			conn->ip.netmask = NULL;
		}
	}

	return conn;
}

void *xsupconfig_parse_conn_ip_gateway(void **attr, xmlNodePtr node)
{
	struct config_connection *conn = NULL;
	char *value = NULL;
	
	conn = (*attr);

	value = xmlNodeGetContent(node);

#ifdef PARSE_DEBUG
	printf("IP Gateway is : %s\n", value);
#endif

	if ((value == NULL) || (strlen(value) == 0))
	{
		free(value);
		conn->ip.gateway = NULL;
	}
	else
	{
		if (xsupconfig_parse_is_addr_valid(value) == TRUE)
		{
			conn->ip.gateway = value;
		}
		else
		{
			xsupconfig_common_log("IP Gateway defined at line %ld is invalid.",
				xsupconfig_parse_get_line_num());
			conn->ip.gateway = NULL;
		}
	}

	return conn;
}

void *xsupconfig_parse_conn_ip_dns1(void **attr, xmlNodePtr node)
{
	struct config_connection *conn = NULL;
	char *value = NULL;
	
	conn = (*attr);

	value = xmlNodeGetContent(node);

#ifdef PARSE_DEBUG
	printf("DNS1 Address is : %s\n", value);
#endif

	if ((value == NULL) || (strlen(value) == 0))
	{
		free(value);
		conn->ip.dns1 = NULL;
	}
	else
	{
		if (xsupconfig_parse_is_addr_valid(value) == TRUE)
		{
			conn->ip.dns1 = value;
		}
		else
		{
			xsupconfig_common_log("The DNS address specified at line %ld is invalid.",
				xsupconfig_parse_get_line_num());
			conn->ip.dns1 = NULL;
		}
	}

	return conn;
}

void *xsupconfig_parse_conn_ip_dns2(void **attr, xmlNodePtr node)
{
	struct config_connection *conn = NULL;
	char *value = NULL;
	
	conn = (*attr);

	value = xmlNodeGetContent(node);

#ifdef PARSE_DEBUG
	printf("DNS2 Address is : %s\n", value);
#endif

	if ((value == NULL) || (strlen(value) == 0))
	{
		free(value);
		conn->ip.dns2 = NULL;
	}
	else
	{
		if (xsupconfig_parse_is_addr_valid(value) == TRUE)
		{
			conn->ip.dns2 = value;
		}
		else
		{
			xsupconfig_common_log("The DNS address specified at line %ld is invalid.",
				xsupconfig_parse_get_line_num());
			conn->ip.dns2 = NULL;
		}
	}

	return conn;
}

void *xsupconfig_parse_conn_ip_dns3(void **attr, xmlNodePtr node)
{
	struct config_connection *conn = NULL;
	char *value = NULL;
	char *errstr = NULL;
	
	conn = (*attr);

	value = xmlNodeGetContent(node);

#ifdef PARSE_DEBUG
	printf("DNS3 Address is : %s\n", value);
#endif

	if ((value == NULL) || (strlen(value) == 0))
	{
		free(value);
		conn->ip.dns3 = NULL;
	}
	else
	{
		if (xsupconfig_parse_is_addr_valid(value) == TRUE)
		{
			conn->ip.dns3 = value;
		}
		else
		{
			xsupconfig_common_log("The DNS address specified at line %ld is invalid.",
				xsupconfig_parse_get_line_num());
			conn->ip.dns3 = NULL;
		}
	}

	return conn;
}

void *xsupconfig_parse_conn_ip_search_domain(void **attr, xmlNodePtr node)
{
	struct config_connection *conn = NULL;
	char *value = NULL;
	
	conn = (*attr);

	value = xmlNodeGetContent(node);

#ifdef PARSE_DEBUG
	printf("Search Domain is : %s\n", value);
#endif

	if ((value == NULL) || (strlen(value) == 0))
	{
		free(value);
		conn->ip.search_domain = NULL;
	}
	else
	{
		conn->ip.search_domain = value;
	}

	return conn;
}

void *xsupconfig_parse_conn_ip_renew_on_reauth(void **attr, xmlNodePtr node)
{
	struct config_connection *conn = NULL;
	char *value = NULL;
	uint8_t result = 0;
	char *errstr = NULL;
	
	conn = (*attr);

	value = xmlNodeGetContent(node);

#ifdef PARSE_DEBUG
	printf("Renew on Reauth : %s\n", value);
#endif

  result = xsupconfig_common_yesno(value);

  if (result == 1) 
    {
		conn->ip.renew_on_reauth = TRUE;
    }
  else if (result == 0)
    {
		conn->ip.renew_on_reauth = FALSE;
    }
  else
    {
		xsupconfig_common_log("Unknown reauthentication setting of '%s' at line %ld.  Defaulting to NO.",
			value, xsupconfig_parse_get_line_num());
		conn->ip.renew_on_reauth = FALSE;
    }

  FREE(value);

  return conn;
}

parser conn_ip[] = {
  {"Type", NULL, FALSE, xsupconfig_parse_conn_ip_type},
  {"IP_Address", NULL, FALSE, xsupconfig_parse_conn_ip_addr},
  {"Netmask", NULL, FALSE, xsupconfig_parse_conn_ip_netmask},
  {"Gateway", NULL, FALSE, xsupconfig_parse_conn_ip_gateway},
  {"DNS1", NULL, FALSE, xsupconfig_parse_conn_ip_dns1},
  {"DNS2", NULL, FALSE, xsupconfig_parse_conn_ip_dns2},
  {"DNS3", NULL, FALSE, xsupconfig_parse_conn_ip_dns3},
  {"Search_Domain", NULL, FALSE, xsupconfig_parse_conn_ip_search_domain},
  {"Renew_DHCP_on_Reauthentication", NULL, FALSE, xsupconfig_parse_conn_ip_renew_on_reauth},

  {NULL, NULL, FALSE, NULL}};

⌨️ 快捷键说明

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