--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/CSProtocolLibrary/cprotocol/CXClient.cpp Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Filename: CXClient.cpp
+* Author: Sanjeet Matharu
+* This is the client side of the protocol which takes name/value pairs and does stuff
+* System Includes
+*
+*/
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <memory.h>
+#include <string.h>
+#include <assert.h>
+
+#ifdef WIN32
+#include <winsock2.h>
+#include <windows.h>
+#else
+#include <sys/types.h>
+#include <sys/socket.h>
+#endif
+
+/*******************************************************************************
+ *
+ * Local Includes
+ *
+ ******************************************************************************/
+#include "cxclient.h"
+
+#define MAXRETRIES 5
+
+//------------------------------------------------------------------------------
+//constructor
+CXClient::CXClient()
+{
+ iClientStatus = SENDING_HELLO;
+
+ sprintf(hellobuffer, "%s", "HELLO");
+ sprintf(goodbyebuffer, "%s", "GOODBYE");
+}
+
+//------------------------------------------------------------------------------
+//destructor
+CXClient::~CXClient()
+{
+
+}
+
+//------------------------------------------------------------------------------
+//this function adds the specified value into the list of name value pairs
+int CXClient::OnExecute(int handle, char* cValue, int dim1, int dim2)
+{
+ int error = 0;
+ int localsocket = handle;
+ int counter = 0;
+
+ if(localsocket != 0)
+ {
+ error = SendData(localsocket, hellobuffer);
+ //send the hello to the server side first
+ if( error != OK_DATATRANSFER)
+ {
+ //give up and return a message
+ printf("There was a problem saying hello...\n");
+ return -1;
+ }
+ }
+ else
+ {
+ printf("There was a problem with the socket...\n");
+ return -1;
+ }
+
+ //go through the valuebuffer and send the data
+ for(counter = 0; counter < dim1; counter++)
+ {
+ error = SendData(localsocket, &cValue[counter*dim2]);
+ if( error != OK_DATATRANSFER)
+ {
+ //give up and return a message
+ printf("There was a problem sending the data...\n");
+ return -1;
+ }
+ }
+
+ //send the goodbye to the server side
+ if(localsocket != 0)
+ {
+ error = SendData(localsocket, goodbyebuffer);
+ if( error != OK_DATATRANSFER )
+ {
+ //give up and return a message
+ printf("There was a problem when saying goodbye...\n");
+ return -1;
+ }
+ }
+ else
+ {
+ printf("There was a problem with the socket...\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+//------------------------------------------------------------------------------
+//this sends the hello command to the client over the specified socket to initiate comms
+int CXClient::SendData(int handle, char* aValue)
+{
+ char c; //this is the buffer that is used to receive the data from across the link
+ char receivebuffer[MAXBUFFERLEN];
+
+ int counter = 0;
+ int bufferlength = 0;
+ int sendcounter = 0;
+ int err = -1;
+
+ bool success = false;
+ memset(receivebuffer, 0, sizeof(receivebuffer)); //initialise
+
+ bufferlength = strlen(aValue);
+
+ //send the data
+ while( sendcounter < MAXRETRIES )
+ {
+ //write to the socket
+ err = WriteClient( handle, HT_SOCKET, aValue, bufferlength );
+
+ //if unable to send for some reason (verify that the error code is the length of one char)
+ if( err != bufferlength )
+ {
+ printf("Data %s sending failed %d...\n", aValue, err);
+ sendcounter++;
+ }
+ else //print ok
+ {
+ printf("Data %s sending ok %d chars sent...\n", aValue, bufferlength);
+ sendcounter = MAXRETRIES;
+ //send an end of string character so the server can evaluate what has been received
+ WriteClient( handle, HT_SOCKET, "", 1 );
+ }
+ }
+
+ //receive the reply ONLY if send has succeeded (hence inside the maxretries limit)
+ if( ( sendcounter <= MAXRETRIES ) )
+ {
+ while( 1 )
+ {
+ err = ReadClient( handle, HT_SOCKET, &c );
+
+ if( strcmp( &c, "" ) == 0)
+ {
+ //if there was a problem with the read (i.e. invalid command received from server, knackered link)
+ if( ( err <= 0 ) || ( strcmp(receivebuffer, aValue) != 0 ) )
+ {
+ printf("Data read failed ( device returned %s and receive code was %d )...\n", receivebuffer, err);
+ memset(receivebuffer, 0, sizeof(receivebuffer)); //reset
+ return ERROR_DATATRANSFER;
+ }
+ else
+ {
+ printf("Data read succeeded ( device returned %s )...\n", receivebuffer);
+ memset(receivebuffer, 0, sizeof(receivebuffer)); //reset
+ counter = 0; //reset
+ break;
+ }
+ } //if
+
+ receivebuffer[counter++] = c;
+ } //while
+ }
+
+ return OK_DATATRANSFER;
+}
+//------------------------------------------------------------------------------
+int CXClient::ReadClient(int handle, int handletype, char* c)
+{
+ int err;
+
+ assert( c != NULL );
+
+ // socket handles
+ if( handletype == HT_SOCKET )
+ {
+ err = recv( handle, c, 1, 0 );
+ if( err != 1 ) //if the single char has not been received
+ {
+ err = GetLastError();
+ return err;
+ }
+ }
+
+ // success
+ return err;
+}
+
+//------------------------------------------------------------------------------
+int CXClient::WriteClient(int handle, int handletype, char *buff, int bufflen )
+{
+ int err = 0;
+ unsigned long bytes_written = 0;
+
+ assert( buff != NULL );
+
+ // socket handles
+ if( handletype == HT_SOCKET )
+ {
+ err = send( handle, buff, bufflen, 0 );
+ if( err != bufflen )
+ {
+ err = GetLastError();
+ return err;
+ }
+ }
+
+ return err;
+}
+
+//------------------------------------------------------------------------------