From e1bda5c0821c3aae2e1609ba752fdb9f06a6dfb4 Mon Sep 17 00:00:00 2001 From: Mauro Sardara Date: Mon, 6 Mar 2017 15:00:04 +0100 Subject: This commit solves some little bugs in the iPing application. 1) The client sends to the server a name containing (among the other things) the size of the ContentObject the server has to reply to the client. The problem is that the Server is expecting to find this size always at the same position in the name inside the interest; if the client sends an interest with a name that matches the FIB but is not exactly the name the server is expecting (e.g. ccnx:/ping/a instead if ccnx:/ping), the server reads the wrong segment (not the one with the size) and sends out a content object with an undefined size. 2) The maximum payload size of a content object is 64000. This causes fragmented packets to not be processed by the forwarder itself if they are coming from a remote connection. A quick fix consists in setting the max payload size of a content object to 1400. So the max size of a content object should be 1400 and not 64000. Change-Id: Ib555b7beb3cfe9172904bd63b8e3a76fe3f71a50 Signed-off-by: Mauro Sardara --- apps/iping/iPing_Server.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'apps/iping/iPing_Server.c') diff --git a/apps/iping/iPing_Server.c b/apps/iping/iPing_Server.c index 199823d5..d3e5211c 100644 --- a/apps/iping/iPing_Server.c +++ b/apps/iping/iPing_Server.c @@ -101,7 +101,7 @@ static void _ccnxPingServer_Run(CCNxPingServer *server) { size_t yearInSeconds = 60 * 60 * 24 * 365; - size_t sizeIndex = ccnxName_GetSegmentCount(server->prefix) + 1; + size_t sizeIndex; if (ccnxPortal_Listen(server->portal, server->prefix, yearInSeconds, CCNxStackTimeout_Never)) { while (true) { @@ -117,6 +117,7 @@ static void _ccnxPingServer_Run(CCNxPingServer *server) { CCNxName *interestName = ccnxInterest_GetName(interest); // Extract the size of the payload response from the client + sizeIndex = ccnxName_GetSegmentCount(interestName) - 2; CCNxNameSegment *sizeSegment = ccnxName_GetSegment(interestName, sizeIndex); char *segmentString = ccnxNameSegment_ToString(sizeSegment); int size = atoi(segmentString); @@ -152,13 +153,13 @@ static void _displayUsage(char *progName) { printf(" %s -h\n", progName); printf("\n"); printf("Example:\n"); - printf(" ccnxPing_Server -l ccnx:/some/prefix -s 4096\n"); + printf(" ccnxPing_Server -l ccnx:/some/prefix -s 1400\n"); printf("\n"); printf("Options:\n"); printf(" -h (--help) Show this help message\n"); printf(" -l (--locator) Set the locator for this server. The default is 'ccnx:/locator'. \n"); printf( - " -s (--size) Set the payload size (less than 64000 - see `ccnxPing_MaxPayloadSize` in ccnxPing_Common.h)\n"); + " -s (--size) Set the payload size (less than 1400 - see `ccnxPing_MaxPayloadSize` in ccnxPing_Common.h)\n"); } /** -- cgit 1.2.3-korg