亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rfcnb-util.c

?? 代理服務器 squid-2.6.STABLE16
?? C
字號:
/* UNIX RFCNB (RFC1001/RFC1002) NetBIOS implementation *  * Version 1.0 * RFCNB Utility Routines ... *  * Copyright (C) Richard Sharpe 1996 *  *//* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. *  * This program 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 General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <string.h>#include "std-includes.h"#include "rfcnb-priv.h"#include "rfcnb-util.h"#include "rfcnb-io.h"#include <arpa/inet.h>extern void (*Prot_Print_Routine) ();	/* Pointer to protocol print routine *//* Convert name and pad to 16 chars as needed *//* Name 1 is a C string with null termination, name 2 may not be *//* If SysName is true, then put a <00> on end, else space>       */voidRFCNB_CvtPad_Name(char *name1, char *name2){    char c, c1, c2;    int i, len;    len = strlen(name1);    for (i = 0; i < 16; i++) {	if (i >= len) {	    c1 = 'C';	    c2 = 'A';		/* CA is a space */	} else {	    c = name1[i];	    c1 = (char) ((int) c / 16 + (int) 'A');	    c2 = (char) ((int) c % 16 + (int) 'A');	}	name2[i * 2] = c1;	name2[i * 2 + 1] = c2;    }    name2[32] = 0;		/* Put in the nll ... */}/* Converts an Ascii NB Name (16 chars) to an RFCNB Name (32 chars) * Uses the encoding in RFC1001. Each nibble of byte is added to 'A' * to produce the next byte in the name. *  * This routine assumes that AName is 16 bytes long and that NBName has  * space for 32 chars, so be careful ...  *  */voidRFCNB_AName_To_NBName(char *AName, char *NBName){    char c, c1, c2;    int i;    for (i = 0; i < 16; i++) {	c = AName[i];	c1 = (char) ((c >> 4) + 'A');	c2 = (char) ((c & 0xF) + 'A');	NBName[i * 2] = c1;	NBName[i * 2 + 1] = c2;    }    NBName[32] = 0;		/* Put in a null */}/* Do the reverse of the above ... */voidRFCNB_NBName_To_AName(char *NBName, char *AName){    char c, c1, c2;    int i;    for (i = 0; i < 16; i++) {	c1 = NBName[i * 2];	c2 = NBName[i * 2 + 1];	c = (char) (((int) c1 - (int) 'A') * 16 + ((int) c2 - (int) 'A'));	AName[i] = c;    }    AName[i] = 0;		/* Put a null on the end ... */}/* Print a string of bytes in HEX etc */voidRFCNB_Print_Hex(FILE * fd, struct RFCNB_Pkt *pkt, int Offset, int Len){    char c1, c2, outbuf1[33];    unsigned char c;    int i, j;    struct RFCNB_Pkt *pkt_ptr = pkt;    static char Hex_List[17] = "0123456789ABCDEF";    j = 0;    /* We only want to print as much as sepcified in Len */    while (pkt_ptr != NULL) {	for (i = 0;	    i < ((Len > (pkt_ptr->len) ? pkt_ptr->len : Len) - Offset);	    i++) {	    c = pkt_ptr->data[i + Offset];	    c1 = Hex_List[c >> 4];	    c2 = Hex_List[c & 0xF];	    outbuf1[j++] = c1;	    outbuf1[j++] = c2;	    if (j == 32) {	/* Print and reset */		outbuf1[j] = 0;		fprintf(fd, "    %s\n", outbuf1);		j = 0;	    }	}	Offset = 0;	Len = Len - pkt_ptr->len;	/* Reduce amount by this much */	pkt_ptr = pkt_ptr->next;    }    /* Print last lot in the buffer ... */    if (j > 0) {	outbuf1[j] = 0;	fprintf(fd, "    %s\n", outbuf1);    }    fprintf(fd, "\n");}/* Get a packet of size n */struct RFCNB_Pkt *RFCNB_Alloc_Pkt(int n){    RFCNB_Pkt *pkt;    if ((pkt = (struct RFCNB_Pkt *) malloc(sizeof(struct RFCNB_Pkt))) == NULL) {	RFCNB_errno = RFCNBE_NoSpace;	RFCNB_saved_errno = errno;	return (NULL);    }    pkt->next = NULL;    pkt->len = n;    if (n == 0)	return (pkt);    if ((pkt->data = (char *) malloc(n)) == NULL) {	RFCNB_errno = RFCNBE_NoSpace;	RFCNB_saved_errno = errno;	free(pkt);	return (NULL);    }    return (pkt);}/* Free up a packet */voidRFCNB_Free_Pkt(struct RFCNB_Pkt *pkt){    struct RFCNB_Pkt *pkt_next;    char *data_ptr;    while (pkt != NULL) {	pkt_next = pkt->next;	data_ptr = pkt->data;	if (data_ptr != NULL)	    free(data_ptr);	free(pkt);	pkt = pkt_next;    }}/* Print an RFCNB packet */voidRFCNB_Print_Pkt(FILE * fd, char *dirn, struct RFCNB_Pkt *pkt, int len){    char lname[17];    /* We assume that the first fragment is the RFCNB Header  */    /* We should loop through the fragments printing them out */    fprintf(fd, "RFCNB Pkt %s:", dirn);    switch (RFCNB_Pkt_Type(pkt->data)) {    case RFCNB_SESSION_MESSAGE:	fprintf(fd, "SESSION MESSAGE: Length = %i\n", RFCNB_Pkt_Len(pkt->data));	RFCNB_Print_Hex(fd, pkt, RFCNB_Pkt_Hdr_Len,#ifdef RFCNB_PRINT_DATA	    RFCNB_Pkt_Len(pkt->data) - RFCNB_Pkt_Hdr_Len);#else	    40);#endif	if (Prot_Print_Routine != 0) {	/* Print the rest of the packet */	    Prot_Print_Routine(fd, strcmp(dirn, "sent"), pkt, RFCNB_Pkt_Hdr_Len,		RFCNB_Pkt_Len(pkt->data) - RFCNB_Pkt_Hdr_Len);	}	break;    case RFCNB_SESSION_REQUEST:	fprintf(fd, "SESSION REQUEST: Length = %i\n",	    RFCNB_Pkt_Len(pkt->data));	RFCNB_NBName_To_AName((char *) (pkt->data + RFCNB_Pkt_Called_Offset), lname);	fprintf(fd, "  Called Name: %s\n", lname);	RFCNB_NBName_To_AName((char *) (pkt->data + RFCNB_Pkt_Calling_Offset), lname);	fprintf(fd, "  Calling Name: %s\n", lname);	break;    case RFCNB_SESSION_ACK:	fprintf(fd, "RFCNB SESSION ACK: Length = %i\n",	    RFCNB_Pkt_Len(pkt->data));	break;    case RFCNB_SESSION_REJ:	fprintf(fd, "RFCNB SESSION REJECT: Length = %i\n",	    RFCNB_Pkt_Len(pkt->data));	if (RFCNB_Pkt_Len(pkt->data) < 1) {	    fprintf(fd, "   Protocol Error, short Reject packet!\n");	} else {	    fprintf(fd, "   Error = %x\n", CVAL(pkt->data, RFCNB_Pkt_Error_Offset));	}	break;    case RFCNB_SESSION_RETARGET:	fprintf(fd, "RFCNB SESSION RETARGET: Length = %i\n",	    RFCNB_Pkt_Len(pkt->data));	/* Print out the IP address etc and the port? */	break;    case RFCNB_SESSION_KEEP_ALIVE:	fprintf(fd, "RFCNB SESSION KEEP ALIVE: Length = %i\n",	    RFCNB_Pkt_Len(pkt->data));	break;    default:	break;    }}/* Resolve a name into an address */intRFCNB_Name_To_IP(char *host, struct in_addr *Dest_IP){    int addr;			/* Assumes IP4, 32 bit network addresses */    struct hostent *hp;    /* Use inet_addr to try to convert the address */    if ((addr = inet_addr(host)) == INADDR_NONE) {	/* Oh well, a good try :-) */	/* Now try a name look up with gethostbyname */	if ((hp = gethostbyname(host)) == NULL) {	/* Not in DNS */	    /* Try NetBIOS name lookup, how the hell do we do that? */	    RFCNB_errno = RFCNBE_BadName;	/* Is this right? */	    RFCNB_saved_errno = errno;	    return (RFCNBE_Bad);	} else {		/* We got a name */	    memcpy((void *) Dest_IP, (void *) hp->h_addr_list[0], sizeof(struct in_addr));	}    } else {			/* It was an IP address */	memcpy((void *) Dest_IP, (void *) &addr, sizeof(struct in_addr));    }    return 0;}/* Disconnect the TCP connection to the server */intRFCNB_Close(int socket){    close(socket);    /* If we want to do error recovery, here is where we put it */    return 0;}/* Connect to the server specified in the IP address. * Not sure how to handle socket options etc.         */intRFCNB_IP_Connect(struct in_addr Dest_IP, int port){    struct sockaddr_in Socket;    int fd;    /* Create a socket */    if ((fd = socket(PF_INET, SOCK_STREAM, 0)) < 0) {	/* Handle the error */	RFCNB_errno = RFCNBE_BadSocket;	RFCNB_saved_errno = errno;	return (RFCNBE_Bad);    }    memset((char *) &Socket, 0, sizeof(Socket));    memcpy((char *) &Socket.sin_addr, (char *) &Dest_IP, sizeof(Dest_IP));    Socket.sin_port = htons(port);    Socket.sin_family = PF_INET;    /* Now connect to the destination */    if (connect(fd, (struct sockaddr *) &Socket, sizeof(Socket)) < 0) {		/* Error */	close(fd);	RFCNB_errno = RFCNBE_ConnectFailed;	RFCNB_saved_errno = errno;	return (RFCNBE_Bad);    }    return (fd);}/* handle the details of establishing the RFCNB session with remote  * end  *  */intRFCNB_Session_Req(struct RFCNB_Con *con,    char *Called_Name,    char *Calling_Name,    BOOL * redirect,    struct in_addr *Dest_IP,    int *port){    char *sess_pkt;    /* Response packet should be no more than 9 bytes, make 16 jic */    char resp[16];    int len;    struct RFCNB_Pkt *pkt, res_pkt;    /* We build and send the session request, then read the response */    pkt = RFCNB_Alloc_Pkt(RFCNB_Pkt_Sess_Len);    if (pkt == NULL) {	return (RFCNBE_Bad);	/* Leave the error that RFCNB_Alloc_Pkt gives) */    }    sess_pkt = pkt->data;	/* Get pointer to packet proper */    sess_pkt[RFCNB_Pkt_Type_Offset] = RFCNB_SESSION_REQUEST;    RFCNB_Put_Pkt_Len(sess_pkt, RFCNB_Pkt_Sess_Len - RFCNB_Pkt_Hdr_Len);    sess_pkt[RFCNB_Pkt_N1Len_Offset] = 32;    sess_pkt[RFCNB_Pkt_N2Len_Offset] = 32;    RFCNB_CvtPad_Name(Called_Name, (sess_pkt + RFCNB_Pkt_Called_Offset));    RFCNB_CvtPad_Name(Calling_Name, (sess_pkt + RFCNB_Pkt_Calling_Offset));    /* Now send the packet */#ifdef RFCNB_DEBUG    fprintf(stderr, "Sending packet: ");#endif    if ((len = RFCNB_Put_Pkt(con, pkt, RFCNB_Pkt_Sess_Len)) < 0) {	return (RFCNBE_Bad);	/* Should be able to write that lot ... */    }#ifdef RFCNB_DEBUG    fprintf(stderr, "Getting packet.\n");#endif    res_pkt.data = resp;    res_pkt.len = sizeof(resp);    res_pkt.next = NULL;    if ((len = RFCNB_Get_Pkt(con, &res_pkt, sizeof(resp))) < 0) {	return (RFCNBE_Bad);    }    /* Now analyze the packet ... */    switch (RFCNB_Pkt_Type(resp)) {    case RFCNB_SESSION_REJ:	/* Didnt like us ... too bad */	/* Why did we get rejected ? */	switch (CVAL(resp, RFCNB_Pkt_Error_Offset)) {	case 0x80:	    RFCNB_errno = RFCNBE_CallRejNLOCN;	    break;	case 0x81:	    RFCNB_errno = RFCNBE_CallRejNLFCN;	    break;	case 0x82:	    RFCNB_errno = RFCNBE_CallRejCNNP;	    break;	case 0x83:	    RFCNB_errno = RFCNBE_CallRejInfRes;	    break;	case 0x8F:	    RFCNB_errno = RFCNBE_CallRejUnSpec;	    break;	default:	    RFCNB_errno = RFCNBE_ProtErr;	    break;	}	return (RFCNBE_Bad);	break;    case RFCNB_SESSION_ACK:	/* Got what we wanted ...      */	return (0);	break;    case RFCNB_SESSION_RETARGET:	/* Go elsewhere                */	*redirect = TRUE;	/* Copy port and ip addr       */	memcpy(Dest_IP, (resp + RFCNB_Pkt_IP_Offset), sizeof(struct in_addr));	*port = SVAL(resp, RFCNB_Pkt_Port_Offset);	return (0);	break;    default:			/* A protocol error */	RFCNB_errno = RFCNBE_ProtErr;	return (RFCNBE_Bad);	break;    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
136国产福利精品导航| 国产欧美日韩精品一区| 成人av动漫在线| 激情综合色播五月| 美腿丝袜亚洲三区| 久久激情综合网| 国产九色sp调教91| 国产成人精品亚洲777人妖| 国产综合久久久久久久久久久久| 蜜乳av一区二区三区| 另类中文字幕网| 国产一区视频在线看| 大桥未久av一区二区三区中文| 韩国毛片一区二区三区| 国产中文字幕一区| 粉嫩av一区二区三区粉嫩 | 国产成人自拍网| 成人动漫一区二区三区| 一本到不卡免费一区二区| 成人激情综合网站| 99视频热这里只有精品免费| 色综合视频一区二区三区高清| 色域天天综合网| 91精品国产综合久久香蕉麻豆| 在线综合亚洲欧美在线视频| 欧美mv和日韩mv的网站| 国产精品福利电影一区二区三区四区| 日韩理论片中文av| 午夜视频久久久久久| 国产美女av一区二区三区| 91婷婷韩国欧美一区二区| 欧美日韩的一区二区| 国产无遮挡一区二区三区毛片日本| 国产精品久久久久影院| 无码av免费一区二区三区试看| 国产精品乡下勾搭老头1| 欧美中文字幕一区二区三区亚洲| 欧美大片顶级少妇| 亚洲伊人色欲综合网| 黄页网站大全一区二区| 91色porny蝌蚪| 日韩欧美在线不卡| 亚洲欧洲国产专区| 美美哒免费高清在线观看视频一区二区 | 久久麻豆一区二区| 亚洲国产欧美日韩另类综合| 国产精品一区在线观看你懂的| 一本一本大道香蕉久在线精品| 欧美精品xxxxbbbb| 国产精品不卡视频| 久久精品国产精品亚洲精品| 99精品黄色片免费大全| 精品久久久久久无| 洋洋成人永久网站入口| 成人午夜看片网址| 精品国产凹凸成av人网站| 亚洲激情图片小说视频| 国产成人超碰人人澡人人澡| 日韩女优电影在线观看| 亚洲一区精品在线| 成人午夜免费av| 久久久亚洲高清| 韩国欧美国产1区| 欧美一区二区三区不卡| 亚洲一区二区三区四区中文字幕 | 亚洲女同一区二区| 成人午夜激情视频| 日本一区二区三区在线不卡| 久久国产精品区| 日韩欧美一区在线| 亚洲国产精品一区二区久久恐怖片 | 国产精品一区二区久久不卡 | 粉嫩av一区二区三区在线播放| 久久在线观看免费| 麻豆精品在线播放| 欧美一卡2卡三卡4卡5免费| 五月天丁香久久| 538在线一区二区精品国产| 亚洲国产欧美在线| 7777精品伊人久久久大香线蕉完整版 | 在线不卡免费欧美| 香蕉成人伊视频在线观看| 欧美无乱码久久久免费午夜一区 | 国产成人综合亚洲网站| 久久精品人人爽人人爽| 成人三级伦理片| 国产精品每日更新在线播放网址| 国产iv一区二区三区| 国产精品国产a| 色婷婷亚洲综合| 视频一区二区三区在线| 日韩视频免费观看高清完整版在线观看| 日韩在线一二三区| 精品国产a毛片| 国产91精品入口| 中文字幕一区二区三| 色八戒一区二区三区| 五月婷婷欧美视频| 精品国产乱码久久久久久夜甘婷婷| 韩日精品视频一区| 亚洲情趣在线观看| 91精品国产一区二区| 久久福利资源站| 国产精品你懂的在线| 欧美性视频一区二区三区| 五月激情六月综合| 国产午夜亚洲精品不卡| 色综合久久中文字幕综合网| 天天做天天摸天天爽国产一区| 日韩欧美国产午夜精品| 国产麻豆日韩欧美久久| 国产精品久久久久婷婷| 欧美日韩一区二区三区免费看| 麻豆国产91在线播放| 国产精品三级久久久久三级| 欧美日韩精品二区第二页| 国产一区二区三区免费播放 | 日韩精品专区在线影院观看| 国产成人精品在线看| 图片区小说区区亚洲影院| 国产亚洲一区二区三区四区| 欧美三级视频在线| 福利电影一区二区三区| 亚洲狠狠爱一区二区三区| 国产日韩欧美一区二区三区乱码| 欧美无砖砖区免费| 成人午夜免费视频| 久久精品国产一区二区三区免费看 | 国产成人一区在线| 日韩成人免费电影| 怡红院av一区二区三区| 欧美国产国产综合| 精品日产卡一卡二卡麻豆| 欧美视频在线观看一区二区| 成人av电影在线| 国产中文一区二区三区| 亚洲成人免费视| 亚洲人成影院在线观看| 久久精品综合网| 2021久久国产精品不只是精品| 欧美在线免费观看视频| 91猫先生在线| 99热这里都是精品| 国产激情视频一区二区三区欧美| 久久精品99国产国产精| 奇米色一区二区| 欧美aaaaaa午夜精品| 秋霞成人午夜伦在线观看| 亚洲国产中文字幕在线视频综合| 亚洲欧美日韩中文播放 | 亚洲电影一级黄| 一区二区三区在线看| 亚洲人妖av一区二区| 国产精品久久久久久久久快鸭| 国产欧美日韩在线| 国产欧美日韩麻豆91| 日本一区二区三区电影| 精品国产污污免费网站入口| 2023国产精品自拍| 久久亚洲一级片| 国产午夜精品一区二区三区四区| 久久精品一区八戒影视| 国产拍欧美日韩视频二区| 亚洲国产高清不卡| 成人欧美一区二区三区白人| 中文字幕日韩精品一区| 亚洲欧美电影一区二区| 一区二区不卡在线播放 | 日韩午夜激情免费电影| 日韩一级大片在线观看| 久久蜜桃香蕉精品一区二区三区| 国产日产欧美一区二区视频| 国产精品国产三级国产普通话99| 亚洲丝袜精品丝袜在线| 天天操天天干天天综合网| 蜜桃一区二区三区在线观看| 国产一区美女在线| 一本一道久久a久久精品| 欧美日韩aaaaa| 久久精品网站免费观看| 亚洲美女视频在线| 男人的j进女人的j一区| 国产传媒一区在线| 色爱区综合激月婷婷| 精品久久免费看| 亚洲视频小说图片| 男女男精品网站| 亚洲日穴在线视频| 蜜芽一区二区三区| 国产成人亚洲综合色影视| 日本韩国欧美在线| 欧美精品一区二区三区久久久| 国产精品亲子伦对白| 亚洲成人动漫在线免费观看| 国精产品一区一区三区mba视频| 91伊人久久大香线蕉| 精品国产乱码久久久久久免费| 国产精品福利av| 国产做a爰片久久毛片| 欧美三级日韩三级|