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

📄 minissdpc.c

📁 很小的linux下的upnp客户端代码
💻 C
字号:
/* $Id: minissdpc.c,v 1.3 2007/09/01 23:34:12 nanard Exp $ *//* Project : miniupnp * Author : Thomas BERNARD * copyright (c) 2005-2007 Thomas Bernard * This software is subjet to the conditions detailed in the * provided LICENCE file. *//*#include <syslog.h>*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#include "minissdpc.h"#include "miniupnpc.h"struct UPNPDev *getDevicesFromMiniSSDPD(const char * devtype, const char * socketpath){	struct UPNPDev * tmp;	struct UPNPDev * devlist = NULL;	unsigned char buffer[512];	ssize_t n;	unsigned char * p;	unsigned int i;	unsigned int urlsize, stsize;	int s;	struct sockaddr_un addr;	s = socket(AF_UNIX, SOCK_STREAM, 0);	if(s < 0)	{		/*syslog(LOG_ERR, "socket(unix): %m");*/		perror("socket(unix)");		return NULL;	}	addr.sun_family = AF_UNIX;	strncpy(addr.sun_path, socketpath, sizeof(addr.sun_path));	if(connect(s, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) < 0)	{		/*syslog(LOG_WARNING, "connect(\"%s\"): %m", socketpath);*/		close(s);		return NULL;	}	stsize = strlen(devtype);	buffer[0] = 1;	buffer[1] = stsize;	memcpy(buffer + 2, devtype, (int)buffer[1]);	if(write(s, buffer, (int)buffer[1] + 2) < 0)	{		/*syslog(LOG_ERR, "write(): %m");*/		perror("write()");		close(s);		return NULL;	}	n = read(s, buffer, sizeof(buffer));	if(n<=0)	{		close(s);		return NULL;	}	p = buffer + 1;	for(i = 0; i < buffer[0]; i++)	{		urlsize = *(p++);		stsize = p[urlsize];		tmp = (struct UPNPDev *)malloc(sizeof(struct UPNPDev)+urlsize+stsize);		tmp->pNext = devlist;		tmp->descURL = tmp->buffer;		tmp->st = tmp->buffer + 1 + urlsize;		memcpy(tmp->buffer, p, urlsize);		tmp->buffer[urlsize] = '\0';		p += urlsize;		p++;		memcpy(tmp->buffer + urlsize + 1, p, stsize);		tmp->buffer[urlsize+1+stsize] = '\0';		devlist = tmp;	}	close(s);	return devlist;}

⌨️ 快捷键说明

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