Continued changes for client port to Linux.
This commit is contained in:
		| @@ -21,26 +21,26 @@ | ||||
|         } | ||||
|         "Entry" | ||||
|         { | ||||
|         "MsmKey" = "8:_1231718055D14020BF756DCF44D2BF22" | ||||
|         "OwnerKey" = "8:_UNDEFINED" | ||||
|         "MsmSig" = "8:_UNDEFINED" | ||||
|         } | ||||
|         "Entry" | ||||
|         { | ||||
|         "MsmKey" = "8:_1ED6B3F7C91A4BBE875FC4621FC3CD97" | ||||
|         "OwnerKey" = "8:_UNDEFINED" | ||||
|         "MsmSig" = "8:_UNDEFINED" | ||||
|         } | ||||
|         "Entry" | ||||
|         { | ||||
|         "MsmKey" = "8:_2EEDD0C5BE8546CBA62A0852850DB473" | ||||
|         "OwnerKey" = "8:_UNDEFINED" | ||||
|         "MsmKey" = "8:_313DE095D13281AF91A64E3F3D472413" | ||||
|         "OwnerKey" = "8:_F0358243F2B34E40852F2185663C5B71" | ||||
|         "MsmSig" = "8:_UNDEFINED" | ||||
|         } | ||||
|         "Entry" | ||||
|         { | ||||
|         "MsmKey" = "8:_313DE095D13281AF91A64E3F3D472413" | ||||
|         "OwnerKey" = "8:_2EEDD0C5BE8546CBA62A0852850DB473" | ||||
|         "MsmKey" = "8:_35590D5026504A138951C430142FECBA" | ||||
|         "OwnerKey" = "8:_8292EFFD84EF46C6BD2F1F3E20808684" | ||||
|         "MsmSig" = "8:_UNDEFINED" | ||||
|         } | ||||
|         "Entry" | ||||
|         { | ||||
|         "MsmKey" = "8:_3986DA1502244FFBB04A66472E74633B" | ||||
|         "OwnerKey" = "8:_UNDEFINED" | ||||
|         "MsmSig" = "8:_UNDEFINED" | ||||
|         } | ||||
|         "Entry" | ||||
| @@ -64,18 +64,18 @@ | ||||
|         "Entry" | ||||
|         { | ||||
|         "MsmKey" = "8:_92336612AC7D083F97ED302BB7674A2D" | ||||
|         "OwnerKey" = "8:_EE2A593B866F43FD8D97250E1457988A" | ||||
|         "OwnerKey" = "8:_3986DA1502244FFBB04A66472E74633B" | ||||
|         "MsmSig" = "8:_UNDEFINED" | ||||
|         } | ||||
|         "Entry" | ||||
|         { | ||||
|         "MsmKey" = "8:_AFBDE40E9A784962B750ECA4C15ADD85" | ||||
|         "OwnerKey" = "8:_8292EFFD84EF46C6BD2F1F3E20808684" | ||||
|         "MsmKey" = "8:_EDA39B5CAD864AF0821AAFC9783DFF12" | ||||
|         "OwnerKey" = "8:_UNDEFINED" | ||||
|         "MsmSig" = "8:_UNDEFINED" | ||||
|         } | ||||
|         "Entry" | ||||
|         { | ||||
|         "MsmKey" = "8:_EE2A593B866F43FD8D97250E1457988A" | ||||
|         "MsmKey" = "8:_F0358243F2B34E40852F2185663C5B71" | ||||
|         "OwnerKey" = "8:_UNDEFINED" | ||||
|         "MsmSig" = "8:_UNDEFINED" | ||||
|         } | ||||
| @@ -148,26 +148,6 @@ | ||||
|             "IsDependency" = "11:FALSE" | ||||
|             "IsolateTo" = "8:" | ||||
|             } | ||||
|             "{A582A373-4685-4296-BEFE-614B80A702C3}:_1231718055D14020BF756DCF44D2BF22" | ||||
|             { | ||||
|             "SourcePath" = "8:..\\mechanisms\\krb5\\Krb5Authenticate.conf" | ||||
|             "TargetName" = "8:Krb5Authenticate.conf" | ||||
|             "Tag" = "8:" | ||||
|             "Folder" = "8:_DEA051CA331E4FEA83D99711FB584664" | ||||
|             "Condition" = "8:" | ||||
|             "Transitive" = "11:FALSE" | ||||
|             "Vital" = "11:TRUE" | ||||
|             "ReadOnly" = "11:FALSE" | ||||
|             "Hidden" = "11:FALSE" | ||||
|             "System" = "11:FALSE" | ||||
|             "Permanent" = "11:FALSE" | ||||
|             "SharedLegacy" = "11:FALSE" | ||||
|             "PackageAs" = "3:1" | ||||
|             "Register" = "3:1" | ||||
|             "Exclude" = "11:FALSE" | ||||
|             "IsDependency" = "11:FALSE" | ||||
|             "IsolateTo" = "8:" | ||||
|             } | ||||
|             "{A582A373-4685-4296-BEFE-614B80A702C3}:_1ED6B3F7C91A4BBE875FC4621FC3CD97" | ||||
|             { | ||||
|             "SourcePath" = "8:..\\..\\include\\casa_c_authtoken.h" | ||||
| @@ -264,10 +244,30 @@ | ||||
|             "SharedLegacy" = "11:FALSE" | ||||
|             "PackageAs" = "3:1" | ||||
|             "Register" = "3:1" | ||||
|             "Exclude" = "11:FALSE" | ||||
|             "Exclude" = "11:TRUE" | ||||
|             "IsDependency" = "11:TRUE" | ||||
|             "IsolateTo" = "8:" | ||||
|             } | ||||
|             "{A582A373-4685-4296-BEFE-614B80A702C3}:_EDA39B5CAD864AF0821AAFC9783DFF12" | ||||
|             { | ||||
|             "SourcePath" = "8:..\\mechanisms\\krb5\\windows\\Krb5Authenticate.conf" | ||||
|             "TargetName" = "8:Krb5Authenticate.conf" | ||||
|             "Tag" = "8:" | ||||
|             "Folder" = "8:_DEA051CA331E4FEA83D99711FB584664" | ||||
|             "Condition" = "8:" | ||||
|             "Transitive" = "11:FALSE" | ||||
|             "Vital" = "11:TRUE" | ||||
|             "ReadOnly" = "11:FALSE" | ||||
|             "Hidden" = "11:FALSE" | ||||
|             "System" = "11:FALSE" | ||||
|             "Permanent" = "11:FALSE" | ||||
|             "SharedLegacy" = "11:FALSE" | ||||
|             "PackageAs" = "3:1" | ||||
|             "Register" = "3:1" | ||||
|             "Exclude" = "11:FALSE" | ||||
|             "IsDependency" = "11:FALSE" | ||||
|             "IsolateTo" = "8:" | ||||
|             } | ||||
|         } | ||||
|         "FileType" | ||||
|         { | ||||
| @@ -404,7 +404,7 @@ | ||||
|         } | ||||
|         "MergeModule" | ||||
|         { | ||||
|             "{35A69C6E-5BA4-440D-803D-762B59A45393}:_AFBDE40E9A784962B750ECA4C15ADD85" | ||||
|             "{35A69C6E-5BA4-440D-803D-762B59A45393}:_35590D5026504A138951C430142FECBA" | ||||
|             { | ||||
|             "UseDynamicProperties" = "11:FALSE" | ||||
|             "IsDependency" = "11:TRUE" | ||||
| @@ -430,9 +430,9 @@ | ||||
|         } | ||||
|         "ProjectOutput" | ||||
|         { | ||||
|             "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_2EEDD0C5BE8546CBA62A0852850DB473" | ||||
|             "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_3986DA1502244FFBB04A66472E74633B" | ||||
|             { | ||||
|             "SourcePath" = "8:..\\mechanisms\\krb5\\windows\\Release\\krb5mech.dll" | ||||
|             "SourcePath" = "8:..\\mechanisms\\pwd\\windows\\Release\\pwmech.dll" | ||||
|             "TargetName" = "8:" | ||||
|             "Tag" = "8:" | ||||
|             "Folder" = "8:_F5F5F604B81645F8B6463F7A7D6A53AD" | ||||
| @@ -486,9 +486,9 @@ | ||||
|                 { | ||||
|                 } | ||||
|             } | ||||
|             "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_EE2A593B866F43FD8D97250E1457988A" | ||||
|             "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_F0358243F2B34E40852F2185663C5B71" | ||||
|             { | ||||
|             "SourcePath" = "8:..\\mechanisms\\pwd\\windows\\Release\\pwmech.dll" | ||||
|             "SourcePath" = "8:..\\mechanisms\\krb5\\windows\\Release\\krb5mech.dll" | ||||
|             "TargetName" = "8:" | ||||
|             "Tag" = "8:" | ||||
|             "Folder" = "8:_F5F5F604B81645F8B6463F7A7D6A53AD" | ||||
|   | ||||
| @@ -20,7 +20,7 @@ | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				AdditionalOptions="-DSECURITY_WIN32" | ||||
| 				Optimization="0" | ||||
| 				AdditionalIncludeDirectories="windows;.;"..\..";"C:\Program Files\novell\CASA\include";"..\..\..\include"" | ||||
| 				AdditionalIncludeDirectories=""C:\Dev\casa\CASA-auth-token\non-java\client\mechanisms\krb5\windows";"C:\Dev\casa\CASA-auth-token\non-java\client\mechanisms\krb5";"C:\Dev\casa\CASA-auth-token\non-java\client";"C:\Program Files\novell\CASA\include";"C:\Dev\casa\CASA-auth-token\non-java\include"" | ||||
| 				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" | ||||
| 				MinimalRebuild="TRUE" | ||||
| 				BasicRuntimeChecks="3" | ||||
| @@ -80,7 +80,7 @@ copy $(OutDir)\krb5mech.dll \"Program Files"\novell\casa\lib\krb5mech. | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				AdditionalOptions="-DSECURITY_WIN32" | ||||
| 				AdditionalIncludeDirectories="windows;.;"..\..";"C:\Program Files\novell\CASA\include";"..\..\..\include"" | ||||
| 				AdditionalIncludeDirectories=""C:\Dev\casa\CASA-auth-token\non-java\client\mechanisms\krb5\windows";"C:\Dev\casa\CASA-auth-token\non-java\client\mechanisms\krb5";"C:\Dev\casa\CASA-auth-token\non-java\client";"C:\Program Files\novell\CASA\include";"C:\Dev\casa\CASA-auth-token\non-java\include"" | ||||
| 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" | ||||
| 				RuntimeLibrary="4" | ||||
| 				UsePrecompiledHeader="0" | ||||
| @@ -139,25 +139,25 @@ copy $(OutDir)\krb5mech.dll \"Program Files"\novell\casa\lib\krb5mech. | ||||
| 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" | ||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> | ||||
| 			<File | ||||
| 				RelativePath=".\windows\dllsup.c"> | ||||
| 				RelativePath=".\dllsup.c"> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\windows\get.c"> | ||||
| 				RelativePath=".\get.c"> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\interface.c"> | ||||
| 				RelativePath="..\interface.c"> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\Krb5Authenticate.conf"> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\win32\krb5mech.def"> | ||||
| 				RelativePath=".\krb5mech.def"> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\windows\platform.c"> | ||||
| 				RelativePath=".\platform.c"> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\util.c"> | ||||
| 				RelativePath="..\util.c"> | ||||
| 			</File> | ||||
| 		</Filter> | ||||
| 		<Filter | ||||
| @@ -165,10 +165,10 @@ copy $(OutDir)\krb5mech.dll \"Program Files"\novell\casa\lib\krb5mech. | ||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" | ||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> | ||||
| 			<File | ||||
| 				RelativePath=".\internal.h"> | ||||
| 				RelativePath="..\internal.h"> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\windows\platform.h"> | ||||
| 				RelativePath=".\platform.h"> | ||||
| 			</File> | ||||
| 		</Filter> | ||||
| 		<Filter | ||||
| @@ -22,49 +22,23 @@ | ||||
|  * | ||||
|  ***********************************************************************/ | ||||
|  | ||||
| #include <windows.h> | ||||
| #include "casa_c_authtoken.h" | ||||
| #include "platform.h" | ||||
|  | ||||
| // Globals | ||||
| char usageString[] = "usage: test -a serverAddress -p serverPort [-s serviceName] [-h]\n"; | ||||
| // Externals | ||||
| extern | ||||
| char     *pServerAddress; | ||||
|  | ||||
| char     *pServerAddress = NULL; | ||||
| int      serverPort = 0; | ||||
| BOOLEAN  execHttpTest = FALSE; | ||||
| extern | ||||
| int      serverPort; | ||||
|  | ||||
| char     serviceName[] = "testService"; | ||||
| char     *pServiceName = serviceName; | ||||
| extern | ||||
| BOOLEAN  execHttpTest; | ||||
|  | ||||
| extern | ||||
| char     serviceName[]; | ||||
|  | ||||
| /*********************************************************************** | ||||
|  * | ||||
|  * dtoul() | ||||
|  * | ||||
|  ***********************************************************************/ | ||||
| int | ||||
| dtoul( | ||||
|    IN    char *cp, | ||||
|    IN    int len) | ||||
| { | ||||
|    int   n = 0; | ||||
|    int   i; | ||||
|  | ||||
|    for (i = 0; i < len; i++, cp++) | ||||
|    { | ||||
|       // Verify that we are dealing with a valid digit | ||||
|       if (*cp >= '0' && *cp <= '9') | ||||
|       { | ||||
|          n = 10 * n + (*cp - '0'); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|          printf("-dtoul- Found invalid digit\n"); | ||||
|          break; | ||||
|       } | ||||
|    } | ||||
|        | ||||
|    return n; | ||||
| } | ||||
| extern | ||||
| char     *pServiceName; | ||||
|  | ||||
|  | ||||
| /*********************************************************************** | ||||
| @@ -166,108 +140,95 @@ void NonHttpTest(void) | ||||
|       struct sockaddr_in   remoteAddr = {0}; | ||||
|       struct linger        linger_opt = {1, 15}; | ||||
|       struct hostent       *pLookupResult; | ||||
|       int                  winsockStartupResult; | ||||
|       WSADATA              winsockData; | ||||
|  | ||||
|       printf("-NonHttpTest- ObtainAuthToken succedded, tokenlen = %d\n", authTokenLen); | ||||
|  | ||||
|       // Send the token to the server | ||||
|       // | ||||
|       // First initialize winsock | ||||
|       if ((winsockStartupResult = WSAStartup(MAKEWORD(2,2), &winsockData)) == 0) | ||||
|       // Open socket | ||||
|       sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); | ||||
|       if (sock != INVALID_SOCKET) | ||||
|       { | ||||
|          // Open socket | ||||
|          sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); | ||||
|          if (sock != INVALID_SOCKET) | ||||
|          // Setup the local address structure | ||||
|          localAddr.sin_family = AF_INET; | ||||
|          localAddr.sin_addr.s_addr = htonl(INADDR_ANY); | ||||
|  | ||||
|          // Bind socket | ||||
|          if (!bind(sock, (const struct sockaddr*) &localAddr, sizeof(struct sockaddr_in))) | ||||
|          { | ||||
|             // Setup the local address structure | ||||
|             localAddr.sin_family = AF_INET; | ||||
|             localAddr.sin_addr.s_addr = htonl(INADDR_ANY); | ||||
|  | ||||
|             // Bind socket | ||||
|             if (!bind(sock, (const struct sockaddr*) &localAddr, sizeof(struct sockaddr_in))) | ||||
|             // Resolve the server address | ||||
|             pLookupResult = gethostbyname(pServerAddress); | ||||
|             if (pLookupResult) | ||||
|             { | ||||
|                // Resolve the server address | ||||
|                pLookupResult = gethostbyname(pServerAddress); | ||||
|                if (pLookupResult) | ||||
|                // Validate the address type returned | ||||
|                if (pLookupResult->h_addrtype == AF_INET) | ||||
|                { | ||||
|                   // Validate the address type returned | ||||
|                   if (pLookupResult->h_addrtype == AF_INET) | ||||
|                   int   numAddressesFound = 0; | ||||
|  | ||||
|                   // Determine how many addresses where returned | ||||
|                   while (pLookupResult->h_addr_list[numAddressesFound] != NULL) | ||||
|                   { | ||||
|                      int   numAddressesFound = 0; | ||||
|                      //printf("ServerAddress = %08X\n", *((int*) pLookupResult->h_addr_list[numAddressesFound])); | ||||
|                      numAddressesFound ++; | ||||
|                   } | ||||
|                   //printf("Found %d addresses\n", numAddressesFound); | ||||
|  | ||||
|                      // Determine how many addresses where returned | ||||
|                      while (pLookupResult->h_addr_list[numAddressesFound] != NULL) | ||||
|                      { | ||||
|                         //printf("ServerAddress = %08X\n", *((int*) pLookupResult->h_addr_list[numAddressesFound])); | ||||
|                         numAddressesFound ++; | ||||
|                      } | ||||
|                      //printf("Found %d addresses\n", numAddressesFound); | ||||
|                   // Setup the remote address structure with the lookup results | ||||
|                   remoteAddr.sin_family = AF_INET; | ||||
|                   remoteAddr.sin_port = serverPort; | ||||
|                   remoteAddr.sin_addr.s_addr = *((int*) pLookupResult->h_addr_list[0]); // Short-cut | ||||
|                   //printf("ServerAddress = %08X\n", remoteAddr.sin_addr.s_addr); | ||||
|  | ||||
|                      // Setup the remote address structure with the lookup results | ||||
|                      remoteAddr.sin_family = AF_INET; | ||||
|                      remoteAddr.sin_port = serverPort; | ||||
|                      remoteAddr.sin_addr.s_addr = *((int*) pLookupResult->h_addr_list[0]); // Short-cut | ||||
|                      //printf("ServerAddress = %08X\n", remoteAddr.sin_addr.s_addr); | ||||
|  | ||||
|                      // Perform connect operation | ||||
|                      if (connect(sock, | ||||
|                                  (struct sockaddr*) &remoteAddr, | ||||
|                                  sizeof(struct sockaddr_in)) == SOCKET_ERROR) | ||||
|                      { | ||||
|                         printf("-NonHttpTest- Connection creation failed, error = %d\n", WSAGetLastError()); | ||||
|                      } | ||||
|                      else | ||||
|                      { | ||||
|                         // Now the connection is setup, send the credentials to the server as one line. | ||||
|                         // using our cheesy protocol followed by a hello string. | ||||
|                         // | ||||
|                         // Send the token to the server (including NULL terminator) | ||||
|                         send(sock, authToken, (int) strlen(authToken) + 1, 0); | ||||
|  | ||||
|                         // Send new line | ||||
|                         send(sock, "\n", 1, 0); | ||||
|  | ||||
|                         // Send "hello" | ||||
|                         //send(sock, helloString, strlen(helloString) + 1, MSG_NOSIGNAL); | ||||
|  | ||||
|                         // Send new line | ||||
|                         //send(sock, "\n", 1, 0); | ||||
|  | ||||
|                         // Shutdown the connection | ||||
|                         shutdown(sock, 0); | ||||
|                      } | ||||
|                   // Perform connect operation | ||||
|                   if (connect(sock, | ||||
|                               (struct sockaddr*) &remoteAddr, | ||||
|                               sizeof(struct sockaddr_in)) == SOCKET_ERROR) | ||||
|                   { | ||||
|                      printf("-NonHttpTest- Connection creation failed, error = %d\n", WSAGetLastError()); | ||||
|                   } | ||||
|                   else | ||||
|                   { | ||||
|                      printf("-NonHttpTest- Unsupported address type returned %08X\n", pLookupResult->h_addrtype); | ||||
|                      // Now the connection is setup, send the credentials to the server as one line. | ||||
|                      // using our cheesy protocol followed by a hello string. | ||||
|                      // | ||||
|                      // Send the token to the server (including NULL terminator) | ||||
|                      send(sock, authToken, (int) strlen(authToken) + 1, 0); | ||||
|  | ||||
|                      // Send new line | ||||
|                      send(sock, "\n", 1, 0); | ||||
|  | ||||
|                      // Send "hello" | ||||
|                      //send(sock, helloString, strlen(helloString) + 1, MSG_NOSIGNAL); | ||||
|  | ||||
|                      // Send new line | ||||
|                      //send(sock, "\n", 1, 0); | ||||
|  | ||||
|                      // Shutdown the connection | ||||
|                      shutdown(sock, 0); | ||||
|                   } | ||||
|                } | ||||
|                else | ||||
|                { | ||||
|                   printf("-NonHttpTest- Lookup for %s failed\n", pServerAddress); | ||||
|                   printf("-NonHttpTest- Unsupported address type returned %08X\n", pLookupResult->h_addrtype); | ||||
|                } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                printf("-NonHttpTest- Unable to bind socket, error = %d", errno); | ||||
|                printf("-NonHttpTest- Lookup for %s failed\n", pServerAddress); | ||||
|             } | ||||
|  | ||||
|             // Close the socket | ||||
|             setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char*) &linger_opt, sizeof(linger_opt)); | ||||
|             closesocket(sock); | ||||
|          } | ||||
|          else | ||||
|          { | ||||
|             printf("-NonHttpTest- Unable to open socket, error = %d\n", errno); | ||||
|             printf("-NonHttpTest- Unable to bind socket, error = %d", errno); | ||||
|          } | ||||
|  | ||||
|          // Close winsock | ||||
|          WSACleanup(); | ||||
|          // Close the socket | ||||
|          setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char*) &linger_opt, sizeof(linger_opt)); | ||||
|          closesocket(sock); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|          printf("-NonHttpTest- WSAStartup failed, error = %d\n", winsockStartupResult); | ||||
|          printf("-NonHttpTest- Unable to open socket, error = %d\n", errno); | ||||
|       } | ||||
|    } | ||||
| } | ||||
| @@ -297,235 +258,125 @@ void HttpTest(void) | ||||
|       struct sockaddr_in   remoteAddr = {0}; | ||||
|       struct linger        linger_opt = {1, 15}; | ||||
|       struct hostent       *pLookupResult; | ||||
|       int                  winsockStartupResult; | ||||
|       WSADATA              winsockData; | ||||
|  | ||||
|       //printf("ObtainAuthToken succedded, token = %s\n", authToken); | ||||
|       printf("-HttpTest- ObtainAuthToken succedded, tokenlen = %d\n", authTokenLen); | ||||
|  | ||||
|       // Send the token to the server | ||||
|       // | ||||
|       // First initialize winsock | ||||
|       if ((winsockStartupResult = WSAStartup(MAKEWORD(2,2), &winsockData)) == 0) | ||||
|       // Open socket | ||||
|       sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); | ||||
|       if (sock != INVALID_SOCKET) | ||||
|       { | ||||
|          // Open socket | ||||
|          sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); | ||||
|          if (sock != INVALID_SOCKET) | ||||
|          // Setup the local address structure | ||||
|          localAddr.sin_family = AF_INET; | ||||
|          localAddr.sin_addr.s_addr = htonl(INADDR_ANY); | ||||
|  | ||||
|          // Bind socket | ||||
|          if (!bind(sock, (const struct sockaddr*) &localAddr, sizeof(struct sockaddr_in))) | ||||
|          { | ||||
|             // Setup the local address structure | ||||
|             localAddr.sin_family = AF_INET; | ||||
|             localAddr.sin_addr.s_addr = htonl(INADDR_ANY); | ||||
|  | ||||
|             // Bind socket | ||||
|             if (!bind(sock, (const struct sockaddr*) &localAddr, sizeof(struct sockaddr_in))) | ||||
|             // Resolve the server address | ||||
|             pLookupResult = gethostbyname(pServerAddress); | ||||
|             if (pLookupResult) | ||||
|             { | ||||
|                // Resolve the server address | ||||
|                pLookupResult = gethostbyname(pServerAddress); | ||||
|                if (pLookupResult) | ||||
|                // Validate the address type returned | ||||
|                if (pLookupResult->h_addrtype == AF_INET) | ||||
|                { | ||||
|                   // Validate the address type returned | ||||
|                   if (pLookupResult->h_addrtype == AF_INET) | ||||
|                   int   numAddressesFound = 0; | ||||
|  | ||||
|                   // Determine how many addresses where returned | ||||
|                   while (pLookupResult->h_addr_list[numAddressesFound] != NULL) | ||||
|                   { | ||||
|                      int   numAddressesFound = 0; | ||||
|  | ||||
|                      // Determine how many addresses where returned | ||||
|                      while (pLookupResult->h_addr_list[numAddressesFound] != NULL) | ||||
|                      { | ||||
|                         //printf("ServerAddress = %08X\n", *((int*) pLookupResult->h_addr_list[numAddressesFound])); | ||||
|                         numAddressesFound ++; | ||||
|                      } | ||||
|                      //printf("Found %d addresses\n", numAddressesFound); | ||||
|                      //printf("ServerAddress = %08X\n", *((int*) pLookupResult->h_addr_list[numAddressesFound])); | ||||
|                      numAddressesFound ++; | ||||
|                   } | ||||
|                   //printf("Found %d addresses\n", numAddressesFound); | ||||
|  | ||||
|  | ||||
|                      // Setup the remote address structure with the lookup results | ||||
|                      remoteAddr.sin_family = AF_INET; | ||||
|                      remoteAddr.sin_port = serverPort; | ||||
|                      remoteAddr.sin_addr.s_addr = *((int*) pLookupResult->h_addr_list[0]); // Short-cut | ||||
|                      //printf("ServerAddress = %08X\n", remoteAddr.sin_addr.s_addr); | ||||
|                   // Setup the remote address structure with the lookup results | ||||
|                   remoteAddr.sin_family = AF_INET; | ||||
|                   remoteAddr.sin_port = serverPort; | ||||
|                   remoteAddr.sin_addr.s_addr = *((int*) pLookupResult->h_addr_list[0]); // Short-cut | ||||
|                   //printf("ServerAddress = %08X\n", remoteAddr.sin_addr.s_addr); | ||||
|  | ||||
|                      // Perform connect operation | ||||
|                      if (connect(sock, | ||||
|                                  (struct sockaddr*) &remoteAddr, | ||||
|                                  sizeof(struct sockaddr_in)) == SOCKET_ERROR) | ||||
|                      { | ||||
|                         printf("-HttpTest- Connection creation failed, error = %d\n", WSAGetLastError()); | ||||
|                      } | ||||
|                      else | ||||
|                      { | ||||
|                         char *pBasicCredentials; | ||||
|                         char *pEncodedBasicCredentials; | ||||
|                         int  encodedLength; | ||||
|                         char CasaPrincipal[] = "CasaPrincipal:"; | ||||
|                         char HTTPReqPart1[] = "GET /example-info HTTP/1.1\r\\nUser-Agent: CasaTestClient\r\nHost: jcstation.dnsdhcp.provo.novell.com:4096\r\nConnection: Keep-Alive\r\nAuthorization: Basic "; | ||||
|  | ||||
|                         // Now the connection is setup, send 1st part of HTTP request to the server. | ||||
|                         send(sock, HTTPReqPart1, (int) strlen(HTTPReqPart1), 0); | ||||
|  | ||||
|                         // Now setup the HTTP Basic Credentials | ||||
|                         pBasicCredentials = (char*) malloc(strlen(CasaPrincipal) + strlen(authToken) + 1); | ||||
|                         if (pBasicCredentials) | ||||
|                         { | ||||
|                            char *pEncodedCredentials; | ||||
|  | ||||
|                            memcpy(pBasicCredentials, CasaPrincipal, sizeof(CasaPrincipal)); | ||||
|                            strcat(pBasicCredentials, authToken); | ||||
|  | ||||
|                            // Now Base64 encode the credentials | ||||
|                            if (EncodeData(pBasicCredentials, strlen(pBasicCredentials), &pEncodedBasicCredentials, &encodedLength) == 0) | ||||
|                            { | ||||
|                               // Send the encoded credentials | ||||
|                               send(sock, pEncodedBasicCredentials, encodedLength - 1, 0); | ||||
|  | ||||
|                               // Send the rest of the header | ||||
|                               send(sock, "\r\n\r\n", 4, 0); | ||||
|  | ||||
|                               // Free the buffer holding the encoded credentials | ||||
|                               free(pEncodedBasicCredentials); | ||||
|                            } | ||||
|                            else | ||||
|                            { | ||||
|                               printf("-HttpTest- Error encoding credentials\n"); | ||||
|                            } | ||||
|  | ||||
|                            // Free the buffer containing the basic credentials | ||||
|                            free(pBasicCredentials); | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                            printf("-HttpTest- Buffer allocation failure\n"); | ||||
|                         } | ||||
|  | ||||
|                         // Shutdown the connection | ||||
|                         shutdown(sock, 0); | ||||
|                      } | ||||
|                   // Perform connect operation | ||||
|                   if (connect(sock, | ||||
|                               (struct sockaddr*) &remoteAddr, | ||||
|                               sizeof(struct sockaddr_in)) == SOCKET_ERROR) | ||||
|                   { | ||||
|                      printf("-HttpTest- Connection creation failed, error = %d\n", WSAGetLastError()); | ||||
|                   } | ||||
|                   else | ||||
|                   { | ||||
|                      printf("-HttpTest- Unsupported address type returned %08X\n", pLookupResult->h_addrtype); | ||||
|                      char *pBasicCredentials; | ||||
|                      char *pEncodedBasicCredentials; | ||||
|                      int  encodedLength; | ||||
|                      char CasaPrincipal[] = "CasaPrincipal:"; | ||||
|                      char HTTPReqPart1[] = "GET /example-info HTTP/1.1\r\\nUser-Agent: CasaTestClient\r\nHost: jcstation.dnsdhcp.provo.novell.com:4096\r\nConnection: Keep-Alive\r\nAuthorization: Basic "; | ||||
|  | ||||
|                      // Now the connection is setup, send 1st part of HTTP request to the server. | ||||
|                      send(sock, HTTPReqPart1, (int) strlen(HTTPReqPart1), 0); | ||||
|  | ||||
|                      // Now setup the HTTP Basic Credentials | ||||
|                      pBasicCredentials = (char*) malloc(strlen(CasaPrincipal) + strlen(authToken) + 1); | ||||
|                      if (pBasicCredentials) | ||||
|                      { | ||||
|                         memcpy(pBasicCredentials, CasaPrincipal, sizeof(CasaPrincipal)); | ||||
|                         strcat(pBasicCredentials, authToken); | ||||
|  | ||||
|                         // Now Base64 encode the credentials | ||||
|                         if (EncodeData((const void*) pBasicCredentials, | ||||
|                                        (const int32_t) strlen(pBasicCredentials), | ||||
|                                        &pEncodedBasicCredentials, | ||||
|                                        (int32_t *) &encodedLength) == 0) | ||||
|                         { | ||||
|                            // Send the encoded credentials | ||||
|                            send(sock, pEncodedBasicCredentials, encodedLength - 1, 0); | ||||
|  | ||||
|                            // Send the rest of the header | ||||
|                            send(sock, "\r\n\r\n", 4, 0); | ||||
|  | ||||
|                            // Free the buffer holding the encoded credentials | ||||
|                            free(pEncodedBasicCredentials); | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                            printf("-HttpTest- Error encoding credentials\n"); | ||||
|                         } | ||||
|  | ||||
|                         // Free the buffer containing the basic credentials | ||||
|                         free(pBasicCredentials); | ||||
|                      } | ||||
|                      else | ||||
|                      { | ||||
|                         printf("-HttpTest- Buffer allocation failure\n"); | ||||
|                      } | ||||
|  | ||||
|                      // Shutdown the connection | ||||
|                      shutdown(sock, 0); | ||||
|                   } | ||||
|                } | ||||
|                else | ||||
|                { | ||||
|                   printf("-HttpTest- Lookup for %s failed\n", pServerAddress); | ||||
|                   printf("-HttpTest- Unsupported address type returned %08X\n", pLookupResult->h_addrtype); | ||||
|                } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                printf("-HttpTest- Unable to bind socket, error = %d", errno); | ||||
|                printf("-HttpTest- Lookup for %s failed\n", pServerAddress); | ||||
|             } | ||||
|  | ||||
|             // Close the socket | ||||
|             setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char*) &linger_opt, sizeof(linger_opt)); | ||||
|             closesocket(sock); | ||||
|          } | ||||
|          else | ||||
|          { | ||||
|             printf("-HttpTest- Unable to open socket, error = %d\n", errno); | ||||
|             printf("-HttpTest- Unable to bind socket, error = %d", errno); | ||||
|          } | ||||
|  | ||||
|          // Close winsock | ||||
|          WSACleanup(); | ||||
|          // Close the socket | ||||
|          setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char*) &linger_opt, sizeof(linger_opt)); | ||||
|          closesocket(sock); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|          printf("-HttpTest- WSAStartup failed, error = %d\n", winsockStartupResult); | ||||
|          printf("-HttpTest- Unable to open socket, error = %d\n", errno); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
|  | ||||
| /*********************************************************************** | ||||
|  * | ||||
|  * main() | ||||
|  * | ||||
|  ***********************************************************************/ | ||||
| int main(int argc, char* argv[]) | ||||
| { | ||||
|    // Process input parameters | ||||
|    int i = 1; | ||||
|    while(argv[i] != NULL) | ||||
|    { | ||||
|       if (stricmp(argv[i], "-a") == 0) | ||||
|       { | ||||
|          // Server Address option, the next argument should | ||||
|          // contain the address. | ||||
|          i++; | ||||
|          if (argv[i] != NULL) | ||||
|          { | ||||
|             pServerAddress = argv[i]; | ||||
|          } | ||||
|          else | ||||
|          { | ||||
|             printf(usageString); | ||||
|             return -1; | ||||
|          } | ||||
|       } | ||||
|       else if (stricmp(argv[i], "-p") == 0) | ||||
|       { | ||||
|          // Server port option, the next argument should | ||||
|          // contain the port. | ||||
|          i++; | ||||
|          if (argv[i] != NULL) | ||||
|          { | ||||
|             serverPort = htons(dtoul(argv[i], strlen(argv[i]))); | ||||
|          } | ||||
|          else | ||||
|          { | ||||
|             printf(usageString); | ||||
|             return -1; | ||||
|          } | ||||
|       } | ||||
|       else if (stricmp(argv[i], "-s") == 0) | ||||
|       { | ||||
|          // Service name option, the next argument should | ||||
|          // contain the name of the service to be targeted. | ||||
|          i++; | ||||
|          if (argv[i] != NULL) | ||||
|          { | ||||
|             pServiceName = argv[i]; | ||||
|          } | ||||
|          else | ||||
|          { | ||||
|             printf(usageString); | ||||
|             return -1; | ||||
|          } | ||||
|       } | ||||
|       else if (stricmp(argv[i], "-h") == 0) | ||||
|       { | ||||
|          // Perform http test option | ||||
|          execHttpTest = TRUE; | ||||
|       } | ||||
|  | ||||
|       // Advance to the next argument | ||||
|       i++; | ||||
|    } | ||||
|  | ||||
|    // Verify that the server address and port were specified | ||||
|    if (pServerAddress && serverPort != 0) | ||||
|    { | ||||
|       // Repeat the test when indicated | ||||
|       printf("Press 'Enter' to run test or 'n + Enter' to stop.\n"); | ||||
|       while(getchar() != 'n') | ||||
|       { | ||||
|          // Execute the appropriate test | ||||
|          if (execHttpTest) | ||||
|          { | ||||
|             HttpTest(); | ||||
|          } | ||||
|          else | ||||
|          { | ||||
|             NonHttpTest(); | ||||
|          } | ||||
|          printf("Press 'Enter' to run test or 'n + Enter' to stop.\n"); | ||||
|       } | ||||
|    } | ||||
|    else | ||||
|    { | ||||
|       printf(usageString); | ||||
|       return -1; | ||||
|    } | ||||
|  | ||||
|    return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										187
									
								
								CASA-auth-token/non-java/client/test/windows/main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								CASA-auth-token/non-java/client/test/windows/main.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,187 @@ | ||||
| /*********************************************************************** | ||||
|  *  | ||||
|  *  Copyright (C) 2006 Novell, Inc. All Rights Reserved. | ||||
|  * | ||||
|  *  This library is free software; you can redistribute it and/or | ||||
|  *  modify it under the terms of the GNU Lesser General Public | ||||
|  *  License as published by the Free Software Foundation; version 2.1 | ||||
|  *  of the License. | ||||
|  * | ||||
|  *  This library is distributed in the hope that it will be useful, | ||||
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  *  Library Lesser General Public License for more details. | ||||
|  * | ||||
|  *  You should have received a copy of the GNU Lesser General Public | ||||
|  *  License along with this library; if not, Novell, Inc. | ||||
|  *  | ||||
|  *  To contact Novell about this file by physical or electronic mail,  | ||||
|  *  you may find current contact information at www.novell.com. | ||||
|  *  | ||||
|  *  Author: Juan Carlos Luciani <jluciani@novell.com> | ||||
|  * | ||||
|  ***********************************************************************/ | ||||
|  | ||||
| #include "platform.h" | ||||
|  | ||||
| // Extern functions | ||||
| extern | ||||
| void NonHttpTest(void); | ||||
|  | ||||
| extern | ||||
| void HttpTest(void); | ||||
|  | ||||
|  | ||||
| // Globals | ||||
| char usageString[] = "usage: test -a serverAddress -p serverPort [-s serviceName] [-h]\n"; | ||||
|  | ||||
| char     *pServerAddress = NULL; | ||||
| int      serverPort = 0; | ||||
| BOOLEAN  execHttpTest = FALSE; | ||||
|  | ||||
| char     serviceName[] = "testService"; | ||||
| char     *pServiceName = serviceName; | ||||
|  | ||||
|  | ||||
| /*********************************************************************** | ||||
|  * | ||||
|  * dtoul() | ||||
|  * | ||||
|  ***********************************************************************/ | ||||
| int | ||||
| dtoul( | ||||
|    IN    char *cp, | ||||
|    IN    int len) | ||||
| { | ||||
|    int   n = 0; | ||||
|    int   i; | ||||
|  | ||||
|    for (i = 0; i < len; i++, cp++) | ||||
|    { | ||||
|       // Verify that we are dealing with a valid digit | ||||
|       if (*cp >= '0' && *cp <= '9') | ||||
|       { | ||||
|          n = 10 * n + (*cp - '0'); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|          printf("-dtoul- Found invalid digit\n"); | ||||
|          break; | ||||
|       } | ||||
|    } | ||||
|        | ||||
|    return n; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /*********************************************************************** | ||||
|  * | ||||
|  * main() | ||||
|  * | ||||
|  ***********************************************************************/ | ||||
| int main(int argc, char* argv[]) | ||||
| { | ||||
|    // Process input parameters | ||||
|    int i = 1; | ||||
|    while(argv[i] != NULL) | ||||
|    { | ||||
|       if (stricmp(argv[i], "-a") == 0) | ||||
|       { | ||||
|          // Server Address option, the next argument should | ||||
|          // contain the address. | ||||
|          i++; | ||||
|          if (argv[i] != NULL) | ||||
|          { | ||||
|             pServerAddress = argv[i]; | ||||
|          } | ||||
|          else | ||||
|          { | ||||
|             printf(usageString); | ||||
|             return -1; | ||||
|          } | ||||
|       } | ||||
|       else if (stricmp(argv[i], "-p") == 0) | ||||
|       { | ||||
|          // Server port option, the next argument should | ||||
|          // contain the port. | ||||
|          i++; | ||||
|          if (argv[i] != NULL) | ||||
|          { | ||||
|             serverPort = htons(dtoul(argv[i], (int) strlen(argv[i]))); | ||||
|          } | ||||
|          else | ||||
|          { | ||||
|             printf(usageString); | ||||
|             return -1; | ||||
|          } | ||||
|       } | ||||
|       else if (stricmp(argv[i], "-s") == 0) | ||||
|       { | ||||
|          // Service name option, the next argument should | ||||
|          // contain the name of the service to be targeted. | ||||
|          i++; | ||||
|          if (argv[i] != NULL) | ||||
|          { | ||||
|             pServiceName = argv[i]; | ||||
|          } | ||||
|          else | ||||
|          { | ||||
|             printf(usageString); | ||||
|             return -1; | ||||
|          } | ||||
|       } | ||||
|       else if (stricmp(argv[i], "-h") == 0) | ||||
|       { | ||||
|          // Perform http test option | ||||
|          execHttpTest = TRUE; | ||||
|       } | ||||
|  | ||||
|       // Advance to the next argument | ||||
|       i++; | ||||
|    } | ||||
|  | ||||
|    // Verify that the server address and port were specified | ||||
|    if (pServerAddress && serverPort != 0) | ||||
|    { | ||||
|       int      winsockStartupResult; | ||||
|       WSADATA  winsockData; | ||||
|  | ||||
|       // First initialize winsock | ||||
|       if ((winsockStartupResult = WSAStartup(MAKEWORD(2,2), &winsockData)) == 0) | ||||
|       { | ||||
|          // Repeat the test when indicated | ||||
|          printf("Press 'Enter' to run test or 'n + Enter' to stop.\n"); | ||||
|          while(getchar() != 'n') | ||||
|          { | ||||
|             // Execute the appropriate test | ||||
|             if (execHttpTest) | ||||
|             { | ||||
|                HttpTest(); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                NonHttpTest(); | ||||
|             } | ||||
|             printf("Press 'Enter' to run test or 'n + Enter' to stop.\n"); | ||||
|          } | ||||
|  | ||||
|          // Close winsock | ||||
|          WSACleanup(); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|          printf("-main- WSAStartup failed, error = %d\n", winsockStartupResult); | ||||
|       } | ||||
|    } | ||||
|    else | ||||
|    { | ||||
|       printf(usageString); | ||||
|       return -1; | ||||
|    } | ||||
|  | ||||
|    return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
							
								
								
									
										27
									
								
								CASA-auth-token/non-java/client/test/windows/platform.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								CASA-auth-token/non-java/client/test/windows/platform.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| /*********************************************************************** | ||||
|  *  | ||||
|  *  Copyright (C) 2006 Novell, Inc. All Rights Reserved. | ||||
|  * | ||||
|  *  This library is free software; you can redistribute it and/or | ||||
|  *  modify it under the terms of the GNU Lesser General Public | ||||
|  *  License as published by the Free Software Foundation; version 2.1 | ||||
|  *  of the License. | ||||
|  * | ||||
|  *  This library is distributed in the hope that it will be useful, | ||||
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  *  Library Lesser General Public License for more details. | ||||
|  * | ||||
|  *  You should have received a copy of the GNU Lesser General Public | ||||
|  *  License along with this library; if not, Novell, Inc. | ||||
|  *  | ||||
|  *  To contact Novell about this file by physical or electronic mail,  | ||||
|  *  you may find current contact information at www.novell.com. | ||||
|  *  | ||||
|  *  Author: Juan Carlos Luciani <jluciani@novell.com> | ||||
|  * | ||||
|  ***********************************************************************/ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <windows.h> | ||||
| #include "casa_c_authtoken.h" | ||||
| @@ -19,7 +19,7 @@ | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				Optimization="0" | ||||
| 				AdditionalIncludeDirectories=""..\..\include";"C:\Program Files\novell\CASA\include"" | ||||
| 				AdditionalIncludeDirectories=""C:\Dev\casa\CASA-auth-token\non-java\client\test\windows";"C:\Dev\casa\CASA-auth-token\non-java\include";"C:\Program Files\novell\CASA\include"" | ||||
| 				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" | ||||
| 				MinimalRebuild="TRUE" | ||||
| 				BasicRuntimeChecks="3" | ||||
| @@ -70,7 +70,7 @@ | ||||
| 			CharacterSet="2"> | ||||
| 			<Tool | ||||
| 				Name="VCCLCompilerTool" | ||||
| 				AdditionalIncludeDirectories=""..\..\include";"C:\Program Files\novell\CASA\include"" | ||||
| 				AdditionalIncludeDirectories=""C:\Dev\casa\CASA-auth-token\non-java\client\test\windows";"C:\Dev\casa\CASA-auth-token\non-java\include";"C:\Program Files\novell\CASA\include"" | ||||
| 				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" | ||||
| 				RuntimeLibrary="4" | ||||
| 				UsePrecompiledHeader="0" | ||||
| @@ -120,22 +120,25 @@ | ||||
| 			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" | ||||
| 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> | ||||
| 			<File | ||||
| 				RelativePath=".\CASA_Auth.cpp"> | ||||
| 				RelativePath="..\CASA_Auth.cpp"> | ||||
| 			</File> | ||||
| 			<File | ||||
| 				RelativePath=".\main.cpp"> | ||||
| 			</File> | ||||
| 		</Filter> | ||||
| 		<Filter | ||||
| 			Name="Header Files" | ||||
| 			Filter="h;hpp;hxx;hm;inl;inc;xsd" | ||||
| 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> | ||||
| 			<File | ||||
| 				RelativePath=".\platform.h"> | ||||
| 			</File> | ||||
| 		</Filter> | ||||
| 		<Filter | ||||
| 			Name="Resource Files" | ||||
| 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" | ||||
| 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"> | ||||
| 		</Filter> | ||||
| 		<File | ||||
| 			RelativePath=".\ReadMe.txt"> | ||||
| 		</File> | ||||
| 	</Files> | ||||
| 	<Globals> | ||||
| 	</Globals> | ||||
		Reference in New Issue
	
	Block a user