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

📄 protocol.c

📁 sock protocol ,it is useful!
💻 C
字号:
/* * Copyright (c) 1997, 1998, 1999 *      Inferno Nettverk A/S, Norway.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. The above copyright notice, this list of conditions and the following *    disclaimer must appear in all copies of the software, derivative works *    or modified versions, and any portions thereof, aswell as in all *    supporting documentation. * 2. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *      This product includes software developed by *      Inferno Nettverk A/S, Norway. * 3. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Inferno Nettverk A/S requests users of this software to return to * *  Software Distribution Coordinator  or  sdc@inet.no *  Inferno Nettverk A/S *  Oslo Research Park *  Gaustadal閑n 21 *  N-0349 Oslo *  Norway * * any improvements or extensions that they make and grant Inferno Nettverk A/S * the rights to redistribute these changes. * */#include "common.h"static const char rcsid[] ="$Id: protocol.c,v 1.48 1999/05/25 17:22:34 michaels Exp $";char *sockshost2mem(host, mem, version)	const struct sockshost_t *host;	char *mem;	int version;{	switch (version) {		case SOCKS_V4:		case SOCKS_V4REPLY_VERSION:			SASSERTX(host->atype == SOCKS_ADDR_IPV4);			/* DSTPORT */			memcpy(mem, &host->port, sizeof(host->port));			mem += sizeof(host->port);			/* DSTIP */			memcpy(mem, &host->addr.ipv4, sizeof(host->addr.ipv4));			mem += sizeof(host->addr.ipv4);			break;		case SOCKS_V5:			/* ATYP */			memcpy(mem, &host->atype, sizeof(host->atype));			mem += sizeof(host->atype);			switch (host->atype) {				case SOCKS_ADDR_IPV4:					memcpy(mem, &host->addr.ipv4.s_addr,					sizeof(host->addr.ipv4.s_addr));					mem += sizeof(host->addr.ipv4.s_addr);					break;				case SOCKS_ADDR_IPV6:					memcpy(mem, &host->addr.ipv6, sizeof(host->addr.ipv6));					mem += sizeof(host->addr.ipv6);					break;				case SOCKS_ADDR_DOMAIN:					/* first byte gives length of rest. */					*mem = (char)strlen(host->addr.domain);					memcpy(mem + 1, host->addr.domain, (size_t)*mem);					mem += *mem + 1;					break;				default:					SERRX(host->atype);			}			/* DST.PORT */			memcpy(mem, &host->port, sizeof(host->port));			mem += sizeof(host->port);			break;		default:			SERRX(version);	}	return mem;}const char *mem2sockshost(host, mem, len, version)	struct sockshost_t *host;	const char *mem;	size_t len;	int version;{	const char *function = "mem2sockshost()";	switch (version) {		case SOCKS_V5:			if (len < sizeof(host->atype))				return NULL;			memcpy(&host->atype, mem, sizeof(host->atype));			mem += sizeof(host->atype);			len -= sizeof(host->atype);			switch (host->atype) {				case SOCKS_ADDR_IPV4:					if (len < sizeof(host->addr.ipv4))						return NULL;					memcpy(&host->addr.ipv4, mem, sizeof(host->addr.ipv4));					mem += sizeof(host->addr.ipv4);					len -= sizeof(host->addr.ipv4);					break;				case SOCKS_ADDR_DOMAIN: {					size_t domainlen = (size_t)*mem;					mem += sizeof(*mem);					OCTETIFY(domainlen);					if (len < domainlen + 1) /* +1 for NUL to be added. */						return NULL;					SASSERTX(domainlen < sizeof(host->addr.domain));					memcpy(host->addr.domain, mem, domainlen);					host->addr.domain[domainlen] = NUL;					mem += domainlen;					len -= domainlen + 1; /* +1 for added NUL. */					break;				}				case SOCKS_ADDR_IPV6:					slog(LOG_INFO, "%s: ipv6 not supported", function);					return NULL;				default:					slog(LOG_INFO, "%s: unknown atype field: %d",					function, host->atype);					return NULL;			}			if (len < sizeof(host->port))				return NULL;			memcpy(&host->port, mem, sizeof(host->port));			mem += sizeof(host->port);			len -= sizeof(host->port);			break;		default:			SERRX(version);	}	return mem;}

⌨️ 快捷键说明

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