X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fstack%2Fsamples%2Flinux%2FSimpleClientServer%2Focclientslow.cpp;h=5fc29c66102f3445ed0ff1f7381ba65ad4984520;hb=935fdb9b67b6c10d007e652e9e2e028fd6ccfe09;hp=689b015817c49b5e95a8dce14bfed1da8e976f45;hpb=00b3660e45c56cb3db35dc2596a054f801b5591a;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.cpp b/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.cpp index 689b015..5fc29c6 100644 --- a/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.cpp +++ b/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.cpp @@ -31,12 +31,19 @@ static int UNICAST_DISCOVERY = 0; static int TEST_CASE = 0; -static const char * TEST_APP_UNICAST_DISCOVERY_QUERY = "coap://0.0.0.0:5683/oc/core"; +static const char * UNICAST_DISCOVERY_QUERY = "coap://%s:6298/oc/core"; static std::string putPayload = "{\"state\":\"off\",\"power\":10}"; static std::string coapServerIP = "255.255.255.255"; static std::string coapServerPort = "5683"; static std::string coapServerResource = "/a/led"; +//The following variable determines the interface protocol (IPv4, IPv6, etc) +//to be used for sending unicast messages. Default set to IPv4. +static OCConnectivityType OC_CONNTYPE = OC_IPV4; +static const char * MULTICAST_RESOURCE_DISCOVERY_QUERY = "/oc/core"; +static int IPV4_ADDR_SIZE = 16; +void StripNewLineChar(char* str); + int gQuitFlag = 0; /* SIGINT handler: set gQuitFlag to 1 for graceful termination */ @@ -50,7 +57,8 @@ void handleSigInt(int signum) static void PrintUsage() { - OC_LOG(INFO, TAG, "Usage : occlient -u <0|1> -t <1|2|3>"); + OC_LOG(INFO, TAG, "Usage : occlient -c <0|1> -u <0|1> -t <1|2|3>"); + OC_LOG(INFO, TAG, "-c <0|1> : IPv4/IPv6 (IPv6 not currently supported)"); OC_LOG(INFO, TAG, "-u <0|1> : Perform multicast/unicast discovery of resources"); OC_LOG(INFO, TAG, "-t 1 : Discover Resources"); OC_LOG(INFO, TAG, "-t 2 : Discover Resources and Initiate Nonconfirmable Get Request"); @@ -63,15 +71,13 @@ OCStackResult InvokeOCDoResource(std::ostringstream &query, { OCStackResult ret; OCCallbackData cbData; - OCDoHandle handle; cbData.cb = cb; cbData.context = (void*)DEFAULT_CONTEXT_VALUE; cbData.cd = NULL; - ret = OCDoResource(&handle, method, query.str().c_str(), 0, - NULL, - qos, &cbData, options, numOptions); + ret = OCDoResource(NULL, method, query.str().c_str(), 0, + NULL, OC_CONNTYPE, qos, &cbData, options, numOptions); if (ret != OC_STACK_OK) { @@ -110,8 +116,9 @@ OCStackApplicationResult getReqCB(void* ctx, OCDoHandle handle, OCClientResponse { OC_LOG_V(INFO, TAG, "Received option with OC_COAP_ID and ID %u with", ((OCHeaderOption)rcvdOptions[i]).optionID ); + OC_LOG_BUFFER(INFO, TAG, ((OCHeaderOption)rcvdOptions[i]).optionData, - ((OCHeaderOption)rcvdOptions[i]).optionLength); + MAX_HEADER_OPTION_DATA_LENGTH); } } } @@ -177,21 +184,41 @@ int InitDiscovery() { OCStackResult ret; OCCallbackData cbData; - OCDoHandle handle; /* Start a discovery query*/ char szQueryUri[64] = { 0 }; if (UNICAST_DISCOVERY) { - strcpy(szQueryUri, TEST_APP_UNICAST_DISCOVERY_QUERY); + char ipv4addr[IPV4_ADDR_SIZE]; + printf("Enter IPv4 address of the Server hosting resource (Ex: 192.168.0.15)\n"); + if (fgets(ipv4addr, IPV4_ADDR_SIZE, stdin)) + { + //Strip newline char from ipv4addr + StripNewLineChar(ipv4addr); + snprintf(szQueryUri, sizeof(szQueryUri), UNICAST_DISCOVERY_QUERY, ipv4addr); + } + else + { + OC_LOG(ERROR, TAG, "!! Bad input for IPV4 address. !!"); + return OC_STACK_INVALID_PARAM; + } } else { - strcpy(szQueryUri, OC_WELL_KNOWN_QUERY); + strcpy(szQueryUri, MULTICAST_RESOURCE_DISCOVERY_QUERY); } cbData.cb = discoveryReqCB; cbData.context = (void*)DEFAULT_CONTEXT_VALUE; cbData.cd = NULL; - ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, OC_LOW_QOS, &cbData, NULL, 0); + if(UNICAST_DISCOVERY) + { + ret = OCDoResource(NULL, OC_REST_GET, szQueryUri, 0, 0, OC_CONNTYPE, + OC_LOW_QOS, &cbData, NULL, 0); + } + else + { + ret = OCDoResource(NULL, OC_REST_GET, szQueryUri, 0, 0, OC_ALL, + OC_LOW_QOS, &cbData, NULL, 0); + } if (ret != OC_STACK_OK) { OC_LOG(ERROR, TAG, "OCStack resource error"); @@ -201,13 +228,9 @@ int InitDiscovery() int main(int argc, char* argv[]) { - uint8_t addr[20] = {0}; - uint8_t* paddr = NULL; - uint16_t port = USE_RANDOM_PORT; - uint8_t ifname[] = "eth0"; int opt; - while ((opt = getopt(argc, argv, "u:t:")) != -1) + while ((opt = getopt(argc, argv, "u:t:c:")) != -1) { switch(opt) { @@ -217,6 +240,11 @@ int main(int argc, char* argv[]) case 't': TEST_CASE = atoi(optarg); break; + case 'c': + // TODO: re-enable IPv4/IPv6 command line selection when IPv6 is supported + // OC_CONNTYPE = OCConnectivityType(atoi(optarg)); + OC_CONNTYPE = OC_IPV4; + break; default: PrintUsage(); return -1; @@ -230,18 +258,8 @@ int main(int argc, char* argv[]) return -1; } - - /*Get Ip address on defined interface and initialize coap on it with random port number - * this port number will be used as a source port in all coap communications*/ - if ( OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, - sizeof(addr)) == ERR_SUCCESS) - { - OC_LOG_V(INFO, TAG, "Starting occlient on address %s",addr); - paddr = addr; - } - /* Initialize OCStack*/ - if (OCInit((char *) paddr, port, OC_CLIENT) != OC_STACK_OK) + if (OCInit(NULL, 0, OC_CLIENT) != OC_STACK_OK) { OC_LOG(ERROR, TAG, "OCStack init error"); return 0; @@ -285,7 +303,6 @@ std::string getIPAddrTBServer(OCClientResponse * clientResponse) return std::string (ipaddr); } - std::string getPortTBServer(OCClientResponse * clientResponse) { if(!clientResponse) return ""; @@ -308,3 +325,4 @@ void parseClientResponse(OCClientResponse * clientResponse) coapServerPort = getPortTBServer(clientResponse); coapServerResource = getQueryStrForGetPut(clientResponse); } +