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

📄 tcpdata.cpp

📁 iptux是linux下面能实现类似windows里面飞鸽传书的功能
💻 CPP
字号:
//// C++ Implementation: TcpData//// Description:////// Author: Jally <jallyx@163.com>, (C) 2008//// Copyright: See COPYING file that comes with this distribution////#include "TcpData.h"#include "SendFile.h"#include "UdpData.h"#include "Pal.h"#include "udt.h"#include "baling.h"#include "utils.h"TcpData::TcpData(){}TcpData::~TcpData(){}void TcpData::TcpDataEntry(int sock){	extern SendFile sfl;	char buf[MAX_SOCKBUF];	uint32_t commandno;	ssize_t size;	size = my_read1(sock, buf, MAX_SOCKBUF, 5);	if (size <= 0) {		close(sock);		return;	}	commandno = iptux_get_dec_number(buf, 4);	switch (GET_MODE(commandno)) {		case IPMSG_GETFILEDATA:			sfl.RequestData(sock, IPMSG_FILE_REGULAR, buf);			break;		case IPMSG_GETDIRFILES:			sfl.RequestData(sock, IPMSG_FILE_DIR, buf);			break;		case IPTUX_SENDSUBLAYER:			RecvSublayer(sock, commandno, buf, size);			break;		default:			break;	}	close(sock);}void TcpData::RecvSublayer(int sock, uint32_t command, char *buf, ssize_t size){	extern UdpData udt;	socklen_t len;	SI addr;	char path[MAX_PATHBUF];	uint32_t packetno;	Pal *pal;	int fd;	len = sizeof(addr);	getpeername(sock, (SA *) & addr, &len);	if (!(pal = (Pal *) udt.Ipv4GetPal(addr.sin_addr.s_addr)))		return;	packetno = iptux_get_dec_number(buf, 1);	switch (GET_OPT(command)) {	case IPTUX_ADPICOPT:		snprintf(path, MAX_PATHBUF, "%s/.iptux/%x.ad", getenv("HOME"),			 		  pal->ipv4);		break;	case IPTUX_MSGPICOPT:		snprintf(path, MAX_PATHBUF, "%s/.iptux/%x-%x.pi", getenv("HOME"),					  pal->ipv4, packetno);		break;	default:		snprintf(path, MAX_PATHBUF, "%s/.iptux/%x-%x.un", getenv("HOME"),					  pal->ipv4, packetno);		break;	}	if ((fd = Open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644)) == -1)		return;	RecvSublayerData(sock, fd, buf, size);	close(fd);	udt.SublayerEntry(pal, command, path);}void TcpData::RecvSublayerData(int sock, int fd, char *buf, ssize_t size){	size_t len;	len = strlen(buf) + 1;	if (size != len)		Write(fd, buf + len, size - len);	do {		size = Read(sock, buf, MAX_SOCKBUF);		if (size == 0 || size == -1)			break;		size = Write(fd, buf, size);		if (size == -1)			break;	} while (1);}

⌨️ 快捷键说明

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