summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSylvain Fonteneau <sylvain.fonteneau@trusted-logic.com>2010-11-02 16:27:30 -0500
committerJeff Hamilton <jham@android.com>2010-12-13 11:08:43 -0600
commit04f25b3ab4ed13edb3ffc8e7354bca9f7bc60b44 (patch)
tree4976d3d66ff123a3429e753cc55746eb8f273d8d /src
parentde9450aac004d93771d610c98588ff34a6749d10 (diff)
downloadexternal_libnfc-nxp-04f25b3ab4ed13edb3ffc8e7354bca9f7bc60b44.zip
external_libnfc-nxp-04f25b3ab4ed13edb3ffc8e7354bca9f7bc60b44.tar.gz
external_libnfc-nxp-04f25b3ab4ed13edb3ffc8e7354bca9f7bc60b44.tar.bz2
Enable reading a connection-oriented socket even if remotely closed.
The receive function was failing when trying to read the data present in the linear buffer after receiving a remote disconnection request (DISC). Change-Id: I48a2aa058e85e265ca53e61dcde281e47a6e187f
Diffstat (limited to 'src')
-rw-r--r--src/phFriNfc_LlcpTransport.c2
-rw-r--r--src/phFriNfc_LlcpTransport_Connection.c14
2 files changed, 15 insertions, 1 deletions
diff --git a/src/phFriNfc_LlcpTransport.c b/src/phFriNfc_LlcpTransport.c
index ddc8c6a..8613669 100644
--- a/src/phFriNfc_LlcpTransport.c
+++ b/src/phFriNfc_LlcpTransport.c
@@ -1137,7 +1137,7 @@ NFCSTATUS phFriNfc_LlcpTransport_Recv( phFriNfc_LlcpTransport_Socket_t*
pRecv_RspCb(pContext,status);
}
/* Test if the socket is in connected state */
- else if(pLlcpSocket->eSocket_State != phFriNfc_LlcpTransportSocket_eSocketConnected)
+ else if(pLlcpSocket->eSocket_State == phFriNfc_LlcpTransportSocket_eSocketDefault)
{
status = PHNFCSTVAL(CID_FRI_NFC_LLCP_TRANSPORT, NFCSTATUS_INVALID_PARAMETER);
/* Call the CB */
diff --git a/src/phFriNfc_LlcpTransport_Connection.c b/src/phFriNfc_LlcpTransport_Connection.c
index 4b89bbb..2056f45 100644
--- a/src/phFriNfc_LlcpTransport_Connection.c
+++ b/src/phFriNfc_LlcpTransport_Connection.c
@@ -2680,6 +2680,13 @@ NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_Recv( phFriNfc_LlcpTransport
/* Test if the WorkingBuffer Length is null */
if(pLlcpSocket->bufferLinearLength == 0)
{
+ if (pLlcpSocket->eSocket_State != phFriNfc_LlcpTransportSocket_eSocketConnected)
+ {
+ /* Call the Receive CB */
+ pRecv_RspCb(pContext,NFCSTATUS_FAILED);
+ return NFCSTATUS_SUCCESS;
+ }
+
/* Test If data is present in the RW Buffer */
if(pLlcpSocket->indexRwRead != pLlcpSocket->indexRwWrite)
{
@@ -2805,6 +2812,13 @@ NFCSTATUS phFriNfc_LlcpTransport_ConnectionOriented_Recv( phFriNfc_LlcpTransport
}
else
{
+ if (pLlcpSocket->eSocket_State != phFriNfc_LlcpTransportSocket_eSocketConnected)
+ {
+ /* Call the Receive CB */
+ pRecv_RspCb(pContext,NFCSTATUS_FAILED);
+ return NFCSTATUS_SUCCESS;
+ }
+
/* Set Receive pending */
pLlcpSocket->bSocketRecvPending = TRUE;