diff --git a/auth_token/client/test/CASA_Auth.cpp b/auth_token/client/test/CASA_Auth.cpp index f8b7c363..59803765 100644 --- a/auth_token/client/test/CASA_Auth.cpp +++ b/auth_token/client/test/CASA_Auth.cpp @@ -23,7 +23,8 @@ ***********************************************************************/ #include -#include "casa_auth_token.h" +#include "casa_c_authtoken.h" + int main(int argc, char* argv[]) { @@ -39,7 +40,8 @@ int main(int argc, char* argv[]) { char serverAddr[] = "137.65.132.44"; char *pServerAddress = serverAddr; - int serverPort = 4444; +// int serverPort = htons(4444); + int serverPort = 27008; SOCKET sock; struct sockaddr_in localAddr = {0}; struct sockaddr_in remoteAddr = {0}; @@ -87,7 +89,7 @@ int main(int argc, char* argv[]) // Setup the remote address structure with the lookup results remoteAddr.sin_family = AF_INET; - remoteAddr.sin_port = htons(serverPort); + 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); @@ -113,7 +115,7 @@ int main(int argc, char* argv[]) send(sock, authToken, (int) strlen(authToken) + 1, 0); // Send new line - //send(sock, "\n", 1, 0); + send(sock, "\n", 1, 0); // Send "hello" //send(sock, helloString, strlen(helloString) + 1, MSG_NOSIGNAL); @@ -163,3 +165,237 @@ int main(int argc, char* argv[]) return 0; } + +/* +int +EncodeData( + IN const void *pData, + IN const int32_t dataLen, + INOUT char **ppEncodedData, + INOUT int32_t *pEncodedDataLen) +{ + int8_t g_Base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + int retStatus; + int encodedSize; + + char *pTmp; + + // Determine the encoded size and allocate a buffer to hold the encoded data + encodedSize = ((dataLen * 4 + 2) / 3) - (dataLen % 3 ) + 4; + pTmp = (char*) malloc(encodedSize); + *ppEncodedData = pTmp; + if (*ppEncodedData) + { + uint8_t *pOut, *pIn; + int i; + + // Setup pointers to move through the buffers + pIn = (uint8_t*) pData; + pOut = (uint8_t*) *ppEncodedData; + + // Perform the encoding + for (i = 0; i < dataLen - 2; i += 3) + { + *pOut++ = g_Base64[(pIn[i] >> 2) & 0x3F]; + *pOut++ = g_Base64[((pIn[i] & 0x3) << 4) | + ((int32_t)(pIn[i + 1] & 0xF0) >> 4)]; + *pOut++ = g_Base64[((pIn[i + 1] & 0xF) << 2) | + ((int32_t)(pIn[i + 2] & 0xC0) >> 6)]; + *pOut++ = g_Base64[pIn[i + 2] & 0x3F]; + } + if (i < dataLen) + { + *pOut++ = g_Base64[(pIn[i] >> 2) & 0x3F]; + if (i == (dataLen - 1)) + { + *pOut++ = g_Base64[((pIn[i] & 0x3) << 4)]; + *pOut++ = '='; + } + else + { + *pOut++ = g_Base64[((pIn[i] & 0x3) << 4) | + ((int32_t)(pIn[i + 1] & 0xF0) >> 4)]; + *pOut++ = g_Base64[((pIn[i + 1] & 0xF) << 2)]; + } + *pOut++ = '='; + } + *pOut++ = '\0'; + + // Return the encoded data length + *pEncodedDataLen = (int32_t)(pOut - (uint8_t*)*ppEncodedData); + + // Success + retStatus = 0; + } + else + { + printf("-EncodeData- Buffer allocation failure\n"); + + retStatus = -1; + } + + return retStatus; +} + + +int main(int argc, char* argv[]) +{ + int retStatus; + char authToken[4096]; + int authTokenLen = sizeof(authToken); + + // Now lets obtain a token for our service + retStatus = ObtainAuthToken("testService@137.65.132.44", authToken, &authTokenLen); + if (retStatus) + printf("ObtainAuthToken failed with status %d\n", retStatus); + else + { + char serverAddr[] = "137.65.132.44"; + char *pServerAddress = serverAddr; +// int serverPort = htons(4444); + int serverPort = htons(4096); + SOCKET sock; + struct sockaddr_in localAddr = {0}; + 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("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) + { + // 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) + { + // 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) + { + //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); + + // Perform connect operation + if (connect(sock, + (struct sockaddr*) &remoteAddr, + sizeof(struct sockaddr_in)) == SOCKET_ERROR) + { + printf("main()- 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("Error encoding credentials\n"); + } + + // Free the buffer containing the basic credentials + free(pBasicCredentials); + } + else + { + printf("Buffer allocation failure\n"); + } + + // Shutdown the connection + shutdown(sock, 0); + } + } + else + { + printf("main()- Unsupported address type returned %08X\n", pLookupResult->h_addrtype); + } + } + else + { + printf("main()- Lookup for %s failed\n", pServerAddress); + } + } + else + { + printf("main()- Unable to bind socket, error = %d", errno); + } + + // Close the socket + setsockopt(sock, SOL_SOCKET, SO_LINGER, (const char*) &linger_opt, sizeof(linger_opt)); + closesocket(sock); + } + else + { + printf("main()- Unable to open socket, error = %d\n", errno); + } + + // Close winsock + WSACleanup(); + } + else + { + printf("main()- WSAStartup failed, error = %d\n", winsockStartupResult); + } + } + + printf("Enter to exit application\n"); + getchar(); + return 0; +} +*/ \ No newline at end of file