Problem in reading through the socket | developer.brewmp.com Problem in reading through the socket | developer.brewmp.com

Developer

Problem in reading through the socket

Forums:

Hi all,

I am facing a problem in reading through the socket.
I am able to write correctly, as ISOCKET_Write is returning with a value 69, i.e. the number of bytes written on the socket, but ISOCKET_Read is returning with value 0,
i.e. no bytes could be read.

Here is my code snippet. Kindly have a look and help.

//
// CSocketConnection.cpp
//

#include
#include
#include
#include "CSocketConnection.hpp"
#include "CFirstScreen.hpp"

int AEEClsCreateInstance(AEECLSID ClsId, IShell* pIShell, IModule* po, void** ppObj);

static boolean CSocketConnection_HandleEvent(CSocketConnection* pi, AEEEvent eCode, uint16 wParam, uint32 dwParam);

/**
* Discussion : Callback function to be called whenever socket is availiable for connection.
*
* Param : pUser : Void Pointer.
*
* : nError : Integer
*
* Return : none
*/

void MyCallBack(void * pUser,int nError);

/**
* Discussion : Callback function to be called when GetHostByName API is called.
*
* Param : p : Void Pointer.
*
* Return : none
*/

static void Echoer_TCPDNSConnect(void *p);

/**
* Discussion : Callback function to be called to write something on the socket.
*
* Param : pApp : CSocketConnection Pointer.
*
* Return : none
*/

static void Echoer_TCPWrite(CSocketConnection* pApp);

/**
* Discussion : Callback function to be called to write something on the socket.
*
* Param : pApp : CSocketConnection Pointer.
*
* Return : none
*/

static void Echoer_TCPRead(CSocketConnection* pApp);

//Function Definitions

/**
*
*Constructor Definition
*
*/
CSocketConnection::CSocketConnection(void)
{
m_Net = NULL;
m_pISocket = NULL;
m_pIFileMgr = NULL;
m_pIFile = NULL;

/**
*
*Destructor Definition
*
*/
CSocketConnection::~CSocketConnection(void)
{
if(m_Net != NULL)
INETMGR_Release(m_Net);
m_Net = NULL;

if(m_pISocket != NULL)
ISOCKET_Release(m_pISocket);
m_pISocket = NULL;

if(m_pIFileMgr != NULL)
IFILEMGR_Release(m_pIFileMgr);
m_pIFileMgr = NULL;

if(m_pIFile != NULL)
IFILE_Release(m_pIFile);
m_pIFile = NULL;

int AEEClsCreateInstance(AEECLSID ClsId, IShell* pIShell, IModule* po, void** ppObj)
{
*ppObj = NULL;

if (ClsId == AEECLSID_CSOCKETCONNECTION)
{
if (AEEApplet_New(sizeof(CSocketConnection), ClsId, pIShell, po, (IApplet**)ppObj, (AEEHANDLER)CSocketConnection_HandleEvent, NULL) == TRUE)
{
return AEE_SUCCESS;
}
}
return EFAILED;

}

static boolean CSocketConnection_HandleEvent(CSocketConnection* pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
return pi->HandleEvent(eCode, wParam, dwParam);

boolean CSocketConnection::HandleEvent(AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
boolean result = FALSE;
switch (eCode)
{
case EVT_APP_START:
OnAppStart((AEEAppStart*)dwParam);
result = TRUE;
break;
case EVT_KEY:
result = OnKey(wParam);
break;
}
return result;

void CSocketConnection::OnAppStart(AEEAppStart* environment)
{
boolean ret_val;
AECHAR text[] = L"SocketConnection";
IDISPLAY_DrawText(m_pIDisplay, AEE_FONT_NORMAL, text, -1, 0, 0, NULL, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE | IDF_TEXT_TRANSPARENT);
IDISPLAY_Update(m_pIDisplay);

CFirstScreen *fs = new CFirstScreen;
if(!fs)
return;
ret_val = fs->CreateScreen(this);

if(ret_val == FALSE)
return;

return;

boolean CSocketConnection::OnKey(uint16 key)
{
boolean result = FALSE;

switch (key)
{
case AVK_SELECT:
ISHELL_CloseApplet(m_pIShell, TRUE);
result = TRUE;

boolean ret_val;

CSocketConnection *socket = new CSocketConnection;
if(!socket)
result = FALSE;
ret_val = socket->CreateSocket(this);

if(ret_val == FALSE)
result = FALSE;
break;
}
return result;

boolean CSocketConnection::CreateSocket(CSocketConnection* pi)
{
const char *pszHost = "10.13.0.60";

if(!pi->m_Net)
{
if(SUCCESS != ISHELL_CreateInstance(pi->m_pIShell, AEECLSID_NET, (void **)&(pi->m_Net)))
{
return FALSE;
}

if(SUCCESS != ISHELL_CreateInstance(pi->m_pIShell, AEECLSID_FILEMGR,(void **)&(pi->m_pIFileMgr)))
{
return FALSE;
}

pi->m_pISocket = INETMGR_OpenSocket(pi->m_Net,AEE_SOCK_STREAM);
if(pi->m_pISocket == NULL)
{
return FALSE;
}
}

CALLBACK_Init(&(pi->m_pcb),Echoer_TCPDNSConnect,pi);
INETMGR_GetHostByName(pi->m_Net, &(pi->m_pres), pszHost, &(pi->m_pcb));

//0x0BE14D0A--- darpan_r
//darpan-------0x0A4DE10B
//tomcat----0x0A0D003C
//tomvat_r----0x3C000D0A

return TRUE;

}

void MyCallBack(void * pUser,int nError)
{
CSocketConnection * pApp = (CSocketConnection*)pUser;
if(nError == AEE_NET_SUCCESS)
{
Echoer_TCPWrite(pApp);

int ret_l = ISOCKET_GetLastError(pApp->m_pISocket);

}
return;

static void Echoer_TCPDNSConnect(void *p)
{
int ret_val1 = FALSE;
int ret_val;
int nErr = 0;

CSocketConnection * pApp = (CSocketConnection*)p;

nErr = pApp->m_pres.nResult;

if (nErr > 4)
{
ISOCKET_Release(pApp->m_pISocket);
return;
}

ret_val = ISOCKET_Connect(pApp->m_pISocket, pApp->m_pres.addrs[0], HTONS(8082), MyCallBack,pApp);

if(ret_val == AEE_NET_SUCCESS)
{

/* Echoer_TCPWrite(pApp);

int ret_l = ISOCKET_GetLastError(pApp->m_pISocket); */

}
else
return;

}

static void Echoer_TCPWrite(CSocketConnection* pApp)
{
const char* buf = "GET /RCommWebAppNew/RelianceTest?BillNo=67890&command=1000 HTTP/1.1\r\n";
int ret_w = ISOCKET_Write(pApp->m_pISocket, (byte*)buf, STRLEN(buf));

if(ret_w == AEE_NET_ERROR)
{
ISOCKET_Cancel(pApp->m_pISocket, NULL, NULL);
ISOCKET_Release(pApp->m_pISocket);
return;
}

else if(ret_w == AEE_NET_WOULDBLOCK)
{
ISOCKET_Writeable(pApp->m_pISocket,(PFNNOTIFY)Echoer_TCPWrite,pApp);
}

else
Echoer_TCPRead(pApp);

}

static void Echoer_TCPRead(CSocketConnection* pApp)
{
int iFileCheck=0;
byte* pbDest;
AECHAR* pDest;
pbDest = (byte*)MALLOC(1000 * sizeof(byte));

int ret_r = ISOCKET_Read(pApp->m_pISocket, pbDest,1000);

if(ret_r == AEE_NET_ERROR)
{
ISOCKET_Cancel(pApp->m_pISocket, NULL, NULL);
ISOCKET_Release(pApp->m_pISocket);
return;
}

else if(ret_r == AEE_NET_WOULDBLOCK)
{
ISOCKET_Readable(pApp->m_pISocket,(PFNNOTIFY)Echoer_TCPRead,pApp);
}
else
{
pDest = (AECHAR*)MALLOC(1000 * sizeof(AECHAR));

STRTOWSTR((char*)&pbDest, pDest, sizeof(pbDest));

iFileCheck=WSTRLEN(pDest);
iFileCheck=2*iFileCheck;

pApp->m_pIFile = IFILEMGR_OpenFile(pApp->m_pIFileMgr,"darpan.txt",_OFM_CREATE);
pApp->m_pIFile = IFILEMGR_OpenFile(pApp->m_pIFileMgr,"darpan.txt",_OFM_APPEND);
}

if(pApp->m_pIFile != NULL)
{
IFILE_Write(pApp->m_pIFile,pbDest,iFileCheck);
}

if(pDest != NULL)
{
FREE(pDest);
pDest = NULL;
}
if(pbDest != NULL)
{
FREE(pbDest);
pbDest = NULL;
}

}

regards,
Ambarish