summaryrefslogtreecommitdiffstats
path: root/src/phFriNfc_LlcpTransport.c
diff options
context:
space:
mode:
authorArnaud Ferir <arnaud.ferir@trusted-logic.com>2010-12-21 18:10:50 +0100
committerNick Pelly <npelly@google.com>2011-01-18 13:22:46 -0800
commit76270e7c32ec0c558907430e756712d5b68b417c (patch)
tree3365a0c4f24e4d413d40a5382a5931e6403b66f3 /src/phFriNfc_LlcpTransport.c
parent1ec4ace9cd3079abd7c0b30d0976591c8c0f441e (diff)
downloadexternal_libnfc-nxp-76270e7c32ec0c558907430e756712d5b68b417c.zip
external_libnfc-nxp-76270e7c32ec0c558907430e756712d5b68b417c.tar.gz
external_libnfc-nxp-76270e7c32ec0c558907430e756712d5b68b417c.tar.bz2
Allow LLCP socket creation before link establishment.
This enables to register a server socket prior to LLCP link establishement and avoid any race condition between the local server and the remote client. The modification implies a LLCP socket API change (added the device handle parameter in all LLCP API that can lead to active data exchange). The LLCP socket internal structures are now initialized during LLCP link parameter configuration step instead of LLCP compliancy check to save socket state independently from peer detection. Also removed unused socket states and added some traces. Change-Id: I961c48af4ca9ace68d41b9569dc1038bb2bbdc71
Diffstat (limited to 'src/phFriNfc_LlcpTransport.c')
-rw-r--r--src/phFriNfc_LlcpTransport.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/phFriNfc_LlcpTransport.c b/src/phFriNfc_LlcpTransport.c
index 8613669..22f1e32 100644
--- a/src/phFriNfc_LlcpTransport.c
+++ b/src/phFriNfc_LlcpTransport.c
@@ -215,7 +215,24 @@ NFCSTATUS phFriNfc_LlcpTransport_CloseAll (phFriNfc_LlcpTransport_t *pLlcpTransp
/* Close all sockets */
for(i=0;i<PHFRINFC_LLCP_NB_SOCKET_MAX;i++)
{
- phFriNfc_LlcpTransport_Close(&pLlcpTransport->pSocketTable[i]);
+ if(pLlcpTransport->pSocketTable[i].eSocket_Type == phFriNfc_LlcpTransport_eConnectionOriented)
+ {
+ switch(pLlcpTransport->pSocketTable[i].eSocket_State)
+ {
+ case phFriNfc_LlcpTransportSocket_eSocketConnected:
+ case phFriNfc_LlcpTransportSocket_eSocketConnecting:
+ case phFriNfc_LlcpTransportSocket_eSocketAccepted:
+ case phFriNfc_LlcpTransportSocket_eSocketDisconnected:
+ case phFriNfc_LlcpTransportSocket_eSocketDisconnecting:
+ case phFriNfc_LlcpTransportSocket_eSocketRejected:
+ phFriNfc_LlcpTransport_Close(&pLlcpTransport->pSocketTable[i]);
+ break;
+ }
+ }
+ else
+ {
+ phFriNfc_LlcpTransport_Close(&pLlcpTransport->pSocketTable[i]);
+ }
}
return status;