ooports.c
来自「一个非常美妙的proxy。功能强大。基于sip的协议。如果还要的话」· C语言 代码 · 共 107 行
C
107 行
/* * Copyright (C) 2004-2005 by Objective Systems, Inc. * * This software is furnished under an open source license and may be * used and copied only in accordance with the terms of this license. * The text of the license may generally be found in the root * directory of this installation in the COPYING file. It * can also be viewed online at the following URL: * * http://www.obj-sys.com/open/license.html * * Any redistributions of this file including modified versions must * maintain this copyright notice. * *****************************************************************************/#include "ooports.h"#include "ooh323ep.h"#include "ootrace.h"/** Global endpoint structure */extern OOH323EndPoint gH323ep;/* Get the next port of type TCP/UDP/RTP */int ooGetNextPort (OOH323PortType type){ if(type==OOTCP) { if(gH323ep.tcpPorts.current <= gH323ep.tcpPorts.max) return gH323ep.tcpPorts.current++; else { gH323ep.tcpPorts.current = gH323ep.tcpPorts.start; return gH323ep.tcpPorts.current++; } } if(type==OOUDP) { if(gH323ep.udpPorts.current <= gH323ep.udpPorts.max) return gH323ep.udpPorts.current++; else { gH323ep.udpPorts.current = gH323ep.udpPorts.start; return gH323ep.udpPorts.current++; } } if(type==OORTP) { if(gH323ep.rtpPorts.current <= gH323ep.rtpPorts.max) return gH323ep.rtpPorts.current++; else { gH323ep.rtpPorts.current = gH323ep.rtpPorts.start; return gH323ep.rtpPorts.current++; } } return OO_FAILED;}int ooBindPort (OOH323PortType type, OOSOCKET socket, char *ip){ int initialPort, bindPort, ret; OOIPADDR ipAddrs; initialPort = ooGetNextPort (type); bindPort = initialPort; ret= ooSocketStrToAddr (ip, &ipAddrs); while(1) { if((ret=ooSocketBind(socket, ipAddrs, bindPort))==0) { return bindPort; } else { bindPort = ooGetNextPort (type); if (bindPort == initialPort) return OO_FAILED; } }}#ifdef _WIN32 int ooBindOSAllocatedPort(OOSOCKET socket, char *ip){ OOIPADDR ipAddrs; int size, ret; struct sockaddr_in name; size = sizeof(struct sockaddr_in); ret= ooSocketStrToAddr (ip, &ipAddrs); if((ret=ooSocketBind(socket, ipAddrs, 0))==ASN_OK) { ret = ooSocketGetSockName(socket, &name, &size); if(ret == ASN_OK) { return name.sin_port; } } return OO_FAILED;}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?