/*++ Copyright (c) 1995 Microsoft Corporation Module Name: routing\ip\rtrmgr\compare.c Abstract: File contains the following functions PortCmp Cmp InetCmp UdpCmp TcpCmp IpNetCmp All these functions behave like strcmp. They return >0 if first argument is greater than the second, <0 if the second is greater than the first and 0 if they are equal These functions should be revised to make them more effecient Revision History: Amritansh Raghav 6/8/95 Created Amritansh Raghav 10/18/95 The functions now return >0,0,<0 instead of +1,0,-1 --*/ #include "allinc.h" #include "winsock2.h" LONG UdpCmp( DWORD dwAddr1, DWORD dwPort1, DWORD dwAddr2, DWORD dwPort2 ) { LONG lResult; if(InetCmp(dwAddr1,dwAddr2,lResult)) { return lResult; } else { return PortCmp(dwPort1,dwPort2,lResult); } } LONG TcpCmp( DWORD dwLocalAddr1, DWORD dwLocalPort1, DWORD dwRemAddr1, DWORD dwRemPort1, DWORD dwLocalAddr2, DWORD dwLocalPort2, DWORD dwRemAddr2, DWORD dwRemPort2 ) { LONG lResult; if(InetCmp(dwLocalAddr1,dwLocalAddr2,lResult) isnot 0) { return lResult; } else { if(PortCmp(dwLocalPort1,dwLocalPort2,lResult) isnot 0) { return lResult; } else { if(InetCmp(dwRemAddr1,dwRemAddr2,lResult) isnot 0) { return lResult; } else { return PortCmp(dwRemPort1,dwRemPort2,lResult); } } } } LONG IpNetCmp( DWORD dwIfIndex1, DWORD dwAddr1, DWORD dwIfIndex2, DWORD dwAddr2 ) { LONG lResult; // // Index is a simple DWORD, not a port // if(dwIfIndex1 != dwIfIndex2) { if(dwIfIndex1 < dwIfIndex2) { return -1; } else { return 1; } } else { return InetCmp(dwAddr1,dwAddr2,lResult); } } LONG IpForwardCmp( DWORD dwIpDest1, DWORD dwProto1, DWORD dwPolicy1, DWORD dwIpNextHop1, DWORD dwIpDest2, DWORD dwProto2, DWORD dwPolicy2, DWORD dwIpNextHop2 ) { LONG lResult; if(InetCmp(dwIpDest1,dwIpDest2,lResult) isnot 0) { return lResult; } else { if(Cmp(dwProto1,dwProto2,lResult) isnot 0) { return lResult; } else { if(Cmp(dwPolicy1,dwPolicy2,lResult) isnot 0) { return lResult; } else { return InetCmp(dwIpNextHop1,dwIpNextHop2,lResult); } } } }