diff options
author | Sylvain Fonteneau <sylvain.fonteneau@trusted-logic.com> | 2010-11-02 16:27:30 -0500 |
---|---|---|
committer | Jeff Hamilton <jham@android.com> | 2010-12-13 11:08:43 -0600 |
commit | 04f25b3ab4ed13edb3ffc8e7354bca9f7bc60b44 (patch) | |
tree | 4976d3d66ff123a3429e753cc55746eb8f273d8d /src | |
parent | de9450aac004d93771d610c98588ff34a6749d10 (diff) | |
download | external_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.c | 2 | ||||
-rw-r--r-- | src/phFriNfc_LlcpTransport_Connection.c | 14 |
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; |