void AnscStr2Ip4Addr ( PUCHAR pStr, PUCHAR pIp4Addr ) { if (pStr && pIp4Addr) { /* we don't valid the format of string format IP4 address */ *(PULONG)pIp4Addr = _ansc_inet_addr(pStr); } }
/********************************************************************** prototype: BOOL DslhVarroIsValidIpAddRangeList ( PCHAR pAddRangeList ); description: This function is called check if it's a valid IpAddress range List; argument: PCHAR pAddList The IpAddress List string seperated by ','; return: TRUE or FALSE **********************************************************************/ BOOL DslhVarroIsValidIpAddRangeList ( PCHAR pAddRangeList ) { PANSC_TOKEN_CHAIN pAddrRangeTokenChain = (PANSC_TOKEN_CHAIN )NULL; PANSC_TOKEN_CHAIN pAddrTokenChain = (PANSC_TOKEN_CHAIN )NULL; PANSC_STRING_TOKEN pAddrStringToken = (PANSC_STRING_TOKEN )NULL; PANSC_STRING_TOKEN pAddrStringToken1 = (PANSC_STRING_TOKEN )NULL; PANSC_STRING_TOKEN pAddrStringToken2 = (PANSC_STRING_TOKEN )NULL; BOOL bIsValid = TRUE; ULONG i = 0; if( !pAddRangeList || AnscSizeOfString(pAddRangeList) == 0) { return bIsValid; } if ( DslhVarroDelSpaceInCommaSeparator((PCHAR)pAddRangeList) ) { if ( (AnscSizeOfString(pAddRangeList) != 0) && (pAddrRangeTokenChain = AnscTcAllocate( pAddRangeList, "," )) ) { while ( pAddrStringToken = AnscTcUnlinkToken(pAddrRangeTokenChain) ) { if ( pAddrTokenChain = AnscTcAllocate(pAddrStringToken->Name, "-") ) { pAddrStringToken1 = AnscTcUnlinkToken(pAddrTokenChain); if( ! AnscIsValidIpString((PCHAR)pAddrStringToken1->Name)) { bIsValid = FALSE; goto EXIT2; } pAddrStringToken2 = AnscTcUnlinkToken(pAddrTokenChain); if( !pAddrStringToken2 || ! AnscIsValidIpString((PCHAR)pAddrStringToken2->Name)) { bIsValid = FALSE; goto EXIT3; } if ( _ansc_inet_addr(pAddrStringToken1->Name) > _ansc_inet_addr(pAddrStringToken2->Name) ) { bIsValid = FALSE; goto EXIT3; } AnscFreeMemory(pAddrStringToken2); AnscFreeMemory(pAddrStringToken1); AnscFreeMemory(pAddrStringToken); AnscTcFree((ANSC_HANDLE)pAddrTokenChain); } else { bIsValid = FALSE; goto EXIT1; } } goto EXIT; } else { return bIsValid = FALSE; } } else { return bIsValid = FALSE; } EXIT3: if ( pAddrStringToken2 ) { AnscFreeMemory(pAddrStringToken2); } EXIT2: if ( pAddrStringToken1 ) { AnscFreeMemory(pAddrStringToken1); } if ( pAddrStringToken ) { AnscFreeMemory(pAddrStringToken); } EXIT1: if ( pAddrTokenChain ) { AnscTcFree((ANSC_HANDLE)pAddrTokenChain); } EXIT: if ( pAddrRangeTokenChain ) { AnscTcFree((ANSC_HANDLE)pAddrRangeTokenChain); } return bIsValid; }
ANSC_STATUS CcspCwmpTcpcrhoCreateTcpServers ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCCSP_CWMP_TCPCR_HANDLER_OBJECT pMyObject = (PCCSP_CWMP_TCPCR_HANDLER_OBJECT )hThisObject; PCCSP_CWMP_TCPCR_HANDLER_PROPERTY pProperty = (PCCSP_CWMP_TCPCR_HANDLER_PROPERTY )&pMyObject->Property; PANSC_DAEMON_SERVER_TCP_OBJECT pTcpServer = (PANSC_DAEMON_SERVER_TCP_OBJECT)pMyObject->hTcpServer; char buf[64] = {0}; if ( pProperty->HostPort == 0 && pTcpServer ) { CcspTr069PaTraceDebug(("Port is 0 on current TcpServer: Server will be removed!!!\n")); pTcpServer->Remove((ANSC_HANDLE)pTcpServer); pMyObject->hTcpServer = (ANSC_HANDLE)NULL; } else if ( !pTcpServer && pProperty->HostPort != 0 ) { if ( bIsComcastImage() ) { // If HostAddress value is zero, then bind the outbound interface's ip address if( pProperty->HostAddress.Value == 0) { CcspTr069PaTraceInfo(("%s, HostAddress value is 0\n",__FUNCTION__)); token_t se_token; int se_fd = s_sysevent_connect(&se_token); if (0 > se_fd) { CcspTr069PaTraceError(("%s, sysevent_connect failed!!!\n",__FUNCTION__)); //return ERR_SYSEVENT_CONN; } else { // Get ipv4 address from sysevent if( 0 == sysevent_get(se_fd, se_token, "ipv4_wan_ipaddr", buf, sizeof(buf)) && '\0' != buf[0] ) { CcspTr069PaTraceInfo(("%s, ipv4_wan_ipaddr got from sysevent is: %s\n",__FUNCTION__,buf)); pProperty->HostAddress.Value = _ansc_inet_addr(buf); CcspTr069PaTraceInfo(("%s,pProperty->HostAddress.Value: %lu\n",__FUNCTION__,pProperty->HostAddress.Value)); } else { // If sysevent fails, let TR69 bind on 0.0.0.0 CcspTr069PaTraceError(("%s, sysevent_get failed to get value of ipv4_wan_ipaddr!!!\n",__FUNCTION__)); } } } CcspTr069PaTraceInfo(("%s, Call AnscCreateDaemonServerTcp\n",__FUNCTION__)); } pTcpServer = (PANSC_DAEMON_SERVER_TCP_OBJECT)AnscCreateDaemonServerTcp ( pMyObject->hContainerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)NULL ); if ( !pTcpServer ) { CcspTr069PaTraceError(("Something wrong in AnscCreateDaemonServerTCP.\n")); return ANSC_STATUS_RESOURCES; } else { pMyObject->hTcpServer = (ANSC_HANDLE)pTcpServer; } pTcpServer->SetWorker ( (ANSC_HANDLE)pTcpServer, pMyObject->hDstoWorker, sizeof(ANSC_DSTO_WORKER_OBJECT) ); } CcspTr069PaTraceInfo(("TCP server created successfully.\n")); return ANSC_STATUS_SUCCESS; }