示例#1
0
文件: ip.c 项目: vstakhov/mpd
int
ParseAddr(const char *s, struct u_addr *addr, u_char allow)
{
	if (strchr(s, '/'))
		return (FALSE);

/* Get IP address part; if that fails, try looking up hostname */

	if ((allow & ALLOW_IPV4) && inet_pton(AF_INET, s, &addr->u.ip4)) {
		addr->family = AF_INET;
	} else if ((allow & ALLOW_IPV6) && inet_pton(AF_INET6, s, &addr->u.ip6)) {
		addr->family = AF_INET6;
	} else if ((allow & ALLOW_IPV4) && !GetAnyIpAddress(addr, s)) {
		addr->family = AF_INET;
	} else if (allow & ALLOW_IPV4) {
		struct hostent *hptr;
		int k;

		if ((hptr = gethostbyname(s)) == NULL) {
			return (FALSE);
		}
		for (k = 0; hptr->h_addr_list[k]; k++);
		if (k == 0)
			k = 1;
		memcpy(&addr->u.ip4, hptr->h_addr_list[random() % k], sizeof(addr->u.ip4));
		addr->family = AF_INET;
	} else {
		return (FALSE);
	}

	return (TRUE);
}
示例#2
0
文件: ipcp.c 项目: ZRouter/ZRouter
void
IpcpInit(Bund b)
{
  IpcpState		const ipcp = &b->ipcp;

  /* Init state machine */
  memset(ipcp, 0, sizeof(*ipcp));
  FsmInit(&ipcp->fsm, &gIpcpFsmType, b);

  /* Come up with a default IP address for my side of the link */
  u_rangeclear(&ipcp->conf.self_allow);
  GetAnyIpAddress(&ipcp->conf.self_allow.addr, NULL);

#ifdef USE_NG_VJC
  /* Default we want VJ comp */
  Enable(&ipcp->conf.options, IPCP_CONF_VJCOMP);
  Accept(&ipcp->conf.options, IPCP_CONF_VJCOMP);
#endif
}