Chandan ? you are referring to code from master which is going change significantly once connectivity abstraction layer is introduced. I suggest you first check to see if the issue occurs on the CA branch as well and then work out a strategy to distinguish between unicast and multicast.
--Vijay From: iotivity-dev-bounces at lists.iotivity.org [mailto:[email protected]] On Behalf Of Chandan Sent: Thursday, April 02, 2015 11:22 AM To: uzchoi at samsung.com; iotivity-dev at lists.iotivity.org Subject: [dev] Fwd: Timing issue in handling COAP request in HandleCoAPRequests HI Mr.Choi Please suggest if this could be one approach to fix the issue. IOT-191 (https://jira.iotivity.org/browse/IOT-191) 1) if the socket is IPv6, do: int v = 1; setsockopt(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &v, sizeof(v)) 2) if the socket is IPv4, do: int v = 1; #ifdef IP_PKTINFO // Linux, OS X, Windows, NetBSD, Solaris setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &v, sizeof(v)); #elif defined(IP_RECVDSTADDR) // FreeBSD, OpenBSD, DragonflyBSD setsockopt(fd, IPPROTO_IP, IP_RECVDSTADDR, &v, sizeof(v)); setsockopt(fd, IPPROTO_IP, IP_RECVIF, &v, sizeof(v)); #endif 3) convert all the recvfrom calls into recvmsg [*] 4) allocate enough buffer space to receive ancillary data consisting of either an in6_pktinfo, an in_pktinfo or, for the three BSDs that don't support IP_PKTINFO, an in_addr and a struct sockaddr_dl. 5) decode the ancillary data as appropriate 6) Currently this is the signature for request handler /** Message handler for requests that is used as call-back in coap_context_t */ typedef void (*coap_request_handler_t)(struct coap_context_t *, const coap_queue_t * rcvd); We should add below value to coap_queue_t Bool multicast_port; // its TRUE if the packet is received in multicast port. 7) When in HandleCoAPRequests we will see that multicast_port is TRUE and the packet is UNICAST then we can ignore the request. 8) It will be processed only when multicast_port is TRUE and the packet received also is MULTICAST. Regards Chandan swarup Patra chandan.sp at samsung.com<mailto:chandan.sp at samsung.com> On Thu, Apr 2, 2015 at 10:16 PM, Thiago Macieira <thiago.macieira at intel.com<mailto:thiago.macieira at intel.com>> wrote: On Thursday 02 April 2015 21:22:18 Chandan wrote: > 6) Currently this is the signature for request handler > /** Message handler for requests that is used as call-back in > coap_context_t */ > typedef void (*coap_request_handler_t)(struct coap_context_t *, > const coap_queue_t * rcvd); > We should add below value to *coap_queue_t* > Bool multicast_port; // its TRUE if the packet is received in multicast > port. > > 7) When in *HandleCoAPRequests* we will see that multicast_port is TRUE > and the packet is UNICAST then we can ignore the request. > > 8) It will be processed only when multicast_port is TRUE and > the packet received also is MULTICAST. > > *Please let me know your view on this* Hi Chandan I am not familiar with the internal API to comment on this. Maybe someone else can. Erich, Pat, Uze? -- Thiago Macieira - thiago.macieira (AT) intel.com<http://intel.com> Software Architect - Intel Open Source Technology Center -- Regards, Chandan -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.iotivity.org/pipermail/iotivity-dev/attachments/20150403/2ed8298f/attachment.html>
