StackConstructModules流程

上传人:黑** 文档编号:52033089 上传时间:2022-02-07 格式:DOCX 页数:51 大小:52.85KB
收藏 版权申诉 举报 下载
StackConstructModules流程_第1页
第1页 / 共51页
StackConstructModules流程_第2页
第2页 / 共51页
StackConstructModules流程_第3页
第3页 / 共51页
资源描述:

《StackConstructModules流程》由会员分享,可在线阅读,更多相关《StackConstructModules流程(51页珍藏版)》请在装配图网上搜索。

1、StackConstructModules(&internalCfgStruct, pStackMgr);遍历所有扩展支持表,根据结果设置是否支持lOOreK sec-agreefor(;iextensionListSize;i+)if (strcmp(pStackMgr-supportedExtensionListi,100rel)=0)blOOrellnString = RV_TRUE;if (strcmp(pStackMgr-supportedExtensionListi,sec-agree)=0)bSecAgreeSupported = RV_TRUE;设置是否支持lOOrelif(b

2、lOOrellnString = RV_TRUE)blOORelSupported = pStackCfg-manualPrack;elseblOORelSupported = RV_FALSE;信令压缩模块构造StackConstructCompartmentModule(pStackCfg, pStackMgr);compartmentMgrCfg.pLogSrc = pStackMgr-pLogSourceArreyRVSIP_COMPARTMENT;compartmentMgrCfg.maxNumOfCompartments = pStackCfg-maxCompartments;co

3、mpartmentMgrCfg.pLogMgr= pStackMgr-pLogMgr;compartmentMgrCfg.pSeed= &(pStackMgr-seed);信令压缩管理对象构造SipCompartmentMgrConstruct(&compartmentMgrCfg,(void*)pStackMgr,&pStackMgr-hCompartmentMgr);CompartmentMgrConstruct(cfg/hStack/phCompartmentMgr);分配一个管理对象RvMemoryAlloc(NULL/sizeof(CompartmentMgr),cfg-pLogMg

4、r/ &pMgr)初始化参数pMgr-hStack= hStack;pMgr-pLogSrc= cfg-pLogSrc;pMgr-pLogMgr= cfg-pLogMgr;pMgr-maxNumOfCompartments = cfg-maxNumOfCompartments;pMgr-pSeed= cfg-pSeed;RvMutexConstruct(cfg-pLogMgrz&(pMgr-lock);构造对象锁构造信令压缩内存池pMgr-hCompartmentPool = RPOOL_Construct(RVSIP_COMPARTMENT_MAX_URN_LENGTH,cfgmaxNumO

5、fCompartments, (RV_LOG_Handle)pMgr-pLogMgrARV_TRUE, Compartment Pool);构造信令压缩列表pMgr-hCompartmentListpTransportMgr-hConnList,(RLIST_ITEM_HANDLE)pConn);复位列表引用计数RLIST_ResetMaxllsageResourcesStatus(pTransportMgr-hConnPool);numOfUserElements = pTransportMgr-maxConnections;设置HASH表大小,基本为用户设置值的2倍pTransportMg

6、r-connHashSize =HASH_DEFAULT_TABLE_SIZE(numOfUserElements);构造连接HASH表pTransportMgr-hConnHash = HASH_Construct(HASH_DEFAULT_TABLE_SIZE(numOfUserElements)/numOfUserElements,ConnectionHashFunction,sizeof(TransportConnection*),sizeof(TransportConnectionHashKey),pTransportMgr-pLogMgr;Transport Connection

7、Hash);构造连接拥有者HASH表pTransportMgr-connOwnersHashSize=HASH_DEFAULT_TABLE_SIZE(pTransportMgr-maxConnOwners*2);pTransportMgr-hConnOwnersHash = HASH_Construct(HASH_DEFAULT_TABLE_SIZE(pTransportMgr-maxConnOwners*2),pTransportMgr-maxConnOwners*2zOwnersHashFunction, sizeoTransportConnectionOwnerlnfo*),sizeof

8、(ConnectionOwnerHashKey), pTransportMgr-pLogMgcConnection Owners Hash)本地地址列表构造ConstructLocalAddressListsfpTransportMgGpTransportCfg);设置需要凡个列表,及每个列表成员数pTransportMgr-numOfUdpAddresses=l+pTransportCfg-numOfExtralldpAddresses;pTransportMgr-numOfTcpAddresses =1 + pTransportCfg-numOfExtraTcpAddresses;numO

9、fLocalAddrLists = 2;pTransportMgr-maxNumOfLocalAddresses =pTransportCfg-maxNumOfLocalAddresses;构造本地地址池pTransportMgr-hLocalAddrPool = RLIST_PoolListConstruct(pTransportMgr-maxNumOfLocalAddresses,numOfLocalAddrLists,sizeof(TransportMgrLocalAddr),pTransportMgr-pLogMgr,LocalAddressesPool);从本地地址池中获取第一个地址

10、对象RLIST_PoolGetFirstElem(pTransportMgr-hLocalAddrPool, &pLocalAddr);遍历本地地址池中所有地址对象while (NULL != pLocalAddr)为地址对象构造信号量RvMutexConstruct(pTransportMgr-pLogMgr/&pLocalAddr-hLock);复位地址对象参数pLocalAddr-pMgr = pTransportMgr;pLocalAddr-bVacant = RV_TRUE;p Loca I Ad d r-st r Loca I Ad d ress 0 = 0;pLocalAddr-

11、hConnListening = 0;获取下一个地址对象RLIST_PoolGetNextElem(pTransportMgr-hLocalAddrPool,(RLIST_ITEM_HANDLE)pLocalAddr,(RLIST_ITEM_HANDLE*)&pLocalAddr);使用本地地址池构造UDP地址列表pTransportMgr-hLocalUdpAddrList =RLIST_ListConstruct(pTransportMgr-hLocalAddrPool);使用本地地址池构造TCP地址列表pTransportMgr-hLocalTcpAddrList = RLIST_Lis

12、tConstruct(pTransportMgr-hLocalAddrPool);当前设置连接的填充比为0,不构造非拥有者列表if(0 connectionCapacityPercent)pTransportMgr-hConnectedNoOwnerConnList = NULL;pTransportMgr-hConnectedNoOwnerConnPool = NULL;初始化本地地址列表InitializeLocalAddressLists(pTransportMgGpTransportCfg);将用户设置的本地UDP地址转成RV格式,放在临时变量addrDetails中lnitStruc

13、tTransportAddr(RVSIP_TRANSPORT_UDP,RVSIP_TRANSPORT_ADDRESS_TYPE_UNDEFINED,pTransportCfg-udpAddresszpTransportCfg-udpPort, &addrDetails);将本地地址加入到本地地址列表中TransportMgrAddLocalAddressToList(pTransportMgr,&addrDetailszRVSIP_LAST_ELEMENT NULL, RV_TRUE , NULL,&pTransportCfg-udpPort);=pAddressDetails-eTransp

14、ortType;=pTransportMgr;=RV_FALSE;=NULL_PAGE;=UNDEFINED;localAddr.pSocket = NULL;localAddr.addr.eTransportlocalAddr.pMgrlocalAddr.bVacantlocalAddr.hSentByPagelocalAddr.sentByPortlocalAddr.sentByHostOffset = UNDEFINED;localAddr.eSockAddrType =RVSIP_TRANSPORT_ADDRESS_TYPE_UNDEFINED;localAddr.pSecOwner

15、= NULL;localAddr.secOwnerCounter = 0;我们当前一般用UDP,使用UDP列表switch (pAddressDetails-eTransportType)case RVSIP_TRANSPORT_UDP:hLocalAddrList = pTransportMgr-hLocalUdpAddrList;端口校正if (pAddressDetails-port = 0 & RV_TRUE=bConvertZeroPort)if (RVSIP_TRANSPORT_TLS !=pAddressDetails-eTransportType)pAddressDetails

16、-port = RVSIP_TRANSPORT_DEFAULT_PORT;elsepAddressDetails-port = RVSIP_TRANSPORT_DEFAULT_TLS_PORT;将本地地址存入临时变量localAddr中if (SipTransportlSlpV4(pAddressDetails-strlP) = RV_TRUE)RvAddressConstruct(RV_ADDRESS_TYPE_IPV4,&localAddr.addr.addr);RvAddressSetString(pAddressDetails-strlP,&localAddr.addr.addr);R

17、vAddressSetlpPortf&localAddr.addr.addcpAddressDetails-port);pAddressDetails-eAddrType = RVSIP_TRANSPORT_ADDRESS_TYPE_IP;将IP地址转换成x.x.x.x格式的字符串存储到当前临时地址变量的 localAddr.strLocalAddress 中。TransportMgrLocalAddressGetlPandPortStrings(pTransportMgr,&localAddr.addr.addr,RV_TRUE,RV_FALSE,localAddr.strLocalAddr

18、ess, &localPortDummy);TransportMgrLocalAddrListLock(pTransportMgr); /加锁从本地地址池中获取尾部一个可用的列表条目switch (eLocationlnList)case RVSIP_LAST_ELEMENT:RLIST_lnsertTail( pTransportMgr-hLocalAddrPool,hLocalAddrList, &listElem);将上面设置好的本地地址填充到己经分配的列表条目中pLocalAddr = (TransportMgrLocalAddr *)listElem;memcpy(&tempLock

19、,&pLocalAddr-hLock,sizeof(tempLock);memcpy(pLocalAddr,&localAddr,sizeof(localAddr);memcpy(&pLocalAddr-hLock,&tempLock,sizeof(tempLock);pLocalAddr-bVacant = RV_FALSE;更新传输层管理对象的本地地址数LocalAddressCounterUpdate(pTransportMgr,、pAddressDetails-eAddrType, pAddressDetails-eTransportType, 1);TransportMgrLocal

20、AddrListUnlock(pTransportMgr); /解锁这里附加的地址个数为0,暂不关心for(i=0; inumOfExtraUdpAddresses; i+)下面代码是将本地设置的TCP地址加入列表中,暂不关心开始本地地址监听OpenLocalAddresses(pTransportMgr, pTransportCfg);打开本地UDP地址监听OpenLocalAddressesFromList(pTransportMgr,pTransportMgr-hLocalUdpAddrList);TransportMgrLocalAddrListLock(pTransportMgr);

21、/ 加锁从列表中获取第1个地址对象RLIST_GetHead(pTransportMgr-hLocalAddrPool, hLocalAddrList,&hListElem);while (NULL != hListElem)遍历列表所有地址对象pLocalAddr = (TransportMgrLocalAddr *)hListElem;/UDP地址监听LocalAddressOpen(pTransportMgrz pLocalAddr, NULL);转换地址类型为传输层指定枚举值pAddress-eSockAddrType=TransportMgrConvertCoreAddrTypeTo

22、SipAddrType(RvAddressGetType(&pAddress-addr.addr);建了 UDP的SOCKET对象,并创建了 FD对象之后将FD对象加入到Select引擎对象中。当前FD对象设置的数据处理回调函数为/ Transport UdpEventCallbackswitch (pAddress-addr.eTransport)case RVSIP_TRANSPORT_UDP:TransportUDPOpen(pTransportMgr, pAddress);如果用户没有设置本地监听端口,则系统会自动生成一个随机端口,这里取出系统生成的随机端口,并设置到本地地址列表的地址

23、项中。boundPort = RvAddressGetlpPort(&pAddress-addr.addr);if (0 = boundPort)RvSocketGetLocalAddress(&pAddress-ccSocket,pTransportMgr-pLogMgr, &ccLocalAddress);boundPort = RvAddressGetlpPort(&ccLocalAddress);RvAddressSetlpPort(&pAddress-addr.addr,boundPort);取列表下一个地址对象RUST_GetNext(pTransportMgr-hLocalAdd

24、rPool,hLocalAddrList, hListElem, &hListElem);TransportMgrLocalAddrListUnlock(pTransportMgr);/ 解锁打开本地TCP地址监听OpenLocalAddressesFromListfpTransportMgr,pTransportMgr-hLocalTcpAddrList);初始化时,并没有外部代理相关配置,所以这里的值都为空值。我们当前外部代理是运行时动态设置的。/ pTransportMgr-outboundAddr =/ pTransportMgr-outboundAddr.port = RVSIP_T

25、RANSPORT_DEFAULT_PORT/ pTransportMgr-outboundAddr.transport =pTransportCfg-eOutboundProxyTransport;/ pTransportMgr-outboundAddr.strHostName =lnitializeOutboundAddress(pTransportMgr,pTransportCfg);传输层队列处理相关初始化,包括select引擎的定时器事件处理I口I调MultiThreadedEnvironmentConstruct(pTransportMgr,pTransportCfg);参数复位pT

26、ransportMgr-hProcessingQueue = NULL;pTransportMgr-processingThreads = NULL;pTransportMgr-hMessageMemoryBuffPool = NULL;pTransportMgr-numberOfProcessingThreads =pTransportCfg-numberOfProcessingThreads; /QpTransportMgr-processingTaskPriority = /pTransportCfg-processingTaskPriority;构造处理队列信号量RvMutexCons

27、truct(NULL, &pTransportMgr-processingQueueLock);构造处理队列,这里线程类型传入为单线程pTransportMgr-bMultiThreadEnvironmentConstructed = RV_TRUE;PQUEUE_Construct(pTransportCfg-processingQueueSize,pTransportMgr-pLogMgr, &pTransportMgr-processingQueueLockzsizeof(TransportProcessingQueueEvent),RV_FALSE, pTransportMgr-pSe

28、lect, StackProcessingQueue,&(pTransportMgr-hProcessingQueue);将之前三个抢占事件回调设置到处理队列中/ processing_queue-preemptionDispatchEvents =preemptionDispatchEvents;/ processing_queue-preemptionReadBuffersReady =preemptionReadBuffersReady;/ processing_queue-preemptionCellAvailable =preemptionCellAvailable;PQUEUE_S

29、etPreemptionLocation(pTransportMgr-hProcessingQueue/pTransportMgr-preemptionDispatchEvents,pTransportMgr-preemptionReadBuffersReady,pTransportMgr-preemptionCellAvailable);给select引擎的设置定时器事件机制的超时处理函数/ selectEngine-timeOutCb = MultiThreadedTimerEventHandler;RvSelectSetTimeoutlnfo(pTransportMgr-pSelect,

30、MultiThreadedTimerEventHandler, (void *)pTransportMgr);构造消息接收内存池pTransportMgr-hMessageMemoryBuffPool =RA_Construct(pTransportCfg-maxBufSize,pTransportCfg-numOfReadBuffers,NULL,pTransportCfg-pLogMgr,Read buffers pool);标记没有足够的内存池为否pTransportMgr-noEnoughBufferslnPool = RV_FALSE;构造传输层队列处理线程,当前不使用多线程,所以这

31、段代码不执行。返回传输层管理对象句柄*hTransportMgr = (RvSipTransportMgrHandle)pTransportMgr;关联传输层对象到消息管理对象中SipMsgMgrSetTransportHandle(pStackMgr-hMsgMgr, pStackMgr-hTransport);pMsgMgr-hTransportMgr = hTransportMgr;pStackCfg-sendReceiveBufferSize=transportCfg.maxBufSize;pStackCfg-maxConnections=transportCfg.maxConnect

32、ions;strcpy(pStackCfg-localTcpAddress, transportCfg.tcpAddress);pStackCfg-localTcpPort=transportCfg.tcpPort;pStackCfg-localUdpPort=tra nsportCfg. ud pPort;如果pStackCfg-localUdpAddress为无效IP地址,则将本地地址调到/pStackCfg-localUdpAddress 中ConvertZeroAddrToRealAddr(pStackCfg, pStackMgr);/DNS解析模块StackConstructReso

33、lverModule(pStackCfg,pStackMgr);=pStackMgr-hElementPool;=pStackMgr-hGeneralPool;=pStackMgr-hMessagePool;=pStackMgr-hTransport;=pStackCfg-maxDnsBuffLen;=pStackCfg-maxDnsDomains;cfg.hElementPoolcfg.hGeneralPoolcfg.hMessagePoolcfg.hTransportMgrcfg.maxDnsBuffLencfg.maxDnsDomainscfg.maxDnsServerscfg.maxN

34、umOfRsIv=pStackCfg-maxDnsServers;=pStackCfg-maxTransmitters;构造解析器管理对象/ pStackCfg-numOfDnsServers 值取决于用户配置了 几个 DNS 到 STACK/ pStackCfg-numOfDnsDomains 为 0SipResolverMgrConstruct(&cfg, (void*)pStackMgr,(0 = pStackCfg-numOfDnsServers) ? RV_TRUE : RV_FALSE,(0 = pStackCfg-numOfDnsDomains) ? RV_TRUE : RV_F

35、ALSE, &pStackMgr-hRslvMgr);ResolverMgrConstruct(pCfg,pStack/bTryServers,bTryDomains,(ResolverMgr*)phRslvMgr);资源分配RvMemoryAlloc(NULL, sizeof(ResolverMgr), pCfg-pLogMgr,(void*)&pRslvMgr);pRslvMgr-pLogMgrpRslvMgr-pLogSrcpRslvMgr-hTransportMgrpRslvMgr-seedpRslvMgr-maxNumOfRslvpRslvMgr-hGeneralPoolpRslvM

36、gr-hMessagePoolpRslvMgr-hElementPoolpRslvMgr-pStack=pCfg-pLogMgr;=pCfg-pLogSrc;=pCfg-hTransportMgr;=pCfg-seed;=pCfg-maxNumOfRslv;=pCfg-hGeneralPool;=pCfg-hMessagePool;=pCfg-hElementPool;=pStack; /这个是 pStackMgrpRslvMgr-strDialPlanSuffix = pCfg-strDialPlanSuffix /pRslvMgr-dialPlanLen = (Rvlnt)strlen(s

37、trDialString)+l;RvMutexConstruct(pRslvMgr-pLogMgr, pRslvMgr-pMutex);从线路私有变量中获取select引擎对象RvSelectGetThreadEngine(pRslvMgr-pLogMgr,&pSelect);在上电时创建一个地址解析对象,其DNS应答消息的回调函数为/ ResolverDNSNewRecordCBRvAresConstructN (pSelect, ResolverDNSNewRecordCB,pCfg-maxDnsServers, pCfg-maxDnsDomains, pCfg-maxDnsBuffLen

38、,pRslvMgr-pLogMgr, pRslvMgr-pDnsEngine);dnsEngine-userQueryld = 2;dnsEngine-selectEngine = selectEngine;dnsEngine-newRecordCB = newRecordCB;将定时器事件队列及回调处理,设置到DSN引擎中RvSelectGetTimeoutlnfofselectEngine, NULL,&dnsEngine-timerQueue);地址解析缓冲参数初始化,就是memsetRvAresCacheParamslnit(&cacheParams);缓冲控制块构造RvAresCac

39、heCltConstruct(&dnsEngine-cache, selectEngine,&cacheParams, logMgr);RvLockGet(&gsGloballnstanceLock, logMgr);if(gsGlobalCache = 0)/构造一个缓冲RvAresCacheDNew(&gsGlobalCache, seli, self, params);资源分配RvMemoryAllocfO, totalsize, clt-logMgr, (void *)pSelf);将select引擎的定时器队列引向tqueueRvSelectGetTimeoutlnfofseli,

40、0, &tqueue);缓冲构造RvAresCacheDConstruct(*pSelf, tqueue, clt, params);self-inCallbackQid = 0;self-inCallbackTid = 0;self-userQid = 1;self-tquee = tqueue;self-nPostponed = 0;self-maxPostponed = 0;self-needRaiseEvent = RV_TRUE;构造缓冲内存相关cache = &self-cache;RvAresCacheConstruct(cache, logSrc, params);从/etc/

41、hosts文件中读取地址映射,构造EhdRvEHDNew(&self-ehd, logMgr);self-sentResults = 0;self-acceptedResults = 0;self-firstClt = 0;self-activeQuery = 0;self-lastActive = 0;将缓冲对象腻给dnsEngine-cache.cached中self-cached = gsGlobalCache;将缓冲对象关联控制对象/dnsEngine-cache.next = gsGlobalCache.firstCIt /Q/ gsGlobalCache.firstCIt = dn

42、sEngine-cacheRvAresCacheDAddClt(gsGlobalCachez self);RvLockRelease(&gsGloballnstanceLockz logMgr);地址解析对象构造ares_construct(dnsEngine, maxServers, maxDomains, tcpBuffLen,&options, optmask);channel-flags = -1;channel-timeout = Rvlnt64Const(-l,0,l);channel-tries = -1;channel-ndots = -1;channel-udp_port =

43、 (RvUintl6)-l;channel-tcp_port = (RvUintl6)-l;channel-max_servers = 0;channel-serversGeneration = 0;channel-max_domains = 0;channel-ehdOrder = RV_EHD_SEARCH_HOSTS_FIRST;RvLockConstruct(channel-logMgr, &channel-lock);channel-max_servers = max_servers; /default 5channel-skipServerWords = (max_servers

44、/ INTBITS) +(max_servers % INTBITS != 0);channel-nservers = 0;for (i=0; i serversi;server-tcp_socket.fd.fd = RV_INVALID_SOCKET;server-udp_socket.fd.fd = RV_I N VALI D_SOCKET;channel-tcp_bufflen = tcp_bufflen;channel-max_domains= max_domains; /default 5channel-domainsGeneration = 0;channel-ndomains=

45、0;channel-longest_domain_i = -1;/dnsEngine-ehdOrder = RV_EHD_SEARCH_HOSTS_FIRST;RvAresConfigureEhd(channel);当前optmask为0,所以该函数没做操作CreateCompartmentList(pMgr, cfg-maxNumOfCompartments);构造一个信令压缩 HASH 表 pMgr-hCompartmentHashCreateCompartmentHash(pMgr, cfg-maxNumOfCompartments);返回信令压缩对象*phCompartmentMgr

46、= (RvSipCompartmentMgrHandle)pMgr;复位压缩列表池引用计数复位SipCompartmentMgrResetMaxllsageResourcesStatus(pStackMgr-hCompartmentMgr);RLIST_ResetMaxUsageResourcesStatus(pMgr-hCompartmentListPool);解析器模块构造StackConstructParserModule(pStackMgr);初始化参数parserMgrCfg.hGeneralPool = pStackMgr-hGeneralPool;parserMgrCfg.mod

47、uleLogld = pStackMgr-pLogSourceArreyRVSIP_PARSER;parserMgrCfg.pLogMgr = pStackMgr-pLogMgr;SipParserMgrConstruct(&parserMgrCfg,&(pStackMgr-hParserMgr);分配一个管理对象RvMemoryAllocfNULL, sizeof(ParserMgr), pCfg-pLogMgr, (void*)&pMgr)pMgr-pLogMgr = pCfg-pLogMgr;pMgr-pLogSrc = pCfg-moduleLogld;pMgr-pool = pCfg

48、-hGeneralPool;*phParserMgr = (SipParserMgrHandle)pMgr; 返回解析器对象消息模块构造StackConstructMessageModule(pStackMgr);初始化参数=pStackMgr-pLogMgr;=pStackMgr-pLogSourceArreyRVSIP_MESSAGE;=&(pStackMgr-seed);msgMgrCfg.pLogMgrmsgMgrCfg.logldmsgMgrCfg.seedmsgMgrCfg.hParserMgr = pStackMgr-hParserMgr;SipMessageMgrConstru

49、ctf&msgMgrCfg,&(pStackMgr-hMsgMgr);分配一个消息管理对象RvMemoryAllocfNULL, sizeof(MsgMgr), msgMgrCfg-pLogMgr, &pMsgMgr);pMsgMgr-pLogMgr = msgMgrCfg-pLogMgr;pMsgMgr-pLogSrc = msgMgrCfg-logld;pMsgMgr-seed = msgMgrCfg-seed;ares_set_options(channel, options, optmask);设置默认值/channel-flags = 0;/channel-timeout = DEF

50、AULT_TIMEOUT;/channel-tries = DEFAULT_TRIES;/channel-ndots = 1;/channel-udp_port = NAMESERVER_PORT;/channel-tcp_port = NAMESERVER_PORT;init_by_defaults(channel);生成一个随机数,设置到nextjd RvClockGet(NULL, ¤tTime);RvRandomGeneratorConstruct(&randGenObj,RvTimeGetNsecsf¤tTime);RvRandomGeneratorGetln

51、Range(&randGenObj, Oxffff, &randNum);channel-next_id = (unsigned short)randNum;channel-queries = 0;channel-lastQuery = 0;RvCondConstruct(&channel-inCallbackCond, channel-logMgr);channel-inCallbackQid = 0;channel-inCallbackTid = 0;channel-nCompares = Rvlnt64ShortConst(0);channel-nSearches = Rvlnt64Sh

52、ortConst(0);channel-nAvgCompares = 0;channel-nMaxCompares = 0;构造随机数生成器RvRandomGeneratorConstruct(&channel-rnd, 17300);当前值应该为RV_DNS_SERVERSdnscfg | = (RV_TRUE = bTryServers) ? RV_DNS_SERVERS :(RvDnsConfigType)O;当前值为0,没有配置域名dnscfg |= (RV_TRUE = bTryDomains) ? RV_DNS_SUFFIXES :(RvDnsConfigType)O;/ARES

53、配置,当前 dnscfg 为 RV_DNS_SERVERSRvAresConfigure(pRslvMgr-pDnsEngine,dnscfg);dnsEngine-serversGeneration+;/ configType 为 RV_DNS_SERVERS从/etc/resolv.conf文件读取DNS服务器地址并设置到DNS引擎对象中/channel-serversi.addr = *addr;/channel-serversi.udp_socket.fd.fd = (RvSocket)-l;/channel-serversi.tcp_socket.fd.fd = (RvSocket)

54、-l;/channel-nservers+;ares_configure(dnsEngine, configType);ResolversListConstruct(pRslvMgr);列表池构造pRslvMgr-hRslvListPool =RLIST_PoolListConstruct(pRslvMgr-maxNumOfRslv, 1,sizeof(Resolver), pRslvMgr-pLogMgr z Resolvers List);列表构造pRslvMgr-hRslvList = RLIST_ListConstruct(pRslvMgr-hRslvListPool);循环为每个列表

55、项构造rsIvTripleLock锁将用户设置的DNS地址追加到channel-servers中SipResolverMgrSetDnsServers(pStackMgr-hRslvMgr,pStackCfg-pDnsServers,pStackCfg-numOfDnsServers);/IMS的安全模块,暂不关心StackConstructSecurityModulefpStackCfg, pStackMgr);鉴权模块SipAuthenticatorConstruct(pStackMgr-hMsgMgr, pStackMgr-pLogMgr,pStackMgr-pLogSourceArre

56、yRVSIP_AUTHENTICATOR, pStackMgr-hGeneralPool,pStackMgr-hElementPoolz pStackMgr, &(pStackMgr-hAuthentication);authlnfo-pLogMgr = pLogMgr;authlnfo-pLogSrc = regld;authlnfo-hGlobalHeaderPage = NULL_PAGE;authlnfo-hGeneralPool = hGeneralPool;authlnfo-hElementPool = hElementPool;authlnfo-hMsgMgr = hMsgMgr

57、;authlnfo-hStack = hStack;设置这些鉴权回调使用默认机制InitiateActOnCallbackStructure(authlnfo);pAuthenticator-actOnCallback.bAuthorizationReadyAuthentication =RV_TRUE;pAuthenticator-actOnCallback.bGetSharedSecretAuthentication=RV_TRUE;pAuthenticator-actOnCallback.bMD5Authentication=RV_TRUE;pAuthenticator-actOnCal

58、lback.bMD5AuthenticationExRV_TRUE;pAuthenticator-actOnCallback.bMD5EntityBodyAuthentication =RV_TRUE;pAuthenticator-actOnCallback.bNonceCountUsageAuthentication=RV_TRUE;pAuthenticator-actOnCallback.bSharedSecretAuthentication=RV_TRUE;pAuthenticator-actOnCallback.bUnsupportedChallengeAuthentication =

59、RV_TRUE;RvMutexConstruct(authlnfo-pLogMgrz &authlnfo-lock); 互斥量构造传送模块构造StackConstructTrxModule(pStackCfg,pStackMgr);当前为TRUE,用于表示TCP连接是否一直延续trxMgrCfg.blsPersistent =(pStackCfg-ePersistencyLevel !=RVSIP_TRANSPORT_PERSISTENCY_LEVEL_UNDEFINED)?RV_TRUE:RV_FALSE;根据用户是否设置了 rport.enabletrxMgrCfg.bUseRportPa

60、ramlnVia = pStackCfg-bUseRportParamlnVia;=pStackMgr-hTransport;传输管理对象=pStackMgr-hSecMgr;/IMS 安全管理对象=pStackCfg-maxTransmitters;=pStackMgr-pLogMgr;=pStackMgr-pLogSourceArreyRVSIP_TRANSMITTER;=&pStackMgr-seed;=pStackMgr-hGeneralPool;=pStackMgr-hMessagePool;=pStackMgr-hElementPool;=pStackCfg-messagePoolNumofPages;=pStackMgr-hRslvMgr; /DNS 管理对象trxMgrCfg.hCompartmentMgr = pStackMgr-hCompartmentMgr; 信令压缩trxMgrCfg.hTransportMgrtrxMgrCfg.hSecMgrtrxMgrCfg.maxNumOfTrxtrxMgrCfg.pLogM

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!